six-degrees 0.6.0 → 0.7.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 (557) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-path-routes-manifest.json +3 -0
  3. package/.next/standalone/.next/build-manifest.json +3 -3
  4. package/.next/standalone/.next/prerender-manifest.json +14 -14
  5. package/.next/standalone/.next/routes-manifest.json +18 -0
  6. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  7. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  8. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  9. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  10. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  11. package/.next/standalone/.next/server/app/_not-found/page.js +1 -1
  12. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  13. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  14. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  15. package/.next/standalone/.next/server/app/_not-found.rsc +26 -18
  16. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +26 -18
  17. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +25 -16
  18. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  19. package/.next/standalone/.next/server/app/api/admin-delete/route.js +2 -2
  20. package/.next/standalone/.next/server/app/api/admin-delete/route.js.nft.json +1 -1
  21. package/.next/standalone/.next/server/app/api/admin-update/route.js +2 -2
  22. package/.next/standalone/.next/server/app/api/admin-update/route.js.nft.json +1 -1
  23. package/.next/standalone/.next/server/app/api/bridges/route.js +2 -2
  24. package/.next/standalone/.next/server/app/api/bridges/route.js.nft.json +1 -1
  25. package/.next/standalone/.next/server/app/api/bulk-import/route.js +2 -2
  26. package/.next/standalone/.next/server/app/api/bulk-import/route.js.nft.json +1 -1
  27. package/.next/standalone/.next/server/app/api/company-scores/legacy/route.js +3 -3
  28. package/.next/standalone/.next/server/app/api/company-scores/legacy/route.js.nft.json +1 -1
  29. package/.next/standalone/.next/server/app/api/company-scores/route.js +3 -3
  30. package/.next/standalone/.next/server/app/api/company-scores/route.js.nft.json +1 -1
  31. package/.next/standalone/.next/server/app/api/connections/route.js +2 -2
  32. package/.next/standalone/.next/server/app/api/connections/route.js.nft.json +1 -1
  33. package/.next/standalone/.next/server/app/api/data/backup/route/app-paths-manifest.json +3 -0
  34. package/.next/standalone/.next/server/app/api/data/backup/route/build-manifest.json +12 -0
  35. package/.next/standalone/.next/server/app/api/data/backup/route/server-reference-manifest.json +4 -0
  36. package/.next/standalone/.next/server/app/api/data/backup/route.js +7 -0
  37. package/.next/standalone/.next/server/app/api/data/backup/route.js.map +5 -0
  38. package/.next/standalone/.next/server/app/api/data/backup/route.js.nft.json +1 -0
  39. package/.next/standalone/.next/server/app/api/data/backup/route_client-reference-manifest.js +3 -0
  40. package/.next/standalone/.next/server/app/api/data/csv/route/app-paths-manifest.json +3 -0
  41. package/.next/standalone/.next/server/app/api/data/csv/route/build-manifest.json +12 -0
  42. package/.next/standalone/.next/server/app/api/data/csv/route/server-reference-manifest.json +4 -0
  43. package/.next/standalone/.next/server/app/api/data/csv/route.js +8 -0
  44. package/.next/standalone/.next/server/app/api/data/csv/route.js.map +5 -0
  45. package/.next/standalone/.next/server/app/api/data/csv/route.js.nft.json +1 -0
  46. package/.next/standalone/.next/server/app/api/data/csv/route_client-reference-manifest.js +3 -0
  47. package/.next/standalone/.next/server/app/api/data/export/route.js +1 -1
  48. package/.next/standalone/.next/server/app/api/data/export/route.js.nft.json +1 -1
  49. package/.next/standalone/.next/server/app/api/data/import/route.js +1 -1
  50. package/.next/standalone/.next/server/app/api/data/import/route.js.nft.json +1 -1
  51. package/.next/standalone/.next/server/app/api/data/restart/route.js +1 -1
  52. package/.next/standalone/.next/server/app/api/data/restart/route.js.nft.json +1 -1
  53. package/.next/standalone/.next/server/app/api/data/restore/route/app-paths-manifest.json +3 -0
  54. package/.next/standalone/.next/server/app/api/data/restore/route/build-manifest.json +12 -0
  55. package/.next/standalone/.next/server/app/api/data/restore/route/server-reference-manifest.json +4 -0
  56. package/.next/standalone/.next/server/app/api/data/restore/route.js +7 -0
  57. package/.next/standalone/.next/server/app/api/data/restore/route.js.map +5 -0
  58. package/.next/standalone/.next/server/app/api/data/restore/route.js.nft.json +1 -0
  59. package/.next/standalone/.next/server/app/api/data/restore/route_client-reference-manifest.js +3 -0
  60. package/.next/standalone/.next/server/app/api/data/reveal/route.js +1 -1
  61. package/.next/standalone/.next/server/app/api/data/reveal/route.js.nft.json +1 -1
  62. package/.next/standalone/.next/server/app/api/data/route.js +1 -1
  63. package/.next/standalone/.next/server/app/api/data/route.js.nft.json +1 -1
  64. package/.next/standalone/.next/server/app/api/delete-cluster/route.js +2 -2
  65. package/.next/standalone/.next/server/app/api/delete-cluster/route.js.nft.json +1 -1
  66. package/.next/standalone/.next/server/app/api/ingest/route.js +2 -2
  67. package/.next/standalone/.next/server/app/api/ingest/route.js.nft.json +1 -1
  68. package/.next/standalone/.next/server/app/api/network/route.js +2 -2
  69. package/.next/standalone/.next/server/app/api/network/route.js.nft.json +1 -1
  70. package/.next/standalone/.next/server/app/api/notifications/route.js +2 -2
  71. package/.next/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  72. package/.next/standalone/.next/server/app/api/outreach/route.js +2 -2
  73. package/.next/standalone/.next/server/app/api/outreach/route.js.nft.json +1 -1
  74. package/.next/standalone/.next/server/app/api/queue/route.js +2 -2
  75. package/.next/standalone/.next/server/app/api/queue/route.js.nft.json +1 -1
  76. package/.next/standalone/.next/server/app/api/scraper/route.js +4 -2
  77. package/.next/standalone/.next/server/app/api/scraper/route.js.nft.json +1 -1
  78. package/.next/standalone/.next/server/app/api/settings/route.js +3 -3
  79. package/.next/standalone/.next/server/app/api/settings/route.js.nft.json +1 -1
  80. package/.next/standalone/.next/server/app/api/settings/sector-preview/route.js +3 -3
  81. package/.next/standalone/.next/server/app/api/settings/sector-preview/route.js.nft.json +1 -1
  82. package/.next/standalone/.next/server/app/api/settings/sector-suggestions/route.js +3 -3
  83. package/.next/standalone/.next/server/app/api/settings/sector-suggestions/route.js.nft.json +1 -1
  84. package/.next/standalone/.next/server/app/api/setup-profile/route.js +2 -2
  85. package/.next/standalone/.next/server/app/api/setup-profile/route.js.nft.json +1 -1
  86. package/.next/standalone/.next/server/app/api/social/crm/route.js +1 -1
  87. package/.next/standalone/.next/server/app/api/social/crm/route.js.nft.json +1 -1
  88. package/.next/standalone/.next/server/app/api/social/messages/route.js +1 -1
  89. package/.next/standalone/.next/server/app/api/social/messages/route.js.nft.json +1 -1
  90. package/.next/standalone/.next/server/app/api/social/route.js +2 -2
  91. package/.next/standalone/.next/server/app/api/social/route.js.nft.json +1 -1
  92. package/.next/standalone/.next/server/app/api/unlock/route.js +2 -2
  93. package/.next/standalone/.next/server/app/api/unlock/route.js.nft.json +1 -1
  94. package/.next/standalone/.next/server/app/api/update/route.js.nft.json +1 -1
  95. package/.next/standalone/.next/server/app/api/update-images/route.js +2 -2
  96. package/.next/standalone/.next/server/app/api/update-images/route.js.nft.json +1 -1
  97. package/.next/standalone/.next/server/app/api/users/route.js +2 -2
  98. package/.next/standalone/.next/server/app/api/users/route.js.nft.json +1 -1
  99. package/.next/standalone/.next/server/app/avatars/[file]/route.js +1 -1
  100. package/.next/standalone/.next/server/app/avatars/[file]/route.js.nft.json +1 -1
  101. package/.next/standalone/.next/server/app/import/page.js +1 -1
  102. package/.next/standalone/.next/server/app/import/page.js.nft.json +1 -1
  103. package/.next/standalone/.next/server/app/import/page_client-reference-manifest.js +1 -1
  104. package/.next/standalone/.next/server/app/import.html +1 -1
  105. package/.next/standalone/.next/server/app/import.rsc +32 -24
  106. package/.next/standalone/.next/server/app/import.segments/_full.segment.rsc +32 -24
  107. package/.next/standalone/.next/server/app/import.segments/_tree.segment.rsc +2 -2
  108. package/.next/standalone/.next/server/app/import.segments/import/__PAGE__.segment.rsc +23 -18
  109. package/.next/standalone/.next/server/app/index.html +1 -1
  110. package/.next/standalone/.next/server/app/index.rsc +29 -22
  111. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +20 -15
  112. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +29 -22
  113. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  114. package/.next/standalone/.next/server/app/launch/page.js +1 -1
  115. package/.next/standalone/.next/server/app/launch/page.js.nft.json +1 -1
  116. package/.next/standalone/.next/server/app/launch/page_client-reference-manifest.js +1 -1
  117. package/.next/standalone/.next/server/app/launch.html +2 -2
  118. package/.next/standalone/.next/server/app/launch.rsc +32 -24
  119. package/.next/standalone/.next/server/app/launch.segments/_full.segment.rsc +32 -24
  120. package/.next/standalone/.next/server/app/launch.segments/_tree.segment.rsc +2 -2
  121. package/.next/standalone/.next/server/app/launch.segments/launch/__PAGE__.segment.rsc +23 -18
  122. package/.next/standalone/.next/server/app/page.js +1 -1
  123. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  124. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  125. package/.next/standalone/.next/server/app/paths/page.js +1 -1
  126. package/.next/standalone/.next/server/app/paths/page.js.nft.json +1 -1
  127. package/.next/standalone/.next/server/app/paths/page_client-reference-manifest.js +1 -1
  128. package/.next/standalone/.next/server/app/paths.html +1 -1
  129. package/.next/standalone/.next/server/app/paths.rsc +32 -24
  130. package/.next/standalone/.next/server/app/paths.segments/_full.segment.rsc +32 -24
  131. package/.next/standalone/.next/server/app/paths.segments/_tree.segment.rsc +2 -2
  132. package/.next/standalone/.next/server/app/paths.segments/paths/__PAGE__.segment.rsc +21 -18
  133. package/.next/standalone/.next/server/app/profile/page.js +1 -1
  134. package/.next/standalone/.next/server/app/profile/page.js.nft.json +1 -1
  135. package/.next/standalone/.next/server/app/profile/page_client-reference-manifest.js +1 -1
  136. package/.next/standalone/.next/server/app/profile.html +1 -1
  137. package/.next/standalone/.next/server/app/profile.rsc +32 -24
  138. package/.next/standalone/.next/server/app/profile.segments/_full.segment.rsc +32 -24
  139. package/.next/standalone/.next/server/app/profile.segments/_tree.segment.rsc +2 -2
  140. package/.next/standalone/.next/server/app/profile.segments/profile/__PAGE__.segment.rsc +23 -18
  141. package/.next/standalone/.next/server/app/queue/page.js +1 -1
  142. package/.next/standalone/.next/server/app/queue/page.js.nft.json +1 -1
  143. package/.next/standalone/.next/server/app/queue/page_client-reference-manifest.js +1 -1
  144. package/.next/standalone/.next/server/app/queue.html +1 -1
  145. package/.next/standalone/.next/server/app/queue.rsc +32 -24
  146. package/.next/standalone/.next/server/app/queue.segments/_full.segment.rsc +32 -24
  147. package/.next/standalone/.next/server/app/queue.segments/_tree.segment.rsc +2 -2
  148. package/.next/standalone/.next/server/app/queue.segments/queue/__PAGE__.segment.rsc +20 -18
  149. package/.next/standalone/.next/server/app/scores/page.js +1 -1
  150. package/.next/standalone/.next/server/app/scores/page.js.nft.json +1 -1
  151. package/.next/standalone/.next/server/app/scores/page_client-reference-manifest.js +1 -1
  152. package/.next/standalone/.next/server/app/scores.html +1 -1
  153. package/.next/standalone/.next/server/app/scores.rsc +32 -24
  154. package/.next/standalone/.next/server/app/scores.segments/_full.segment.rsc +32 -24
  155. package/.next/standalone/.next/server/app/scores.segments/_tree.segment.rsc +2 -2
  156. package/.next/standalone/.next/server/app/scores.segments/scores/__PAGE__.segment.rsc +23 -18
  157. package/.next/standalone/.next/server/app/settings/page.js +1 -1
  158. package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
  159. package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  160. package/.next/standalone/.next/server/app/settings.html +1 -1
  161. package/.next/standalone/.next/server/app/settings.rsc +32 -24
  162. package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +32 -24
  163. package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  164. package/.next/standalone/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +20 -18
  165. package/.next/standalone/.next/server/app/setup/page.js +1 -1
  166. package/.next/standalone/.next/server/app/setup/page.js.nft.json +1 -1
  167. package/.next/standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  168. package/.next/standalone/.next/server/app/setup.html +1 -1
  169. package/.next/standalone/.next/server/app/setup.rsc +32 -24
  170. package/.next/standalone/.next/server/app/setup.segments/_full.segment.rsc +32 -24
  171. package/.next/standalone/.next/server/app/setup.segments/_tree.segment.rsc +2 -2
  172. package/.next/standalone/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +21 -18
  173. package/.next/standalone/.next/server/app/social/page.js +1 -1
  174. package/.next/standalone/.next/server/app/social/page.js.nft.json +1 -1
  175. package/.next/standalone/.next/server/app/social/page_client-reference-manifest.js +1 -1
  176. package/.next/standalone/.next/server/app/social.html +1 -1
  177. package/.next/standalone/.next/server/app/social.rsc +32 -24
  178. package/.next/standalone/.next/server/app/social.segments/_full.segment.rsc +32 -24
  179. package/.next/standalone/.next/server/app/social.segments/_tree.segment.rsc +2 -2
  180. package/.next/standalone/.next/server/app/social.segments/social/__PAGE__.segment.rsc +23 -18
  181. package/.next/standalone/.next/server/app-paths-manifest.json +3 -0
  182. package/.next/standalone/.next/server/chunks/[root-of-the-server]__00la_y0._.js +1 -1
  183. package/.next/standalone/.next/server/chunks/[root-of-the-server]__05_3-22._.js +1 -1
  184. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__15wc9e-._.js → [root-of-the-server]__063s0x7._.js} +2 -2
  185. package/.next/standalone/.next/server/chunks/[root-of-the-server]__066rab1._.js +7 -0
  186. package/.next/standalone/.next/server/chunks/[root-of-the-server]__07t47cm._.js +1 -1
  187. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__13dx4sd._.js → [root-of-the-server]__0_4y8z7._.js} +3 -3
  188. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0cj5jqc._.js +1 -1
  189. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0e0fei3._.js +1 -1
  190. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0fooke1._.js +7 -0
  191. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ljnyho._.js +1 -1
  192. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0o5-tcg._.js +1 -1
  193. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0qrnous._.js +1 -1
  194. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0t3v1a1._.js +1 -1
  195. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0t6y79e._.js +7 -0
  196. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0wmexuc._.js +1 -1
  197. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0x29muh._.js +7 -0
  198. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0xu34sz._.js +1 -1
  199. package/.next/standalone/.next/server/chunks/[root-of-the-server]__133knx1._.js +1 -1
  200. package/.next/standalone/.next/server/chunks/[root-of-the-server]__15-17hl._.js +1 -1
  201. package/.next/standalone/.next/server/chunks/[root-of-the-server]__19b7mig._.js +1 -1
  202. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1a_6x37._.js +8 -0
  203. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1an_8pa._.js +7 -0
  204. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1bbcwub._.js +1 -1
  205. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1ducpz2._.js +3 -0
  206. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1eris29._.js +1 -1
  207. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1gjo_cq._.js +1 -1
  208. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1qcm08_._.js +1 -1
  209. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1tir0vc._.js +1 -1
  210. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1w25q0m._.js +1 -1
  211. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1xhyinn._.js +3 -0
  212. package/.next/standalone/.next/server/chunks/[root-of-the-server]__20rwfdw._.js +1 -1
  213. package/.next/standalone/.next/server/chunks/_02twlca._.js +1 -1
  214. package/.next/standalone/.next/server/chunks/_072jl0y._.js +1 -1
  215. package/.next/standalone/.next/server/chunks/_0lw8_i0._.js +1 -1
  216. package/.next/standalone/.next/server/chunks/_0sqqpzb._.js +3 -0
  217. package/.next/standalone/.next/server/chunks/_1_fynia._.js +7 -7
  218. package/.next/standalone/.next/server/chunks/_1fn30_l._.js +1 -1
  219. package/.next/standalone/.next/server/chunks/_1itd1o_._.js +1 -1
  220. package/.next/standalone/.next/server/chunks/_1iwkh8t._.js +1 -1
  221. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_data_backup_route_actions_0zoj04p.js +3 -0
  222. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_data_csv_route_actions_0l6m7lg.js +3 -0
  223. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_data_restore_route_actions_0-b05bv.js +3 -0
  224. package/.next/standalone/.next/server/chunks/lib_02iz_9q._.js +4 -0
  225. package/.next/standalone/.next/server/chunks/lib_05agvk3._.js +4 -0
  226. package/.next/standalone/.next/server/chunks/lib_0v84u66._.js +4 -0
  227. package/.next/standalone/.next/server/chunks/lib_db-client_0_dch35.js +174 -0
  228. package/.next/standalone/.next/server/chunks/lib_linkedin-export_12imqxg.js +1 -1
  229. package/.next/standalone/.next/server/chunks/lib_rpc_005abye.js +3 -0
  230. package/.next/standalone/.next/server/chunks/lib_rpc_0b17r6v.js +3 -0
  231. package/.next/standalone/.next/server/chunks/lib_rpc_0c9d9ti.js +7 -0
  232. package/.next/standalone/.next/server/chunks/lib_rpc_0doq0t-.js +3 -0
  233. package/.next/standalone/.next/server/chunks/lib_rpc_0fd2rlw.js +3 -0
  234. package/.next/standalone/.next/server/chunks/lib_rpc_0is4qoc.js +3 -0
  235. package/.next/standalone/.next/server/chunks/lib_rpc_0jnfp2e.js +3 -0
  236. package/.next/standalone/.next/server/chunks/lib_rpc_0nef_n7.js +3 -0
  237. package/.next/standalone/.next/server/chunks/lib_rpc_0plrzra.js +3 -0
  238. package/.next/standalone/.next/server/chunks/lib_rpc_13a4m0c.js +3 -0
  239. package/.next/standalone/.next/server/chunks/lib_rpc_1if17c-.js +3 -0
  240. package/.next/standalone/.next/server/chunks/lib_rpc_1j-zw7v.js +3 -0
  241. package/.next/standalone/.next/server/chunks/lib_rpc_1sngt-q.js +3 -0
  242. package/.next/standalone/.next/server/chunks/lib_rpc_1v2sgme.js +3 -0
  243. package/.next/standalone/.next/server/chunks/lib_rpc_1vh-tgx.js +3 -0
  244. package/.next/standalone/.next/server/chunks/lib_rpc_1zaubz7.js +3 -0
  245. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0qd8pzm._.js +3 -0
  246. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0qdeuyo._.js → [root-of-the-server]__1-012q1._.js} +2 -2
  247. package/.next/standalone/.next/server/chunks/ssr/_01o3i5y._.js +7 -0
  248. package/.next/standalone/.next/server/chunks/ssr/_02sband._.js +7 -0
  249. package/.next/standalone/.next/server/chunks/ssr/_06rgzfh._.js +3 -0
  250. package/.next/standalone/.next/server/chunks/ssr/_07zb7lu._.js +3 -0
  251. package/.next/standalone/.next/server/chunks/ssr/_0_79idq._.js +3 -0
  252. package/.next/standalone/.next/server/chunks/ssr/_0gy11ar._.js +3 -0
  253. package/.next/standalone/.next/server/chunks/ssr/_0hb-dhy._.js +3 -0
  254. package/.next/standalone/.next/server/chunks/ssr/_14nxd3q._.js +3 -0
  255. package/.next/standalone/.next/server/chunks/ssr/_189g8lg._.js +3 -0
  256. package/.next/standalone/.next/server/chunks/ssr/_1f_n00p._.js +1 -1
  257. package/.next/standalone/.next/server/chunks/ssr/_1fm1ih_._.js +2 -2
  258. package/.next/standalone/.next/server/chunks/ssr/_1k2nmbw._.js +2 -2
  259. package/.next/standalone/.next/server/chunks/ssr/_1k9qfsk._.js +3 -0
  260. package/.next/standalone/.next/server/chunks/ssr/app_141w189._.js +1 -1
  261. package/.next/standalone/.next/server/chunks/ssr/app_components_0t908t-._.js +1 -1
  262. package/.next/standalone/.next/server/chunks/ssr/app_components_0uuff77._.js +25 -2
  263. package/.next/standalone/.next/server/chunks/ssr/app_components_1j3q-h5._.js +25 -2
  264. package/.next/standalone/.next/server/chunks/ssr/app_components_CompanyScores_1g0mytz.js +1 -1
  265. package/.next/standalone/.next/server/chunks/ssr/app_import_page_1fmu6_l.js +1 -1
  266. package/.next/standalone/.next/server/chunks/ssr/app_launch_page_19t0dyd.js +1 -1
  267. package/.next/standalone/.next/server/chunks/ssr/app_page_1fazqbf.js +25 -13
  268. package/.next/standalone/.next/server/chunks/ssr/app_paths_page_1ol90m7.js +2 -2
  269. package/.next/standalone/.next/server/chunks/ssr/app_profile_page_0u3-l5y.js +1 -1
  270. package/.next/standalone/.next/server/chunks/ssr/app_queue_page_0c6znd6.js +11 -11
  271. package/.next/standalone/.next/server/chunks/ssr/app_settings_page_1f8mjj_.js +1 -1
  272. package/.next/standalone/.next/server/chunks/ssr/app_setup_page_1-282zx.js +12 -13
  273. package/.next/standalone/.next/server/chunks/ssr/app_social_page_0h7zxda.js +1 -1
  274. package/.next/standalone/.next/server/chunks/ssr/{lib_1c4ieuw._.js → lib_csv_1ttiu_h.js} +2 -2
  275. package/.next/standalone/.next/server/chunks/ssr/lib_galaxy-lab_108_lu-.js +1 -1
  276. package/.next/standalone/.next/server/chunks/ssr/lib_separation_1305zsx.js +3 -0
  277. package/.next/standalone/.next/server/edge/chunks/[root-of-the-server]__0pco7a6._.js +1 -1
  278. package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
  279. package/.next/standalone/.next/server/middleware-manifest.json +5 -5
  280. package/.next/standalone/.next/server/pages/404.html +1 -1
  281. package/.next/standalone/.next/server/pages/500.html +1 -1
  282. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  283. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  284. package/.next/standalone/.next/static/chunks/03-_esd2x_yk6.js +1 -0
  285. package/.next/standalone/.next/static/chunks/03-demj2iy-0p.js +44 -0
  286. package/.next/standalone/.next/static/chunks/0_1r-3csplxnj.js +1 -0
  287. package/.next/standalone/.next/static/chunks/0an_b6zi1r_qq.js +5 -0
  288. package/.next/standalone/.next/static/chunks/0e3g0sil79cus.js +21 -0
  289. package/.next/standalone/.next/static/chunks/0kscsqnvfq3-r.js +1 -0
  290. package/.next/standalone/.next/static/chunks/0p3g5tfostsep.js +7 -0
  291. package/.next/standalone/.next/static/chunks/0zd0t7e60bn4z.js +1 -0
  292. package/.next/standalone/.next/static/chunks/163b-20vwa06i.js +34 -0
  293. package/.next/standalone/.next/static/chunks/{0ws7zy0w57ufi.js → 1eyajb9ntzlrl.js} +1 -1
  294. package/.next/standalone/.next/static/chunks/1pa-2v1ajvrko.js +1 -0
  295. package/.next/standalone/.next/static/chunks/1qbjermbf68xj.js +1 -0
  296. package/.next/standalone/.next/static/chunks/1z9lb-dbcg4aa.js +1 -0
  297. package/.next/standalone/.next/static/chunks/23_1z47al92nz.js +57 -0
  298. package/.next/standalone/.next/static/chunks/260bomtr214m8.js +34 -0
  299. package/.next/standalone/.next/static/chunks/2eo9pqq9gay3r.js +34 -0
  300. package/.next/standalone/.next/static/chunks/2xk2ra4piiuod.js +34 -0
  301. package/.next/standalone/.next/static/chunks/2z1-q0_vunbql.js +2 -0
  302. package/.next/standalone/.next/static/chunks/2zf4jmz9l3li2.js +1 -0
  303. package/.next/standalone/.next/static/chunks/34g73qhayuevu.js +1 -0
  304. package/.next/standalone/.next/static/chunks/3b0-14cxqsprt.js +1 -0
  305. package/.next/standalone/.next/static/chunks/3jarus1_38s2z.js +1 -0
  306. package/.next/standalone/.next/static/chunks/3ssu341hav_sq.css +3 -0
  307. package/.next/standalone/.next/static/chunks/3v1qd3sqhqn0d.js +1 -0
  308. package/.next/standalone/.next/static/chunks/43pg2sursiypz.js +1 -0
  309. package/.next/standalone/.next/static/chunks/44yn0tcd9dfk3.js +1 -0
  310. package/.next/standalone/CHANGELOG.md +143 -0
  311. package/.next/standalone/README.md +71 -49
  312. package/.next/standalone/SECURITY.md +17 -11
  313. package/.next/standalone/app/api/data/backup/route.js +25 -0
  314. package/.next/standalone/app/api/data/csv/route.js +74 -0
  315. package/.next/standalone/app/api/data/export/route.js +1 -1
  316. package/.next/standalone/app/api/data/restore/route.js +48 -0
  317. package/.next/standalone/app/api/data/reveal/route.js +19 -6
  318. package/.next/standalone/app/api/data/route.js +15 -4
  319. package/.next/standalone/app/api/ingest/route.js +1 -1
  320. package/.next/standalone/app/api/queue/route.js +1 -1
  321. package/.next/standalone/app/api/scraper/route.js +120 -32
  322. package/.next/standalone/app/api/social/crm/route.js +2 -1
  323. package/.next/standalone/app/components/AppHeader.js +20 -16
  324. package/.next/standalone/app/components/AppTabs.js +8 -8
  325. package/.next/standalone/app/components/AutoScanButton.js +2 -2
  326. package/.next/standalone/app/components/Avatar.js +1 -1
  327. package/.next/standalone/app/components/ChainView.js +184 -112
  328. package/.next/standalone/app/components/CirclePanel.js +16 -16
  329. package/.next/standalone/app/components/ClusterSpinner.js +64 -0
  330. package/.next/standalone/app/components/CompanyScores.js +20 -20
  331. package/.next/standalone/app/components/EmptyState.js +39 -18
  332. package/.next/standalone/app/components/FieldStep.js +15 -13
  333. package/.next/standalone/app/components/FilterPanel.js +17 -17
  334. package/.next/standalone/app/components/ForceGraph.js +49 -14
  335. package/.next/standalone/app/components/GalaxyLab.js +33 -33
  336. package/.next/standalone/app/components/GridView.js +18 -18
  337. package/.next/standalone/app/components/LegacyScoresCard.js +10 -11
  338. package/.next/standalone/app/components/LinkedInLimits.js +24 -19
  339. package/.next/standalone/app/components/LiquidGlass.js +99 -0
  340. package/.next/standalone/app/components/ListView.js +20 -20
  341. package/.next/standalone/app/components/MapControls.js +5 -5
  342. package/.next/standalone/app/components/MappingProgress.js +16 -16
  343. package/.next/standalone/app/components/NoteDetail.js +13 -13
  344. package/.next/standalone/app/components/OnboardingGate.js +4 -4
  345. package/.next/standalone/app/components/OutlinkQuest.js +25 -25
  346. package/.next/standalone/app/components/PathsAnalyzer.js +37 -36
  347. package/.next/standalone/app/components/PeopleMap.js +21 -21
  348. package/.next/standalone/app/components/RingsView.js +11 -11
  349. package/.next/standalone/app/components/ScanRadar.js +84 -39
  350. package/.next/standalone/app/components/ScanStatusBar.js +22 -18
  351. package/.next/standalone/app/components/ScanTrail.js +8 -5
  352. package/.next/standalone/app/components/SeparationView.js +168 -104
  353. package/.next/standalone/app/components/Sidebar.js +161 -161
  354. package/.next/standalone/app/components/StaleServerBanner.js +4 -4
  355. package/.next/standalone/app/components/TheirCircle.js +26 -26
  356. package/.next/standalone/app/components/ThemeDefs.js +42 -0
  357. package/.next/standalone/app/components/ThemeLoader.js +20 -1
  358. package/.next/standalone/app/components/UpdatePanel.js +22 -22
  359. package/.next/standalone/app/components/UserProvider.js +22 -15
  360. package/.next/standalone/app/components/settings/AppearanceSection.js +47 -24
  361. package/.next/standalone/app/components/settings/DataSection.js +276 -109
  362. package/.next/standalone/app/components/settings/NetworkHealthSection.js +13 -13
  363. package/.next/standalone/app/components/settings/SectorPicker.js +12 -12
  364. package/.next/standalone/app/components/settings/SectorSection.js +13 -14
  365. package/.next/standalone/app/components/settings/TierSection.js +9 -9
  366. package/.next/standalone/app/components/settings/TitleSection.js +11 -11
  367. package/.next/standalone/app/components/settings/UsageSection.js +313 -0
  368. package/.next/standalone/app/components/ui.js +8 -8
  369. package/.next/standalone/app/globals.css +159 -2
  370. package/.next/standalone/app/import/page.js +94 -38
  371. package/.next/standalone/app/launch/page.js +5 -5
  372. package/.next/standalone/app/layout.js +6 -2
  373. package/.next/standalone/app/page.js +53 -37
  374. package/.next/standalone/app/paths/page.js +63 -63
  375. package/.next/standalone/app/profile/page.js +58 -58
  376. package/.next/standalone/app/queue/page.js +54 -54
  377. package/.next/standalone/app/scores/page.js +2 -2
  378. package/.next/standalone/app/settings/page.js +16 -13
  379. package/.next/standalone/app/setup/page.js +221 -125
  380. package/.next/standalone/app/social/Crm.js +63 -62
  381. package/.next/standalone/app/social/SocialHub.js +22 -22
  382. package/.next/standalone/app/social/Thread.js +7 -7
  383. package/.next/standalone/app/social/page.js +2 -2
  384. package/.next/standalone/lib/backups.js +458 -0
  385. package/.next/standalone/lib/chain-layout.js +32 -0
  386. package/.next/standalone/lib/csv-store.js +131 -0
  387. package/.next/standalone/lib/csv.js +137 -39
  388. package/.next/standalone/lib/data-folder.js +19 -3
  389. package/.next/standalone/lib/data-import.js +5 -2
  390. package/.next/standalone/lib/db-client.js +78 -20
  391. package/.next/standalone/lib/demo.js +5 -4
  392. package/.next/standalone/lib/galaxy-export.js +9 -2
  393. package/.next/standalone/lib/galaxy-lab.js +19 -5
  394. package/.next/standalone/lib/galaxy-layouts.js +43 -0
  395. package/.next/standalone/lib/gate.js +10 -4
  396. package/.next/standalone/lib/ingest.js +1 -1
  397. package/.next/standalone/lib/linkedin-limits.js +212 -11
  398. package/.next/standalone/lib/liquid-glass.js +59 -0
  399. package/.next/standalone/lib/notifications.js +13 -0
  400. package/.next/standalone/lib/scan-pace.js +11 -0
  401. package/.next/standalone/lib/scan-progress.js +20 -0
  402. package/.next/standalone/lib/scan-risk.js +44 -0
  403. package/.next/standalone/lib/scanner-setup.js +97 -15
  404. package/.next/standalone/lib/scraper-client.js +17 -3
  405. package/.next/standalone/lib/search-risk.js +7 -3
  406. package/.next/standalone/lib/settings-client.js +5 -3
  407. package/.next/standalone/lib/settings.js +10 -0
  408. package/.next/standalone/lib/social-store.js +3 -2
  409. package/.next/standalone/lib/synced-setting.js +46 -0
  410. package/.next/standalone/lib/theme-store.js +42 -10
  411. package/.next/standalone/lib/themes.js +111 -21
  412. package/.next/standalone/lib/usage.js +195 -0
  413. package/.next/standalone/package-lock.json +2 -2
  414. package/.next/standalone/package.json +1 -1
  415. package/.next/standalone/scripts/scrape.py +26 -2
  416. package/.next/static/chunks/03-_esd2x_yk6.js +1 -0
  417. package/.next/static/chunks/03-demj2iy-0p.js +44 -0
  418. package/.next/static/chunks/0_1r-3csplxnj.js +1 -0
  419. package/.next/static/chunks/0an_b6zi1r_qq.js +5 -0
  420. package/.next/static/chunks/0e3g0sil79cus.js +21 -0
  421. package/.next/static/chunks/0kscsqnvfq3-r.js +1 -0
  422. package/.next/static/chunks/0p3g5tfostsep.js +7 -0
  423. package/.next/static/chunks/0zd0t7e60bn4z.js +1 -0
  424. package/.next/static/chunks/163b-20vwa06i.js +34 -0
  425. package/.next/static/chunks/{0ws7zy0w57ufi.js → 1eyajb9ntzlrl.js} +1 -1
  426. package/.next/static/chunks/1pa-2v1ajvrko.js +1 -0
  427. package/.next/static/chunks/1qbjermbf68xj.js +1 -0
  428. package/.next/static/chunks/1z9lb-dbcg4aa.js +1 -0
  429. package/.next/static/chunks/23_1z47al92nz.js +57 -0
  430. package/.next/static/chunks/260bomtr214m8.js +34 -0
  431. package/.next/static/chunks/2eo9pqq9gay3r.js +34 -0
  432. package/.next/static/chunks/2xk2ra4piiuod.js +34 -0
  433. package/.next/static/chunks/2z1-q0_vunbql.js +2 -0
  434. package/.next/static/chunks/2zf4jmz9l3li2.js +1 -0
  435. package/.next/static/chunks/34g73qhayuevu.js +1 -0
  436. package/.next/static/chunks/3b0-14cxqsprt.js +1 -0
  437. package/.next/static/chunks/3jarus1_38s2z.js +1 -0
  438. package/.next/static/chunks/3ssu341hav_sq.css +3 -0
  439. package/.next/static/chunks/3v1qd3sqhqn0d.js +1 -0
  440. package/.next/static/chunks/43pg2sursiypz.js +1 -0
  441. package/.next/static/chunks/44yn0tcd9dfk3.js +1 -0
  442. package/CHANGELOG.md +143 -0
  443. package/README.md +71 -49
  444. package/SECURITY.md +17 -11
  445. package/lib/backups.js +458 -0
  446. package/lib/chain-layout.js +32 -0
  447. package/lib/csv-store.js +131 -0
  448. package/lib/csv.js +137 -39
  449. package/lib/data-folder.js +19 -3
  450. package/lib/data-import.js +5 -2
  451. package/lib/db-client.js +78 -20
  452. package/lib/demo.js +5 -4
  453. package/lib/galaxy-export.js +9 -2
  454. package/lib/galaxy-lab.js +19 -5
  455. package/lib/galaxy-layouts.js +43 -0
  456. package/lib/gate.js +10 -4
  457. package/lib/ingest.js +1 -1
  458. package/lib/linkedin-limits.js +212 -11
  459. package/lib/liquid-glass.js +59 -0
  460. package/lib/notifications.js +13 -0
  461. package/lib/scan-pace.js +11 -0
  462. package/lib/scan-progress.js +20 -0
  463. package/lib/scan-risk.js +44 -0
  464. package/lib/scanner-setup.js +97 -15
  465. package/lib/scraper-client.js +17 -3
  466. package/lib/search-risk.js +7 -3
  467. package/lib/settings-client.js +5 -3
  468. package/lib/settings.js +10 -0
  469. package/lib/social-store.js +3 -2
  470. package/lib/synced-setting.js +46 -0
  471. package/lib/theme-store.js +42 -10
  472. package/lib/themes.js +111 -21
  473. package/lib/usage.js +195 -0
  474. package/package.json +1 -1
  475. package/scripts/scrape.py +26 -2
  476. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0-rnla2._.js +0 -3
  477. package/.next/standalone/.next/server/chunks/[root-of-the-server]__14ou7j5._.js +0 -3
  478. package/.next/standalone/.next/server/chunks/[root-of-the-server]__16iu0hv._.js +0 -3
  479. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1kbl21f._.js +0 -3
  480. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1rphsdk._.js +0 -3
  481. package/.next/standalone/.next/server/chunks/lib_0851sk0._.js +0 -8
  482. package/.next/standalone/.next/server/chunks/lib_1q7p2ro._.js +0 -8
  483. package/.next/standalone/.next/server/chunks/lib_1r6l86l._.js +0 -8
  484. package/.next/standalone/.next/server/chunks/lib_db-client_15le7cw.js +0 -174
  485. package/.next/standalone/.next/server/chunks/lib_rpc_04s8mzr.js +0 -3
  486. package/.next/standalone/.next/server/chunks/lib_rpc_053z7as.js +0 -3
  487. package/.next/standalone/.next/server/chunks/lib_rpc_0b_-2te.js +0 -3
  488. package/.next/standalone/.next/server/chunks/lib_rpc_0dhbxdm.js +0 -3
  489. package/.next/standalone/.next/server/chunks/lib_rpc_0dxlk31.js +0 -3
  490. package/.next/standalone/.next/server/chunks/lib_rpc_0f8b-qc.js +0 -3
  491. package/.next/standalone/.next/server/chunks/lib_rpc_0pzie7_.js +0 -3
  492. package/.next/standalone/.next/server/chunks/lib_rpc_0r76fq_.js +0 -3
  493. package/.next/standalone/.next/server/chunks/lib_rpc_0ut7pjp.js +0 -3
  494. package/.next/standalone/.next/server/chunks/lib_rpc_15zyqaz.js +0 -3
  495. package/.next/standalone/.next/server/chunks/lib_rpc_18zpjtq.js +0 -3
  496. package/.next/standalone/.next/server/chunks/lib_rpc_1a8xkiz.js +0 -3
  497. package/.next/standalone/.next/server/chunks/lib_rpc_1e_55xo.js +0 -3
  498. package/.next/standalone/.next/server/chunks/lib_rpc_1oxfd1_.js +0 -3
  499. package/.next/standalone/.next/server/chunks/lib_rpc_1s0lod0.js +0 -3
  500. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__08oxiqh._.js +0 -3
  501. package/.next/standalone/.next/server/chunks/ssr/_03l7vge._.js +0 -3
  502. package/.next/standalone/.next/server/chunks/ssr/_08g31gm._.js +0 -3
  503. package/.next/standalone/.next/server/chunks/ssr/_0gk_ofx._.js +0 -3
  504. package/.next/standalone/.next/server/chunks/ssr/_0nwsf93._.js +0 -3
  505. package/.next/standalone/.next/server/chunks/ssr/_0vho1lb._.js +0 -3
  506. package/.next/standalone/.next/server/chunks/ssr/_1-658fq._.js +0 -3
  507. package/.next/standalone/.next/server/chunks/ssr/_1bc46kz._.js +0 -3
  508. package/.next/standalone/.next/server/chunks/ssr/_2105jz8._.js +0 -3
  509. package/.next/standalone/.next/server/chunks/ssr/app_components_settings_SectorPicker_1c-29qw.js +0 -3
  510. package/.next/standalone/.next/static/chunks/02pq76u7y4v9-.js +0 -22
  511. package/.next/standalone/.next/static/chunks/0cmq0exd4d0h9.js +0 -1
  512. package/.next/standalone/.next/static/chunks/0i02yxppzds1o.js +0 -1
  513. package/.next/standalone/.next/static/chunks/0m_p4k-q2qh--.js +0 -1
  514. package/.next/standalone/.next/static/chunks/0oyslj62jkubd.js +0 -1
  515. package/.next/standalone/.next/static/chunks/0vo-l8hxneba6.css +0 -3
  516. package/.next/standalone/.next/static/chunks/0yh8z2tbrc5i_.js +0 -1
  517. package/.next/standalone/.next/static/chunks/17-rhp8sg4m1b.js +0 -44
  518. package/.next/standalone/.next/static/chunks/172e10mi-tpo_.js +0 -34
  519. package/.next/standalone/.next/static/chunks/1ei5vbe2uw6fl.js +0 -1
  520. package/.next/standalone/.next/static/chunks/1f7_pl_wq7lh3.js +0 -11
  521. package/.next/standalone/.next/static/chunks/1jzbe7zdx9vbj.js +0 -2
  522. package/.next/standalone/.next/static/chunks/1m3017gp790pw.js +0 -45
  523. package/.next/standalone/.next/static/chunks/1t20e8u0st7ep.js +0 -1
  524. package/.next/standalone/.next/static/chunks/2-ch9rm27eril.js +0 -11
  525. package/.next/standalone/.next/static/chunks/2ldv-v3s9yaif.js +0 -1
  526. package/.next/standalone/.next/static/chunks/3bp284gjf7dyq.js +0 -1
  527. package/.next/standalone/.next/static/chunks/3k1f6clbn3gj3.js +0 -7
  528. package/.next/standalone/.next/static/chunks/3l4t8je6iguzc.js +0 -1
  529. package/.next/standalone/.next/static/chunks/3tplzuc9jk-tl.js +0 -1
  530. package/.next/standalone/.next/static/chunks/42m0bqr8pbovz.js +0 -11
  531. package/.next/static/chunks/02pq76u7y4v9-.js +0 -22
  532. package/.next/static/chunks/0cmq0exd4d0h9.js +0 -1
  533. package/.next/static/chunks/0i02yxppzds1o.js +0 -1
  534. package/.next/static/chunks/0m_p4k-q2qh--.js +0 -1
  535. package/.next/static/chunks/0oyslj62jkubd.js +0 -1
  536. package/.next/static/chunks/0vo-l8hxneba6.css +0 -3
  537. package/.next/static/chunks/0yh8z2tbrc5i_.js +0 -1
  538. package/.next/static/chunks/17-rhp8sg4m1b.js +0 -44
  539. package/.next/static/chunks/172e10mi-tpo_.js +0 -34
  540. package/.next/static/chunks/1ei5vbe2uw6fl.js +0 -1
  541. package/.next/static/chunks/1f7_pl_wq7lh3.js +0 -11
  542. package/.next/static/chunks/1jzbe7zdx9vbj.js +0 -2
  543. package/.next/static/chunks/1m3017gp790pw.js +0 -45
  544. package/.next/static/chunks/1t20e8u0st7ep.js +0 -1
  545. package/.next/static/chunks/2-ch9rm27eril.js +0 -11
  546. package/.next/static/chunks/2ldv-v3s9yaif.js +0 -1
  547. package/.next/static/chunks/3bp284gjf7dyq.js +0 -1
  548. package/.next/static/chunks/3k1f6clbn3gj3.js +0 -7
  549. package/.next/static/chunks/3l4t8je6iguzc.js +0 -1
  550. package/.next/static/chunks/3tplzuc9jk-tl.js +0 -1
  551. package/.next/static/chunks/42m0bqr8pbovz.js +0 -11
  552. /package/.next/standalone/.next/static/{dQUvvVSXqbkEFC3-CNcwT → ZVpLBK-2vpllv2HxOFs2d}/_buildManifest.js +0 -0
  553. /package/.next/standalone/.next/static/{dQUvvVSXqbkEFC3-CNcwT → ZVpLBK-2vpllv2HxOFs2d}/_clientMiddlewareManifest.js +0 -0
  554. /package/.next/standalone/.next/static/{dQUvvVSXqbkEFC3-CNcwT → ZVpLBK-2vpllv2HxOFs2d}/_ssgManifest.js +0 -0
  555. /package/.next/static/{dQUvvVSXqbkEFC3-CNcwT → ZVpLBK-2vpllv2HxOFs2d}/_buildManifest.js +0 -0
  556. /package/.next/static/{dQUvvVSXqbkEFC3-CNcwT → ZVpLBK-2vpllv2HxOFs2d}/_clientMiddlewareManifest.js +0 -0
  557. /package/.next/static/{dQUvvVSXqbkEFC3-CNcwT → ZVpLBK-2vpllv2HxOFs2d}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,89349,e=>{"use strict";var t=e.i(71645);let n="http://www.w3.org/2000/svg",r={side:{r:2,bezel:26,scale:56},bar:{r:20,bezel:12,scale:22}};e.s(["default",0,function(){return(0,t.useEffect)(()=>{let e=document.documentElement,t=window.matchMedia?.("(prefers-reduced-transparency: reduce)"),o=null,a=new Map,s=0,i=null,l=()=>{if(o)return o;let e=document.createElementNS(n,"svg");return e.setAttribute("width","0"),e.setAttribute("height","0"),e.setAttribute("aria-hidden","true"),e.style.position="absolute",e.style.pointerEvents="none",o=document.createElementNS(n,"defs"),e.appendChild(o),document.body.appendChild(e),o},u=()=>{let o="frosted"!==e.dataset.buttons||t?.matches?[]:[...document.querySelectorAll("[data-glass-panel]")];for(let[e,t]of a)o.includes(e)||(e.style.removeProperty("--lg-lens"),document.getElementById(t.id)?.remove(),a.delete(e));for(let e of o){let t=Math.round(e.offsetWidth),o=Math.round(e.offsetHeight);if(t<20||o<20)continue;let i=a.get(e);if(i&&i.w===t&&i.h===o)continue;let u=r[e.dataset.glassPanel]||r.side,c=i?.id||`lg-lens-${++s}`;document.getElementById(c)?.remove();let d=document.createElementNS(n,"filter");for(let[e,t]of(d.setAttribute("id",c),Object.entries({x:"0",y:"0",width:"100%",height:"100%","color-interpolation-filters":"sRGB"})))d.setAttribute(e,t);let f=document.createElementNS(n,"feImage");for(let[e,n]of Object.entries({x:"0",y:"0",width:String(t),height:String(o),preserveAspectRatio:"none",result:"map"}))f.setAttribute(e,n);f.setAttribute("href",function(e,t,n,r){let o=document.createElement("canvas");o.width=e,o.height=t;let a=o.getContext("2d"),s=a.createImageData(e,t),i=s.data;for(let o=0;o<t;o++)for(let a=0;a<e;a++){let s=(o*e+a)*4,[l,u]=a<r+n||o<r+n||a>=e-r-n||o>=t-r-n?function(e,t,n,r,o,a){let s=e+.5-n/2,i=t+.5-r/2,l=Math.abs(s)-(n/2-o),u=Math.abs(i)-(r/2-o),c=Math.max(l,0),d=Math.max(u,0),f=Math.hypot(c,d),h=o-(f+Math.min(Math.max(l,u),0)),p=0,g=0;f>0?(p=c/f,g=d/f):l>u?p=1:g=1;let m=Math.max(0,1-h/a),y=m*m;return[(p*=-Math.sign(s)||0)*y,(g*=-Math.sign(i)||0)*y]}(a,o,e,t,n,r):[0,0];i[s]=128+127*l,i[s+1]=128+127*u,i[s+2]=128,i[s+3]=255}return a.putImageData(s,0,0),o.toDataURL()}(t,o,Math.min(u.r,Math.floor(Math.min(t,o)/2)),u.bezel));let h=document.createElementNS(n,"feDisplacementMap");for(let[e,t]of Object.entries({in:"SourceGraphic",in2:"map",scale:String(u.scale),xChannelSelector:"R",yChannelSelector:"G"}))h.setAttribute(e,t);d.append(f,h),l().appendChild(d),e.style.setProperty("--lg-lens",`url(#${c})`),a.set(e,{id:c,w:t,h:o})}},c=()=>{clearTimeout(i),i=setTimeout(u,150)};u();let d=new ResizeObserver(c),f=()=>{d.disconnect(),document.querySelectorAll("[data-glass-panel]").forEach(e=>d.observe(e))};f();let h=new MutationObserver(e=>{e.some(e=>"attributes"===e.type||[...e.addedNodes,...e.removedNodes].some(e=>1===e.nodeType&&(e.matches?.("[data-glass-panel]")||e.querySelector?.("[data-glass-panel]"))))&&(f(),c())});return h.observe(document.body,{childList:!0,subtree:!0}),h.observe(e,{attributes:!0,attributeFilter:["data-buttons"]}),t?.addEventListener?.("change",c),()=>{clearTimeout(i),d.disconnect(),h.disconnect(),t?.removeEventListener?.("change",c)}},[]),null}],89349)},40643,e=>{"use strict";var t=e.i(43476),n=e.i(71645),r=e.i(18566),o=e.i(22016),a=e.i(40996),s=e.i(68792),i=e.i(99883);let l={full:"Scanning your network",refresh:"Checking for new connections",bridge:"Scanning a circle",resume:"Carrying on with a circle","resume-all":"Carrying on with circles","auto-bridge":"Auto-Bridge","auto-bridge-retry":"Auto-Bridge",rescrape:"Re-scanning a circle",login:"Signing in to LinkedIn",setup:"Setting up the scanner",company:"Scanning a company",photos:"Saving photos",messages:"Reading your messages list","messages-full":"Reading your whole messages history"};e.s(["default",0,function(){let e,u,[c,d]=(0,n.useState)(()=>(0,a.scannerNow)()),[f,h]=(0,n.useState)(!1),[p,g]=(0,n.useState)(!1),[m,y]=(0,n.useState)(!1),b=(0,n.useSyncExternalStore)(s.watchAllDay,s.allDayNow,()=>!1),w=(0,n.useSyncExternalStore)(i.watchActivities,i.activitiesNow,i.noActivities),v=(0,n.useSyncExternalStore)(i.watchNotchTabs,i.notchTabsNow,i.noNotchTabs);(0,n.useEffect)(()=>(0,a.watchScanner)(()=>{let e=(0,a.scannerNow)();d(e),e.running||h(!1)}),[]);let S=(0,r.usePathname)(),[x,E]=(0,n.useState)(null),[k,A]=(0,n.useState)(null);(0,n.useEffect)(()=>{let e=null,t=null,n=0,r=()=>{n=0;let r=document.querySelector("header");r!==e&&(t?.disconnect(),t=null,(e=r)&&(t=new ResizeObserver(o)).observe(e));let a=e?Math.round(e.getBoundingClientRect().bottom):null;E(e=>e===a?e:a);let s=document.getElementById("main-tabs")?.getBoundingClientRect(),i=s&&s.width?Math.round(s.left+s.width/2):null;A(e=>e===i?e:i)},o=()=>{n||(n=requestAnimationFrame(r))};o();let a=new MutationObserver(o);return a.observe(document.body,{childList:!0,subtree:!0}),window.addEventListener("resize",o),()=>{cancelAnimationFrame(n),t?.disconnect(),a.disconnect(),window.removeEventListener("resize",o)}},[S]);let j=!!c?.running,N=w[w.length-1]||null,O=j||N||b,P=!!(O||v);if((0,n.useEffect)(()=>((0,i.setNotchShown)(P),()=>(0,i.setNotchShown)(!1)),[P]),!O&&!v)return null;let T=c?.progress,C=T?.kind==="batch"&&T.total?`${T.current||T.done||0} of ${T.total}`:T?.kind==="walk"&&T.total?`${(T.done||0).toLocaleString()} of ${T.total.toLocaleString()}`:T?.kind==="saving"?"saving":null,R=T?.total?Math.min(1,(T.current||T.done||0)/T.total):N?.progress??null,I=c?.budget,M=j?[...c.log||[]].reverse().find(e=>e&&e.trim())?.trim():null,_=p||m,L=j?"#00ff88":N?"warn"===N.tone?"#FFD700":"#3498DB":"#556",$=j?l[c.action]||"Scanning":N?N.label:"Auto scan",D=j?C:N?N.detail:null,F=null!=k?`clamp(170px, ${k}px, calc(100vw - 170px))`:"50%";return(0,t.jsxs)("div",{"data-glass-panel":"bar",onMouseLeave:()=>g(!1),style:{position:"fixed",left:F,top:x??"var(--scan-bar-top, 94px)",transform:"translateX(-50%)",zIndex:60,maxWidth:"calc(100vw - 16px)",padding:_&&O?"4px 6px 10px":"4px 6px 5px",borderRadius:"0 0 14px 14px",border:`1px solid ${j?"rgba(0,255,136,0.25)":"rgba(var(--sd-ink, 255, 255, 255), 0.1)"}`,borderTop:"none",background:"var(--sd-surface, rgba(8,10,22,0.96))",color:"var(--sd-fg-2, #cfd8d8)",fontSize:12,opacity:v||j||N||_?1:.55,boxShadow:j?"0 6px 20px rgba(0,0,0,0.35)":"none",transition:"padding 0.18s ease, opacity 0.18s ease"},children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:4,overflowX:"auto"},children:[v&&(0,t.jsx)("div",{role:"tablist","aria-label":"View",style:{display:"flex",gap:2},children:v.items.map(e=>{let n=e.key===v.current;return(0,t.jsxs)("button",{role:"tab","aria-selected":n,title:e.title,onClick:()=>v.onPick(e.key),style:{display:"flex",alignItems:"center",gap:6,padding:"5px 11px",borderRadius:8,border:"none",cursor:"pointer",whiteSpace:"nowrap",fontSize:12,fontWeight:600,background:n?"rgba(52,152,219,0.22)":"transparent",color:n?"var(--sd-fg-1, #cfe6f7)":"var(--sd-fg-3, #8b9aa8)"},children:[e.icon&&(0,t.jsx)("span",{"aria-hidden":"true",children:e.icon}),e.label]},e.key)})}),v&&O&&(0,t.jsx)("span",{"aria-hidden":"true",style:{width:1,alignSelf:"stretch",margin:"3px 4px",background:"rgba(var(--sd-ink, 255, 255, 255), 0.12)"}}),O&&(0,t.jsxs)("button",{onMouseEnter:()=>g(!0),onClick:()=>y(e=>!e),"aria-expanded":_,title:_?"Close":"Open",style:{display:"flex",alignItems:"center",gap:8,background:"none",border:"none",color:"inherit",font:"inherit",cursor:"pointer",padding:"5px 8px",whiteSpace:"nowrap"},children:[(0,t.jsx)("span",{className:j?"notch-pulse":void 0,style:{width:7,height:7,borderRadius:"50%",background:L,flexShrink:0}}),(0,t.jsxs)("span",{role:"status","aria-live":"polite",style:{display:"flex",alignItems:"center",gap:8},children:[(0,t.jsx)("b",{style:{color:j||N?"var(--sd-fg-1, #fff)":"var(--sd-fg-2, #b8c4c4)",fontWeight:600},children:$}),D&&(0,t.jsx)("span",{style:{color:"var(--sd-fg-3, #8b9a9a)"},children:D})]}),!j&&!N&&_&&(0,t.jsx)("span",{style:{color:"var(--sd-fg-3, #8b9a9a)"},children:"ready · press Auto scan beside Scan to start"})]})]}),O&&null!=R&&(0,t.jsx)("div",{style:{height:2,margin:"3px 6px 0",borderRadius:2,background:"rgba(var(--sd-ink, 255, 255, 255), 0.08)",overflow:"hidden"},children:(0,t.jsx)("div",{style:{width:`${Math.round(100*R)}%`,height:"100%",background:j?"#00ff88":"#3498DB",transition:"width 0.4s ease"}})}),_&&j&&(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:12,margin:"8px 8px 0",flexWrap:"wrap"},children:[c.target?.name&&(0,t.jsx)("span",{children:c.target.name}),I&&(0,t.jsxs)(o.default,{href:"/settings#usage",style:{color:(e=I.searches,(u=I.cap)?e/u>=.9?"#ff6b6b":e/u>=.6?"#FFD700":"#00ff88":"#8b9a9a"),textDecoration:"none"},title:"Searches on your LinkedIn account in the last 24 hours, and your daily budget. Open LinkedIn usage",children:[I.searches,I.cap?` of ${I.cap}`:""," searches in the last 24 hours"]}),M&&(0,t.jsx)("span",{style:{color:"var(--sd-fg-4, #667)",maxWidth:280,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:M,children:M}),(0,t.jsx)(o.default,{href:"/setup",style:{color:"var(--sd-blue, #3498DB)",textDecoration:"none"},children:"Details"}),(0,t.jsx)("button",{onClick:async()=>{h(!0);try{await (0,a.stopScrape)()}catch{h(!1)}},disabled:f,title:"Stops after saving what's been read; Resume on the Scan page carries on from the same page",style:{padding:"3px 10px",borderRadius:8,fontSize:12,cursor:f?"default":"pointer",background:"rgba(255,107,107,0.12)",color:"var(--sd-fg-2, #ff9b9b)",border:"1px solid rgba(255,107,107,0.35)"},children:f?"Stopping…":"Stop"})]}),_&&!j&&N?.detail&&(0,t.jsx)("div",{style:{margin:"6px 8px 0",color:"var(--sd-fg-3, #8b9a9a)"},children:N.detail})]})}])},87915,e=>{"use strict";var t=e.i(71645),n=e.i(40996),r=e.i(64745);let o=!1;e.s(["default",0,function(){return(0,t.useEffect)(()=>{if(r.IS_DEMO||o)return;let e=()=>{};return fetch("/api/social").then(e=>e.json()).then(({social:t})=>{if(!t?.autoSync||o)return;let r=t.liveAt?Date.parse(t.liveAt):0,a=new Date().getHours();Date.now()-r<864e5||a<9||a>=19||(e=(0,n.watchScanner)(()=>{let t=(0,n.scannerNow)();t.known&&!o&&(o=!0,e(),t.running||(0,n.beginScrape)("messages").catch(()=>{}))}))}).catch(()=>{}),()=>e()},[]),null}])},37711,e=>{"use strict";var t=e.i(43476),n=e.i(71645);e.s(["default",0,function(){let[e,r]=(0,n.useState)(null);return((0,n.useEffect)(()=>{let e=!0;return fetch("/api/update").then(e=>e.json()).then(t=>{e&&t?.restartNeeded&&r(t)}).catch(()=>{}),()=>{e=!1}},[]),e)?(0,t.jsxs)("div",{role:"status",style:{position:"fixed",left:0,right:0,bottom:0,zIndex:9999,background:"linear-gradient(90deg, #FFD700, #FF6B35)",color:"#1a1200",padding:"9px 16px",fontSize:13,fontWeight:600,lineHeight:1.5,display:"flex",alignItems:"center",justifyContent:"center",gap:10,flexWrap:"wrap",textAlign:"center"},children:[(0,t.jsxs)("span",{children:["You have newer code on disk (",e.sha,") than this server is running (",e.bootSha,"). Restart it to see the changes: ",(0,t.jsx)("code",{style:{background:"rgba(var(--sd-shade, 0, 0, 0), 0.16)",padding:"1px 6px",borderRadius:4},children:"Ctrl-C"})," in the terminal, then ",(0,t.jsx)("code",{style:{background:"rgba(var(--sd-shade, 0, 0, 0), 0.16)",padding:"1px 6px",borderRadius:4},children:"npm run dev"}),"."]}),(0,t.jsx)("button",{onClick:()=>r(null),style:{border:"none",background:"rgba(var(--sd-shade, 0, 0, 0), 0.18)",color:"#1a1200",borderRadius:6,padding:"3px 10px",fontWeight:700,cursor:"pointer"},children:"Dismiss"})]}):null}])},56456,e=>{"use strict";var t=e.i(71645),n=e.i(58712);e.s(["default",0,function(){return(0,t.useEffect)(()=>{let t=!0;return fetch("/api/settings",{cache:"no-store"}).then(e=>e.ok?e.json():null).then(async r=>{if(!t||!r?.settings)return;(0,n.adoptSavedTheme)(r.settings.theme);let{adoptSavedLayouts:o}=await e.A(11678);t&&o(r.settings.galaxyLayouts)}).catch(()=>{}),()=>{t=!1}},[]),null}])},68792,e=>{"use strict";var t=e.i(40996);let n=(e,t)=>{try{let n=localStorage.getItem(e);return null===n?t:JSON.parse(n)}catch{return t}};e.s(["allDayNow",0,function(){try{return"true"===localStorage.getItem("six-degrees-experimental-auto")}catch{return!1}},"startAutoScan",0,function(){let e=n("six-degrees-bridge-order","newest");return(0,t.beginScrape)("auto-bridge",{experimental:!0,maxBridges:10,order:e,tiers:"score"===e?["S","A"]:[],maxPages:n("six-degrees-bridge-pages-v2",100),deeper:n("six-degrees-bridge-finish",!0)})},"watchAllDay",0,function(e){return window.addEventListener("storage",e),window.addEventListener("six-degrees:experimental",e),()=>{window.removeEventListener("storage",e),window.removeEventListener("six-degrees:experimental",e)}}])},99883,e=>{"use strict";let t=new Set,n=[],r=[],o=new Set,a=null,s=new Set,i=!1;e.s(["activitiesNow",0,()=>n,"noActivities",0,()=>r,"noNotch",0,()=>!1,"noNotchTabs",0,()=>null,"notchShownNow",0,()=>i,"notchTabsNow",0,()=>a,"setNotchShown",0,function(e){!!e!==i&&(i=!!e,s.forEach(e=>e()))},"setNotchTabs",0,function(e){a=e&&Array.isArray(e.items)&&e.items.length>1?e:null,o.forEach(e=>e())},"showActivity",0,function(e){return e?.id?(n=[...n.filter(t=>t.id!==e.id),e],t.forEach(e=>e()),()=>{var r;return r=e.id,void(n.some(e=>e.id===r)&&(n=n.filter(e=>e.id!==r),t.forEach(e=>e())))}):()=>{}},"watchActivities",0,function(e){return t.add(e),()=>t.delete(e)},"watchNotchShown",0,function(e){return s.add(e),()=>s.delete(e)},"watchNotchTabs",0,function(e){return o.add(e),()=>o.delete(e)}])},40996,16999,e=>{"use strict";Symbol.for("six-degrees.scan-state");let t="The scanner works in Google Chrome, and Chrome isn’t on this computer.",n="Install Google Chrome, then come back",r=`${t} ${n}.`,o={install:"Install",setup:"Set up the scanner"};async function a(){let e=await fetch("/api/scraper");if(!e.ok)throw Error("Could not reach the app.");return e.json()}e.s(["CHROME_REFUSAL",0,r,"askForField",0,function(e,t){if(!e)return null;let n=e.network;return!!n&&!!n.first&&!n.second&&!n.third&&!e.running&&(void 0===t?null:!!(t&&!t.fieldAsked&&!t.sectorFocus?.sectors?.length))},"setupStep",0,function(e){let r=function(e){let t=e?.checks||{},n=(t,n,r)=>e?.running&&e.action===t?r:n;if(t.dependencies)return"bundled"===t.pythonSource?{done:!0,text:"Ready. The scanner and its Python come with the app, so there is nothing to install.",button:null}:"custom"===t.pythonSource?{done:!0,text:`Ready, on the Python named in SIX_DEGREES_PYTHON (${t.pythonPath}).`,button:null}:{done:!0,text:"Installed.",button:null};let r=t.ownPython&&"bundled"!==t.ownPython.source?`The Python named in SIX_DEGREES_PYTHON didn't work (${t.ownPython.problem}), so the scanner needs setting up another way. `:"";if(t.installFrom)return{done:!1,text:r+("downloaded"===t.installFrom.source?"Its own Python is already here. One more step, about a minute: it installs the browser-automation packages into it.":"One-time, about a minute. Downloads the browser-automation packages."),button:{action:"install",label:n("install","Install","Installing…")}};if(t.download){let e=Math.round(t.download.size/1048576);return{done:!1,text:`${r}${function(e){if(!e?.version)return"This computer has no Python the scanner can use.";let[t,n]=String(e.version).split(".").map(Number);return 3===t&&n>=10&&n<=14&&!1===e.venv?`This computer's Python ${e.version} can't make the scanner's own environment (on Ubuntu or Debian, python3-venv isn't installed).`:`This computer has Python ${e.version}, and the scanner needs 3.10 to 3.14.`}(t.systemPython)} Set up the scanner downloads its own Python ${t.download.version} (${e} MB, from GitHub) and the scanner's packages (from PyPI) into your data folder. Nothing else on this computer changes. About two minutes.`,button:{action:"setup",label:n("setup","Set up the scanner","Setting up…")}}}return{done:!1,text:`${r}No Python 3.10 to 3.14 was found on this machine. Install one from python.org, then reload.`,button:null}}(e),a=function(e,{done:t,button:n}){if(e?.source!=="bundled")return null;let r=/SIGKILL|code signature|not valid for use in process|quarantine|not permitted/i.test(e.problem||""),a=[`The Python that comes with the app didn't work (${e.problem}).`];return r&&a.push("macOS may have blocked it."),!1===e.retry&&a.push("Six Degrees won't try it again until you restart it."),t?a.push("The scanner uses another Python on this computer instead."):n?a.push(`To scan now, use ${o[n.action]} below: it gives the scanner a Python of its own in your data folder.`):a.push("To scan now, install Python 3.10 to 3.14 from python.org, then reload."),a.join(" ")}(e?.checks?.ownPython,r);return e?.checks?.chrome!==!1?{...r,note:a,chrome:null}:{...r,done:!1,text:r.done?t:`${r.text} ${t}`,note:a,chrome:{label:n,href:"https://www.google.com/chrome/"}}}],16999);let s="six-degrees-hide-chrome";function i(e,t={},n=function(e="u">typeof localStorage?localStorage:null){try{return!0===JSON.parse(e?.getItem(s)||"false")}catch{return!1}}()){return{action:e,...t,...n?{headless:!0}:{}}}async function l(e,t,n={}){let r=await fetch("/api/scraper",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i(e,{...t?{name:t}:{},...n}))}),o=await r.json().catch(()=>({}));if(!r.ok)throw Error(o.error||"Could not start the scanner.");return o}async function u(e){let t=await fetch(`/api/scraper?resume=${encodeURIComponent(e)}`);return t.ok?(await t.json()).resume??null:null}let c=Object.freeze({skips:[],read:[]});async function d(){try{let e=await fetch("/api/scraper?reach=1");if(!e.ok)return c;let t=await e.json();return{skips:Array.isArray(t.skips)?t.skips:[],read:Array.isArray(t.read)?t.read:[]}}catch{return c}}async function f(e){let t=await fetch(`/api/scraper?person=${encodeURIComponent(e)}`);return t.ok?t.json():{person:null}}async function h(){await fetch("/api/scraper",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"cancel"})})}let p=Object.freeze({known:!1,running:!1,pending:!1,action:null,target:null,startedAt:null,progress:null,pages:0,found:[],log:[],finished:[]}),g=new Set,m=p,y=JSON.stringify(m),b=null,w=null,v=0,S=!1,x=new Set;function E(e){let t=JSON.stringify(e);if(t!==y)for(let n of(y=t,m=Object.freeze(e),[...g]))n()}async function k(){(!("u">typeof document&&document.hidden)||m.running)&&await function(){if(w&&w.epoch===v)return w.promise;let e=v,t=fetch("/api/scraper?job=1").then(e=>e.ok?e.json():null).then(t=>{e===v&&function(e){if(!e||"object"!=typeof e)return;let t=!0===e.running;t&&null!=e.startedAt&&x.add(e.startedAt);let n=(Array.isArray(e.recent)?e.recent:[]).filter(e=>x.has(e.startedAt)).map(n=>({...n,log:!t&&n.startedAt===e.startedAt&&Array.isArray(e.log)?e.log:[]}));E({known:!0,running:t||S,pending:S&&!t,action:t?e.action??null:S?m.action:null,target:t?e.target??null:S?m.target:null,startedAt:t?e.startedAt??null:null,progress:t?e.progress??null:null,pages:t&&Number(e.pages)||0,found:t&&Array.isArray(e.found)?e.found.map(Number).filter(Number.isFinite):[],budget:t?e.budget??null:null,log:t&&Array.isArray(e.log)?e.log:[],finished:n})}(t)}).catch(()=>{}).finally(()=>{w?.promise===t&&(w=null)});return w={epoch:e,promise:t},t}(),clearTimeout(b),b=g.size?setTimeout(k,m.running?1500:5e3):null}function A(e){return g.add(e),1===g.size&&k(),()=>{g.delete(e),g.size||(clearTimeout(b),b=null)}}async function j(e,{name:t,id:n,onLog:r,...o}={}){let a;v++,S=!0,E({...m,known:!0,running:!0,pending:!0,action:e,target:t||n?{id:n??null,name:t??null}:null,startedAt:null,progress:null,log:[]});try{a=await l(e,t,{...n?{id:n}:{},...o})}catch(e){throw S=!1,v++,m.pending&&E({...m,running:!1,pending:!1,action:null,target:null,log:[]}),k(),e}S=!1,v++;let s=a?.startedAt??null;null!=s&&x.add(s);let i=new Promise(e=>{let t=A(()=>{m.running&&m.startedAt===s&&r?.(m.log);let n=null==s?m.running?null:{exitCode:null,failure:null,log:[]}:m.finished.find(e=>e.startedAt===s);n&&(t(),n.log.length&&r?.(n.log),e(n))});k()});return{startedAt:s,ended:i}}function N(e){return!!e?.target&&["bridge","rescrape","resume"].includes(e.action)}e.s(["HIDE_CHROME_KEY",0,s,"NO_SCAN_NOTES",0,c,"SCANNER_UNKNOWN",0,p,"beginScrape",0,j,"busyReason",0,function(e=m){if(!e?.running)return null;let t=e.target?.name;switch(e.action){case"bridge":case"rescrape":case"resume":return t?`${t}’s circle is being scanned`:"A circle is being scanned";case"company":return t?`${t} is being scanned`:"A company is being scanned";case"auto-bridge":case"auto-bridge-retry":case"resume-all":return"Your bridges are being mapped, one by one";case"full":case"refresh":return"Your own connections are being scanned";default:switch(e.action){case"install":return"The scanner's packages are being installed";case"setup":return"The scanner is being set up";case"login":return"The LinkedIn sign-in window is open";case"photos":return"Profile photos are being saved";default:return"A scan is running"}}},"fillsCircles",0,function(e){return N(e)||["auto-bridge","auto-bridge-retry","resume-all"].includes(e?.action)},"isCircleScan",0,N,"loadScanNotes",0,d,"notReadyMessage",0,function(e){if(!e)return"Could not reach the app.";let t=e.checks||{};return t.scriptsFound?t.dependencies?t.chrome?null:r:t.python||t.download?"The scanner is not set up yet. Open Scan to set it up.":"No Python 3.10 to 3.14 is installed on this machine.":"The scanner files are missing from this install."},"pickedPerson",0,f,"resumePoint",0,u,"runScrape",0,function(e,t={}){return j(e,t).then(e=>e.ended)},"scanRequest",0,i,"scannerNow",0,function(){return m},"scansCircleOf",0,function(e,t){if(!N(e)||!t)return!1;let{id:n,name:r}=e.target;return n&&t.id?n===t.id:!!r&&r===t.name},"scraperStatus",0,a,"stopScrape",0,h,"watchScanner",0,A],40996)},56899,e=>{"use strict";async function t(e,{keepalive:n=!1}={}){try{let t=await fetch("/api/settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({settings:e}),keepalive:n}),r=await t.json();return{settings:r.settings||null,effects:r.effects||null,error:t.ok?null:r.error||"Could not save."}}catch{return{settings:null,effects:null,error:"Could not reach the app. Reload this page to see what is saved."}}}e.s(["saveSettings",0,t])},40827,e=>{"use strict";e.s(["laterSaver",0,function(e,t=400){let n,r=null,o=t=>{clearTimeout(r),r=null,Promise.resolve(e(n,{now:t})).catch(()=>{})},a=e=>{n=e,r&&clearTimeout(r),r=setTimeout(()=>o(!1),t)};return a.flush=()=>{r&&o(!0)},a},"reconcileSaved",0,function({saved:e,cached:t,isDefault:n,same:r}){return null==e?{use:t,save:!n(t),changed:!1}:{use:e,save:!1,changed:!r(e,t)}}])},58712,e=>{"use strict";var t=e.i(54322),n=e.i(56899),r=e.i(40827);let o="six-degrees-theme",a=Object.freeze({base:"standard",custom:{}}),s=new Set,i=a;function l(){try{return(0,t.cleanTheme)(JSON.parse(localStorage.getItem(o)||"null")||a)}catch{return a}}function u(e){let n=(0,t.resolveTheme)(e);Object.assign(t.TIER_COLORS,n.tiers);let r=(0,t.isLight)(n);if(Object.assign(t.MAP_LOOK,{you:n.you,lines:n.lines,line:n.line,bg:n.bg,dots:n.dots,light:r,text:r?"#11141c":"#ffffff"}),"u"<typeof document)return;let o=(0,t.themeVars)(e),a=document.documentElement;for(let e of[...a.style])!e.startsWith("--sd-")||e in o||a.style.removeProperty(e);for(let[e,t]of Object.entries(o))a.style.setProperty(e,t);Object.assign(a.dataset,(0,t.themeAttrs)(e)),a.style.colorScheme=r?"light":"dark";try{localStorage.setItem("six-degrees-theme-vars",JSON.stringify({vars:o,attrs:(0,t.themeAttrs)(e)}))}catch{}}u(i=l()),window.addEventListener("storage",e=>{e.key===o&&(u(i=l()),s.forEach(e=>e()))});let c=(e,n)=>JSON.stringify((0,t.cleanTheme)(e))===JSON.stringify((0,t.cleanTheme)(n)),d=(0,r.laterSaver)((e,{now:t})=>(0,n.saveSettings)({theme:e},{keepalive:t}));function f(e){i=(0,t.cleanTheme)(e);try{localStorage.setItem(o,JSON.stringify(i))}catch{}u(i),s.forEach(e=>e())}window.addEventListener("pagehide",()=>d.flush()),e.s(["adoptSavedTheme",0,function(e){let{use:o,save:s,changed:l}=(0,r.reconcileSaved)({saved:null==e?null:(0,t.cleanTheme)(e),cached:i,isDefault:e=>c(e,a),same:c});s&&(0,n.saveSettings)({theme:i}),l&&f(o)},"serverTheme",0,()=>a,"setTheme",0,function(e){f(e),d(i)},"themeNow",0,()=>i,"watchTheme",0,function(e){return s.add(e),()=>s.delete(e)}])},22016,(e,t,n)=>{"use strict";e.i(47167),Object.defineProperty(n,"__esModule",{value:!0});var r={default:function(){return y},useLinkStatus:function(){return w}};for(var o in r)Object.defineProperty(n,o,{enumerable:!0,get:r[o]});let a=e.r(90809),s=e.r(43476),i=a._(e.r(71645)),l=e.r(95057),u=e.r(8372),c=e.r(18581),d=e.r(18967),f=e.r(5550),h=e.r(88540),p=e.r(91949),g=e.r(73668),m=e.r(9396);function y(t){var n;let r,o,a,[y,w]=(0,i.useOptimistic)(p.IDLE_LINK_STATUS),v=(0,i.useRef)(null),{href:S,as:x,children:E,prefetch:k=null,passHref:A,replace:j,shallow:N,scroll:O,onClick:P,onMouseEnter:T,onTouchStart:C,legacyBehavior:R=!1,onNavigate:I,transitionTypes:M,ref:_,unstable_dynamicOnHover:L,...$}=t;r=E,R&&("string"==typeof r||"number"==typeof r)&&(r=(0,s.jsx)("a",{children:r}));let D=i.default.useContext(u.AppRouterContext),F=!1!==k,z=!1===k?"none":!0===k?"full":"auto",B="none"!==z?"auto"===z?m.FetchStrategy.PPR:m.FetchStrategy.Full:m.FetchStrategy.PPR,U="string"==typeof(n=x||S)?n:(0,l.formatUrl)(n);if(R){if(r?.$$typeof===Symbol.for("react.lazy"))throw Object.defineProperty(Error("`<Link legacyBehavior>` received a direct child that is either a Server Component, or JSX that was loaded with React.lazy(). This is not supported. Either remove legacyBehavior, or make the direct child a Client Component that renders the Link's `<a>` tag."),"__NEXT_ERROR_CODE",{value:"E863",enumerable:!1,configurable:!0});o=i.default.Children.only(r)}let J=R?o&&"object"==typeof o&&o.ref:_,W,K=i.default.useCallback(e=>(null!==D&&(v.current=(0,p.mountLinkInstance)(e,U,D,B,F,w,W)),()=>{v.current&&((0,p.unmountLinkForCurrentNavigation)(v.current),v.current=null),(0,p.unmountPrefetchableInstance)(e)}),[F,U,D,B,w,W]),G={ref:(0,c.useMergedRef)(K,J),onClick(t){R||"function"!=typeof P||P(t),R&&o.props&&"function"==typeof o.props.onClick&&o.props.onClick(t),!D||t.defaultPrevented||function(t,n,r,o,a,s,l,u="none"){if("u">typeof window){let c,{nodeName:d}=t.currentTarget;if("A"===d.toUpperCase()&&((c=t.currentTarget.getAttribute("target"))&&"_self"!==c||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||t.nativeEvent&&2===t.nativeEvent.which)||t.currentTarget.hasAttribute("download"))return;if(!(0,g.isLocalURL)(n)){o&&(t.preventDefault(),location.replace(n));return}if(t.preventDefault(),s){let e=!1;if(s({preventDefault:()=>{e=!0}}),e)return}let{dispatchNavigateAction:f}=e.r(99781);i.default.startTransition(()=>{f(n,o?"replace":"push",!1===a?h.ScrollBehavior.NoScroll:h.ScrollBehavior.Default,r.current,l,u)})}}(t,U,v,j,O,I,M,z)},onMouseEnter(e){R||"function"!=typeof T||T(e),R&&o.props&&"function"==typeof o.props.onMouseEnter&&o.props.onMouseEnter(e),D&&F&&(0,p.onNavigationIntent)(e.currentTarget,!0===L)},onTouchStart:function(e){R||"function"!=typeof C||C(e),R&&o.props&&"function"==typeof o.props.onTouchStart&&o.props.onTouchStart(e),D&&F&&(0,p.onNavigationIntent)(e.currentTarget,!0===L)}};return(0,d.isAbsoluteUrl)(U)?G.href=U:R&&!A&&("a"!==o.type||"href"in o.props)||(G.href=(0,f.addBasePath)(U)),a=R?i.default.cloneElement(o,G):(0,s.jsx)("a",{...$,...G,children:r}),(0,s.jsx)(b.Provider,{value:y,children:a})}let b=(0,i.createContext)(p.IDLE_LINK_STATUS),w=()=>(0,i.useContext)(b);("function"==typeof n.default||"object"==typeof n.default&&null!==n.default)&&void 0===n.default.__esModule&&(Object.defineProperty(n.default,"__esModule",{value:!0}),Object.assign(n.default,n),t.exports=n.default)},18581,(e,t,n)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),Object.defineProperty(n,"useMergedRef",{enumerable:!0,get:function(){return o}});let r=e.r(71645);function o(e,t){let n=(0,r.useRef)(null),o=(0,r.useRef)(null);return(0,r.useCallback)(r=>{if(null===r){let e=n.current;e&&(n.current=null,e());let t=o.current;t&&(o.current=null,t())}else e&&(n.current=a(e,r)),t&&(o.current=a(t,r))},[e,t])}function a(e,t){if("function"!=typeof e)return e.current=t,()=>{e.current=null};{let n=e(t);return"function"==typeof n?n:()=>e(null)}}("function"==typeof n.default||"object"==typeof n.default&&null!==n.default)&&void 0===n.default.__esModule&&(Object.defineProperty(n.default,"__esModule",{value:!0}),Object.assign(n.default,n),t.exports=n.default)},18967,(e,t,n)=>{"use strict";e.i(47167),Object.defineProperty(n,"__esModule",{value:!0});var r={DecodeError:function(){return y},MiddlewareNotFoundError:function(){return S},MissingStaticPage:function(){return v},NormalizeError:function(){return b},PageNotFoundError:function(){return w},SP:function(){return g},ST:function(){return m},WEB_VITALS:function(){return a},execOnce:function(){return s},getDisplayName:function(){return d},getLocationOrigin:function(){return u},getURL:function(){return c},isAbsoluteUrl:function(){return l},isResSent:function(){return f},loadGetInitialProps:function(){return p},normalizeRepeatedSlashes:function(){return h},stringifyError:function(){return x}};for(var o in r)Object.defineProperty(n,o,{enumerable:!0,get:r[o]});let a=["CLS","FCP","FID","INP","LCP","TTFB"];function s(e){let t,n=!1;return(...r)=>(n||(n=!0,t=e(...r)),t)}let i=/^[a-zA-Z][a-zA-Z\d+\-.]*?:/,l=e=>{let t=e.charCodeAt(0);return!!(t>=65&&t<=90||t>=97&&t<=122)&&i.test(e)};function u(){let{protocol:e,hostname:t,port:n}=window.location;return`${e}//${t}${n?":"+n:""}`}function c(){let{href:e}=window.location,t=u();return e.substring(t.length)}function d(e){return"string"==typeof e?e:e.displayName||e.name||"Unknown"}function f(e){return e.finished||e.headersSent}function h(e){let t=e.split("?");return t[0].replace(/\\/g,"/").replace(/\/\/+/g,"/")+(t[1]?`?${t.slice(1).join("?")}`:"")}async function p(e,t){let n=t.res||t.ctx&&t.ctx.res;if(!e.getInitialProps)return t.ctx&&t.Component?{pageProps:await p(t.Component,t.ctx)}:{};let r=await e.getInitialProps(t);if(n&&f(n))return r;if(!r)throw Object.defineProperty(Error(`"${d(e)}.getInitialProps()" should resolve to an object. But found "${r}" instead.`),"__NEXT_ERROR_CODE",{value:"E1025",enumerable:!1,configurable:!0});return r}let g="u">typeof performance,m=g&&["mark","measure","getEntriesByName"].every(e=>"function"==typeof performance[e]);class y extends Error{}class b extends Error{}class w extends Error{constructor(e){super(),this.code="ENOENT",this.name="PageNotFoundError",this.message=`Cannot find module for page: ${e}`}}class v extends Error{constructor(e,t){super(),this.message=`Failed to load static file for page: ${e} ${t}`}}class S extends Error{constructor(){super(),this.code="ENOENT",this.message="Cannot find the middleware module"}}function x(e){return JSON.stringify({message:e.message,stack:e.stack})}},73668,(e,t,n)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),Object.defineProperty(n,"isLocalURL",{enumerable:!0,get:function(){return a}});let r=e.r(18967),o=e.r(52817);function a(e){if(!(0,r.isAbsoluteUrl)(e))return!0;try{let t=(0,r.getLocationOrigin)(),n=new URL(e,t);return n.origin===t&&(0,o.hasBasePath)(n.pathname)}catch(e){return!1}}},98183,(e,t,n)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r={assign:function(){return l},searchParamsToUrlQuery:function(){return a},urlQueryToSearchParams:function(){return i}};for(var o in r)Object.defineProperty(n,o,{enumerable:!0,get:r[o]});function a(e){let t={};for(let[n,r]of e.entries()){let e=t[n];void 0===e?t[n]=r:Array.isArray(e)?e.push(r):t[n]=[e,r]}return t}function s(e){return"string"==typeof e?e:("number"!=typeof e||isNaN(e))&&"boolean"!=typeof e?"":String(e)}function i(e){let t=new URLSearchParams;for(let[n,r]of Object.entries(e))if(Array.isArray(r))for(let e of r)t.append(n,s(e));else t.set(n,s(r));return t}function l(e,...t){for(let n of t){for(let t of n.keys())e.delete(t);for(let[t,r]of n.entries())e.append(t,r)}return e}},95057,(e,t,n)=>{"use strict";e.i(47167),Object.defineProperty(n,"__esModule",{value:!0});var r={formatUrl:function(){return i},formatWithValidation:function(){return u},urlObjectKeys:function(){return l}};for(var o in r)Object.defineProperty(n,o,{enumerable:!0,get:r[o]});let a=e.r(90809)._(e.r(98183)),s=/https?|ftp|gopher|file/;function i(e){let{auth:t,hostname:n}=e,r=e.protocol||"",o=e.pathname||"",i=e.hash||"",l=e.query||"",u=!1;t=t?encodeURIComponent(t).replace(/%3A/i,":")+"@":"",e.host?u=t+e.host:n&&(u=t+(~n.indexOf(":")?`[${n}]`:n),e.port&&(u+=":"+e.port)),l&&"object"==typeof l&&(l=String(a.urlQueryToSearchParams(l)));let c=e.search||l&&`?${l}`||"";return r&&!r.endsWith(":")&&(r+=":"),e.slashes||(!r||s.test(r))&&!1!==u?(u="//"+(u||""),o&&"/"!==o[0]&&(o="/"+o)):u||(u=""),i&&"#"!==i[0]&&(i="#"+i),c&&"?"!==c[0]&&(c="?"+c),o=o.replace(/[?#]/g,encodeURIComponent),c=c.replace("#","%23"),`${r}${u}${o}${c}${i}`}let l=["auth","hash","host","hostname","href","path","pathname","port","protocol","query","search","slashes"];function u(e){return i(e)}},18566,(e,t,n)=>{t.exports=e.r(76562)}]);
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,60451,e=>{"use strict";var t=e.i(43476),s=e.i(71645),i=e.i(22016),r=e.i(18566);e.s(["default",0,function(){let e=(0,r.useRouter)();return(0,s.useEffect)(()=>{e.replace("/queue?view=messages")},[e]),(0,t.jsxs)("div",{style:{minHeight:"100vh",background:"var(--sd-page)",color:"var(--sd-fg-3, #aab)",display:"flex",alignItems:"center",justifyContent:"center",fontSize:13},children:["Social is part of ",(0,t.jsx)(i.default,{href:"/queue?view=messages",style:{color:"var(--sd-orange, #FF6B35)",marginLeft:4},children:"Outlink"})," now."]})}])}]);
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,2776,e=>{"use strict";var t=e.i(43476),n=e.i(15812);e.s(["default",0,function({children:e}){let{userId:r,ready:i}=(0,n.useUser)();return i&&r?e:(0,t.jsx)("div",{style:{minHeight:"100vh",display:"flex",alignItems:"center",justifyContent:"center",background:"var(--sd-page)",color:"var(--sd-fg-1, #fff)",padding:24,textAlign:"center",fontFamily:"var(--sd-font)"},children:i?(0,t.jsxs)("div",{style:{maxWidth:420},children:[(0,t.jsx)("div",{style:{fontSize:18,fontWeight:700,marginBottom:8},children:"Can’t reach Six Degrees’ local server"}),(0,t.jsx)("div",{style:{color:"var(--sd-fg-3, #888)",fontSize:14,lineHeight:1.6},children:"The page loaded, but the app behind it isn’t answering. Quit Six Degrees and open it again."})]}):(0,t.jsx)("div",{style:{fontSize:18,fontWeight:600},children:"Loading…"})})}])},8819,e=>{"use strict";var t=e.i(43476);let n="1px solid rgba(var(--sd-ink, 255, 255, 255), 0.1)";function r({children:e,style:n}){return(0,t.jsx)("div",{style:{fontSize:13.5,color:"var(--sd-fg-3, #8b9a9a)",lineHeight:1.6,marginTop:4,...n},children:e})}e.s(["Body",0,r,"Btn",0,function({children:e,onClick:r,disabled:i,primary:o,tone:s,type:a="button"}){return(0,t.jsx)("button",{type:a,onClick:r,disabled:i,style:{padding:"9px 18px",borderRadius:7,fontSize:13.5,fontWeight:650,color:i?"var(--sd-fg-4, #667)":"var(--sd-fg-1, #fff)",border:n,background:i?"rgba(var(--sd-ink, 255, 255, 255), 0.05)":"bad"===s?"rgba(255,80,80,0.15)":o?"linear-gradient(135deg, #9B59B6, #3498DB)":"rgba(var(--sd-ink, 255, 255, 255), 0.08)",cursor:i?"not-allowed":"pointer"},children:e})},"FONT",0,"var(--sd-font)","LINE",0,n,"Mono",0,function({children:e}){return(0,t.jsx)("code",{style:{background:"rgba(var(--sd-ink, 255, 255, 255), 0.08)",padding:"1px 5px",borderRadius:4,wordBreak:"break-all"},children:e})},"Section",0,function({id:e,title:i,intro:o,children:s}){return(0,t.jsxs)("section",{id:e,style:{padding:"24px 0",borderBottom:n,scrollMarginTop:16},children:[(0,t.jsx)("h2",{style:{fontSize:16,fontWeight:650,margin:"0 0 6px"},children:i}),o&&(0,t.jsx)(r,{style:{marginTop:0,marginBottom:12},children:o}),s]})},"Status",0,function({children:e,tone:n}){return(0,t.jsxs)("div",{role:"status",style:{marginTop:10,padding:"10px 14px",borderRadius:8,fontSize:13.5,lineHeight:1.6,color:"ok"===n?"#00ff88":"bad"===n?"#ff7676":"#e8e8ee",background:"ok"===n?"rgba(0,255,136,0.08)":"bad"===n?"rgba(255,80,80,0.08)":"rgba(var(--sd-ink, 255, 255, 255), 0.05)",border:`1px solid ${"ok"===n?"rgba(0,255,136,0.3)":"bad"===n?"rgba(255,80,80,0.3)":"rgba(var(--sd-ink, 255, 255, 255), 0.12)"}`},children:["ok"===n&&"✓ ",e]})}])},99201,e=>{"use strict";var t=e.i(43476),n=e.i(71645),r=e.i(18566),i=e.i(19821);e.i(46949);var o=e.i(828),s=e.i(48235);let a={height:10,borderRadius:6},l={background:"rgba(52,152,219,0.06)",borderRadius:12,padding:20,marginBottom:24,border:"1px solid rgba(52,152,219,0.2)"};function d({degree1:e=[],degree2:n=[],skips:r=[]}){let i=function(e=[],t=[],n=[]){let r=(0,s.reachIndex)(e,t,{skips:n}),i=e=>{let t=(0,s.circleState)(e,r);return"scanned"===t?"mapped":t},o={mapped:0,hidden:0,todo:0},a={};for(let t of e){let e=i(t);o[e]+=1;let n=t.tier||"D";a[n]=a[n]||{mapped:0,hidden:0,todo:0,total:0},a[n][e]+=1,a[n].total+=1}let l=e.length,d=o.mapped+o.hidden;return{...o,total:l,resolved:d,percent:l?Math.round(d/l*100):0,batches:Math.ceil(o.todo/25),byTier:a}}(e,n,r);if(!i.total)return null;let u=e=>i.total?e/i.total*100:0,g=0===i.todo;return(0,t.jsxs)("div",{style:l,children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"baseline",marginBottom:10},children:[(0,t.jsx)("h3",{style:{fontSize:14,fontWeight:700,margin:0,color:"var(--sd-blue, #3498DB)"},children:"2nd-degree mapping"}),(0,t.jsx)("span",{style:{fontSize:12,color:g?"var(--sd-green, #00ff88)":"var(--sd-fg-3, #8b9a9a)",fontWeight:600},children:g?"Everything reachable is mapped":`${i.percent}%`})]}),(0,t.jsxs)("div",{style:{...a,display:"flex",overflow:"hidden",background:"rgba(var(--sd-ink, 255, 255, 255), 0.06)"},children:[(0,t.jsx)("div",{style:{width:`${u(i.mapped)}%`,background:"#00ff88"}}),(0,t.jsx)("div",{style:{width:`${u(i.hidden)}%`,background:"rgba(var(--sd-ink, 255, 255, 255), 0.22)"}})]}),(0,t.jsxs)("div",{style:{display:"flex",gap:16,marginTop:10,fontSize:12,flexWrap:"wrap"},children:[(0,t.jsx)(c,{color:"#00ff88",label:"mapped",value:i.mapped}),(0,t.jsx)(c,{color:"rgba(var(--sd-ink, 255, 255, 255), 0.35)",label:"hidden",value:i.hidden}),(0,t.jsx)(c,{color:"rgba(var(--sd-ink, 255, 255, 255), 0.12)",label:"to go",value:i.todo}),(0,t.jsxs)("span",{style:{color:"var(--sd-fg-4, #667)",marginLeft:"auto"},children:["of ",i.total]})]}),i.hidden>0&&(0,t.jsx)("p",{style:{fontSize:11.5,color:"var(--sd-fg-4, #667)",margin:"10px 0 0",lineHeight:1.6},children:"Hidden means they keep their connections private. That will not change, and it does not count against you."}),!g&&(0,t.jsxs)("p",{style:{fontSize:11.5,color:"var(--sd-fg-3, #8b9a9a)",margin:"10px 0 0",lineHeight:1.6},children:[i.todo," left, about ",(0,t.jsxs)("b",{children:[i.batches," ",1===i.batches?"batch":"batches"]})," of ",25,". Run one, leave it a while, run another. Long unbroken runs are what gets an account restricted."]}),(0,t.jsx)("div",{style:{marginTop:16,display:"flex",flexDirection:"column",gap:7},children:["S","A","B","C","D"].filter(e=>i.byTier[e]?.total).map(e=>{let n=i.byTier[e];return(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:10,fontSize:11},children:[(0,t.jsx)("span",{style:{width:14,color:o.TIER_COLORS_CLASSIC[e],fontWeight:700},children:e}),(0,t.jsxs)("div",{style:{flex:1,height:5,borderRadius:3,display:"flex",overflow:"hidden",background:"rgba(var(--sd-ink, 255, 255, 255), 0.06)"},children:[(0,t.jsx)("div",{style:{width:`${n.mapped/n.total*100}%`,background:o.TIER_COLORS_CLASSIC[e]}}),(0,t.jsx)("div",{style:{width:`${n.hidden/n.total*100}%`,background:"rgba(var(--sd-ink, 255, 255, 255), 0.22)"}})]}),(0,t.jsxs)("span",{style:{color:"var(--sd-fg-4, #667)",width:62,textAlign:"right"},children:[n.mapped,"/",n.total]})]},e)})})]})}function c({color:e,label:n,value:r}){return(0,t.jsxs)("span",{style:{display:"flex",alignItems:"center",gap:6,color:"var(--sd-fg-3, #8b9a9a)"},children:[(0,t.jsx)("span",{style:{width:8,height:8,borderRadius:2,background:e}}),(0,t.jsx)("b",{style:{color:"var(--sd-fg-1, #e2e8f0)"},children:r})," ",n]})}var u=e.i(64745),g=e.i(2776),f=e.i(15812),h=e.i(69083),p=e.i(22016),y=e.i(98658),m=e.i(54322),b=e.i(64666),v=e.i(8819);let x=m.TIER_COLORS,S=e=>`${Math.round(100*e)}%`;function k(){let{userId:e}=(0,f.useUser)(),[r,o]=(0,n.useState)(null),[s,a]=(0,n.useState)(!1);(0,n.useEffect)(()=>{if(!e)return;let t=!0;return(0,i.loadNetwork)(e).then(e=>{t&&o(function({degree1:e=[],degree2:t=[],ties:n=0}={}){let r=new Map;for(let e of t)e?.source_connection_id!=null&&r.set(e.source_connection_id,(r.get(e.source_connection_id)||0)+1);let i=(0,b.exclusiveReach)(t,e),o=e.length,s=Math.max(0,Number(n)||0),a=o?o-2*s/o:0,l=new Map(e.map(e=>[e.id,e])),d=[...i.entries()].sort((e,t)=>t[1].reach-e[1].reach||String(e[0]).localeCompare(String(t[0]))).slice(0,5).map(([e,t])=>{let n=l.get(e)||{};return{id:e,name:n.name||"",company:n.company||"",tier:n.tier||"",circle:r.get(e)||0,only:t.only,share:t.total?t.only/t.total:0}});return{circles:r.size,early:r.size<5,twoWays:(0,b.redundancy)(t,e),effective:{n:o,ties:s,size:a,efficiency:o?a/o:0},top:d}}(e))}).catch(()=>{t&&a(!0)}),()=>{t=!1}},[e]);let l={padding:"12px 14px",borderRadius:8,border:v.LINE,background:"rgba(var(--sd-ink, 255, 255, 255), 0.03)"};return(0,t.jsxs)("section",{id:"health",style:{marginTop:20},children:[(0,t.jsx)("h2",{style:{fontSize:16,margin:"0 0 6px"},children:"Network health"}),s&&(0,t.jsx)(v.Body,{children:"Couldn’t read your network just now."}),!s&&!r&&(0,t.jsx)(v.Body,{children:"Reading your network…"}),r&&0===r.circles&&(0,t.jsx)(v.Body,{children:"Scan a few of your connections’ circles (the Scan page, step 4) and this shows how your network holds together."}),r&&r.circles>0&&(0,t.jsxs)(t.Fragment,{children:[r.early&&(0,t.jsxs)("div",{style:{fontSize:12.5,color:"var(--sd-gold, #FFD700)",margin:"4px 0 10px"},children:["An early estimate: ",r.circles," ",1===r.circles?"circle":"circles"," scanned. These get sharper as you scan more."]}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(220px, 1fr))",gap:10},children:[(0,t.jsxs)("div",{style:l,children:[(0,t.jsx)("div",{style:{fontSize:22,fontWeight:700},children:S(r.twoWays)}),(0,t.jsx)("div",{style:{fontSize:12.5,color:"var(--sd-fg-2, #b8c4c4)"},children:"of your 2nd degree you reach two or more ways"}),(0,t.jsx)("div",{style:{fontSize:11.5,color:"var(--sd-fg-4, #778)",marginTop:4},children:"Higher is safer: lose one connection and they’re still reachable."})]}),(0,t.jsxs)("div",{style:l,children:[(0,t.jsx)("div",{style:{fontSize:22,fontWeight:700},children:Math.round(r.effective.size).toLocaleString()}),(0,t.jsxs)("div",{style:{fontSize:12.5,color:"var(--sd-fg-2, #b8c4c4)"},children:["effective reach of your ",r.effective.n.toLocaleString()," connections (",S(r.effective.efficiency)," non-overlapping)"]}),(0,t.jsxs)("div",{style:{fontSize:11.5,color:"var(--sd-fg-4, #778)",marginTop:4},children:["From ",r.effective.ties.toLocaleString()," ",1===r.effective.ties?"tie":"ties"," between your connections seen in circle scans so far, so it can only come down as you scan more."]})]})]}),r.top.length>0&&(0,t.jsxs)("div",{style:{...l,marginTop:10,padding:0},children:[(0,t.jsx)("div",{style:{padding:"10px 14px",fontSize:12.5,color:"var(--sd-fg-2, #b8c4c4)",borderBottom:v.LINE},children:"Your connections who reach the most people no one else does"}),r.top.map((e,n)=>(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:10,padding:"8px 14px",borderBottom:n<r.top.length-1?"1px solid rgba(var(--sd-ink, 255, 255, 255), 0.04)":"none",fontSize:13},children:[(0,t.jsxs)("span",{style:{width:22,color:"var(--sd-fg-4, #778)"},children:["#",n+1]}),(0,t.jsx)("span",{style:{width:8,height:8,borderRadius:"50%",background:x[e.tier]||"#667",flexShrink:0}}),(0,t.jsxs)("span",{style:{flex:1,minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:[(0,t.jsx)("b",{children:e.name}),e.company?(0,t.jsxs)("span",{style:{color:"var(--sd-fg-3, #8b9a9a)"},children:[" · ",e.company]}):null]}),(0,t.jsxs)("span",{style:{color:"var(--sd-fg-2, #b8c4c4)",whiteSpace:"nowrap"},children:[e.circle.toLocaleString()," in circle"]}),(0,t.jsxs)("span",{style:{color:"var(--sd-green, #00ff88)",whiteSpace:"nowrap"},children:[e.only.toLocaleString()," only them (",S(e.share),")"]}),(0,t.jsx)(p.default,{href:`/?chain=${encodeURIComponent(e.id)}`,style:{color:"var(--sd-blue, #3498DB)",textDecoration:"none",whiteSpace:"nowrap"},children:"Explore →"})]},e.id))]})]})]})}let w={1:"Observer",11:"Connector",31:"Networker",51:"Strategist",76:"Architect"};function j(){let{userId:e,userName:o,userProfile:s}=(0,f.useUser)(),a=(0,r.useRouter)(),l="insights"===(0,r.useSearchParams)().get("view")?"insights":"profile",c=s||{name:o||"User",headline:"",sectors:[],goals:[]},[g,b]=(0,n.useState)(null),[v,x]=(0,n.useState)(!0),[S,j]=(0,n.useState)([]),[M,z]=(0,n.useState)({total:0,sent:0,accepted:0}),[I,B]=(0,n.useState)({degree1:[],degree2:[],skips:[]}),[F,_]=(0,n.useState)(null);if((0,n.useEffect)(()=>{!u.IS_DEMO&&e&&t();async function t(){fetch("/api/settings").then(e=>e.json().then(t=>e.ok&&t.settings?t:Promise.reject(Error(t.error)))).then(e=>_(e.settings.sectorFocus||{sectors:[],strength:"lean"})).catch(()=>_({failed:!0}));let t=await (0,i.loadNetwork)(e),n=t.degree1,r=t.degree2,o={S:0,A:0,B:0,C:0,D:0};n.forEach(e=>{o[e.tier]=(o[e.tier]||0)+1});let s={S:0,A:0,B:0,C:0,D:0};r.forEach(e=>{s[e.tier]=(s[e.tier]||0)+1});let a=[...new Set(r.map(e=>e.source_connection_id).filter(Boolean))].length,l=n.filter(e=>e.is_catalyst).length,d={};n.forEach(e=>{e.company&&(d[e.company]=(d[e.company]||0)+1)});let c=Object.entries(d).sort((e,t)=>t[1]-e[1]).slice(0,10),u=(0,y.networkPower)(n,r),g=(0,y.levelOf)(u),f=g*g*10,h=(u-f)/((g+1)*(g+1)*10-f)*100;b({d1Count:n.length,d2Count:r.length,tiers:o,d2Tiers:s,clusters:a,catalysts:l,networkPower:u,level:g,xpProgress:h,topCompanies:c,unlockedPaths:0}),fetch("/api/scraper").then(e=>e.json()).then(e=>B({degree1:n,degree2:r,skips:e.skips||[]})).catch(()=>B({degree1:n,degree2:r,skips:[]})),fetch(`/api/notifications?userId=${e}`).then(e=>e.json()).then(e=>j(e.notifications||[])).catch(()=>{}),fetch("/api/queue").then(e=>e.json()).then(e=>{let t=e.items||[];z({total:t.length,sent:t.filter(e=>"sent"===e.status).length,accepted:t.filter(e=>"accepted"===e.status).length})}).catch(()=>{}),x(!1)}},[e]),u.IS_DEMO)return(0,t.jsxs)("div",{style:{minHeight:"100vh",background:"var(--sd-page)",color:"rgba(var(--sd-ink, 255, 255, 255), 0.7)",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:12,textAlign:"center",padding:24,fontFamily:"var(--sd-font)"},children:[(0,t.jsx)("h2",{style:{margin:0,fontSize:20,fontWeight:700,color:"var(--sd-fg-1, #fff)"},children:"Not part of the demo"}),(0,t.jsx)("p",{style:{margin:0,fontSize:13},children:"The public demo includes the Network Circle and Degrees views only."}),(0,t.jsx)(p.default,{href:"/",style:{fontSize:12,color:"rgba(var(--sd-ink, 255, 255, 255), 0.5)",textDecoration:"none"},children:"← Back to the network"})]});if(v)return(0,t.jsx)("div",{style:{minHeight:"100vh",display:"flex",alignItems:"center",justifyContent:"center",background:"var(--sd-page)",color:"var(--sd-fg-1, #fff)"},children:"Loading profile..."});let R=m.TIER_COLORS,T=[{label:"First S-Tier",done:g.tiers.S>0,icon:"👑"},{label:"100 Connections",done:g.d1Count>=100,icon:"🔗"},{label:"500 Connections",done:g.d1Count>=500,icon:"🌐"},{label:"First Cluster",done:g.clusters>0,icon:"🔭"},{label:"10 Clusters",done:g.clusters>=10,icon:"🏰"},{label:"50 S-Tier",done:g.tiers.S>=50,icon:"💎"},{label:"Catalyst Found",done:g.catalysts>0,icon:"⚡"},{label:"Level 25",done:g.level>=25,icon:"🎯"},{label:"Level 50",done:g.level>=50,icon:"🚀"},{label:"D2 S-Tier > 50",done:g.d2Tiers.S>=50,icon:"🌟"}];return(0,t.jsxs)("div",{style:{height:"100vh",background:"var(--sd-page)",color:"var(--sd-fg-1, #fff)",fontFamily:"var(--sd-font)",display:"flex",flexDirection:"column",overflow:"hidden"},children:[(0,t.jsxs)("header",{style:{padding:"16px 24px",borderBottom:"1px solid rgba(var(--sd-ink, 255, 255, 255), 0.1)",display:"flex",alignItems:"center",gap:16},children:[(0,t.jsxs)(p.default,{href:"/",style:{display:"flex",alignItems:"center",gap:6,color:"var(--sd-fg-3, #888)",textDecoration:"none",fontSize:13,fontWeight:600,padding:"6px 14px",borderRadius:6,background:"rgba(var(--sd-ink, 255, 255, 255), 0.06)",border:"1px solid rgba(var(--sd-ink, 255, 255, 255), 0.1)"},children:[(0,t.jsx)("span",{style:{fontSize:16},children:"←"})," Back to Map"]}),(0,t.jsx)("h1",{style:{fontSize:22,fontWeight:700,margin:0,background:"linear-gradient(135deg, #FFD700, #9B59B6, #3498DB)",WebkitBackgroundClip:"text",WebkitTextFillColor:"transparent"},children:"Profile"}),(0,t.jsx)("div",{role:"tablist","aria-label":"Profile or Insights",style:{display:"flex",gap:3,marginLeft:8,padding:3,borderRadius:9,background:"rgba(var(--sd-ink, 255, 255, 255), 0.06)"},children:[["profile","Profile"],["insights","Insights"]].map(([e,n])=>(0,t.jsxs)("button",{type:"button",role:"tab","aria-selected":l===e,onClick:()=>a.replace("insights"===e?"/profile?view=insights":"/profile",{scroll:!1}),style:{padding:"6px 14px",borderRadius:7,border:"none",cursor:"pointer",fontSize:13,fontWeight:700,background:l===e?"linear-gradient(135deg, #FFD700, #FF6B35)":"transparent",color:l===e?"#000":"var(--sd-fg-3, #aab)"},children:["insights"===e?"✦ ":"",n]},e))})]}),(0,t.jsx)("div",{style:{flex:1,overflow:"auto",padding:"30px 20px"},children:"insights"===l?(0,t.jsxs)("div",{style:{maxWidth:820,margin:"0 auto"},children:[(0,t.jsx)("div",{style:{fontSize:13,color:"var(--sd-fg-3, #8a8fa8)",lineHeight:1.6},children:"How your network holds together, from the circles you’ve scanned. Only your own numbers, never a comparison with anyone else’s."}),(0,t.jsx)(k,{})]}):(0,t.jsxs)("div",{style:{maxWidth:700,margin:"0 auto"},children:[(0,t.jsxs)("div",{style:{background:"rgba(var(--sd-ink, 255, 255, 255), 0.05)",borderRadius:16,padding:32,marginBottom:24,border:"1px solid rgba(255,215,0,0.2)",textAlign:"center"},children:[(0,t.jsx)("div",{style:{width:100,height:100,borderRadius:"50%",margin:"0 auto 16px",background:"linear-gradient(135deg, #FFD700, #FF6B35)",display:"flex",alignItems:"center",justifyContent:"center",fontSize:36,fontWeight:800,color:"#000",boxShadow:"0 0 30px rgba(255,215,0,0.3)"},children:g.level}),(0,t.jsx)("div",{style:{fontSize:24,fontWeight:700,marginBottom:4},children:c.name}),(0,t.jsx)("div",{style:{fontSize:14,color:"var(--sd-fg-3, #888)",marginBottom:4},children:c.headline}),(0,t.jsx)("div",{style:{display:"inline-block",padding:"4px 16px",borderRadius:20,background:"rgba(255,215,0,0.15)",border:"1px solid rgba(255,215,0,0.3)",color:"var(--sd-gold, #FFD700)",fontSize:13,fontWeight:700,marginBottom:16},children:function(e){let t="Observer";for(let[n,r]of Object.entries(w))e>=parseInt(n)&&(t=r);return t}(g.level)}),(0,t.jsxs)("div",{style:{maxWidth:300,margin:"0 auto"},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",fontSize:10,color:"var(--sd-fg-4, #666)",marginBottom:4},children:[(0,t.jsxs)("span",{children:["Level ",g.level]}),(0,t.jsxs)("span",{children:["Level ",g.level+1]})]}),(0,t.jsx)("div",{style:{height:8,background:"rgba(var(--sd-ink, 255, 255, 255), 0.1)",borderRadius:4},children:(0,t.jsx)("div",{style:{height:"100%",width:`${Math.min(g.xpProgress,100)}%`,background:"linear-gradient(90deg, #FFD700, #FF6B35)",borderRadius:4,transition:"width 1s ease"}})}),(0,t.jsxs)("div",{style:{fontSize:10,color:"var(--sd-fg-3, #888)",marginTop:4},children:["Network Power: ",g.networkPower.toLocaleString()]})]})]}),(0,t.jsx)(d,{degree1:I.degree1,degree2:I.degree2,skips:I.skips}),(0,t.jsxs)("div",{style:{background:"rgba(255,107,53,0.06)",borderRadius:12,padding:20,marginBottom:24,border:"1px solid rgba(255,107,53,0.2)"},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:12},children:[(0,t.jsx)("h3",{style:{fontSize:14,fontWeight:700,margin:0,color:"var(--sd-orange, #FF6B35)"},children:"Queue Progress"}),(0,t.jsx)(p.default,{href:"/queue",style:{fontSize:11,color:"var(--sd-orange, #FF6B35)",textDecoration:"none",fontWeight:600},children:"View Queue →"})]}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:12},children:[(0,t.jsxs)("div",{style:{textAlign:"center"},children:[(0,t.jsx)("div",{style:{fontSize:22,fontWeight:700,color:"#FFA500"},children:M.total}),(0,t.jsx)("div",{style:{fontSize:10,color:"var(--sd-fg-3, #888)"},children:"In Queue"})]}),(0,t.jsxs)("div",{style:{textAlign:"center"},children:[(0,t.jsx)("div",{style:{fontSize:22,fontWeight:700,color:"var(--sd-blue, #3498DB)"},children:M.sent}),(0,t.jsx)("div",{style:{fontSize:10,color:"var(--sd-fg-3, #888)"},children:"Sent"})]}),(0,t.jsxs)("div",{style:{textAlign:"center"},children:[(0,t.jsx)("div",{style:{fontSize:22,fontWeight:700,color:"var(--sd-green, #00ff88)"},children:M.accepted}),(0,t.jsx)("div",{style:{fontSize:10,color:"var(--sd-fg-3, #888)"},children:"Accepted"})]})]})]}),S.length>0&&(0,t.jsxs)("div",{style:{background:"rgba(var(--sd-ink, 255, 255, 255), 0.04)",borderRadius:12,padding:20,marginBottom:24,border:"1px solid rgba(var(--sd-ink, 255, 255, 255), 0.08)"},children:[(0,t.jsxs)("h3",{style:{fontSize:14,fontWeight:700,marginTop:0,marginBottom:12},children:["Recent Activity (",S.filter(e=>!e.seen).length," new)"]}),(0,t.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:6,maxHeight:200,overflowY:"auto"},children:S.slice(0,10).map(e=>(0,t.jsxs)("div",{style:{display:"flex",gap:8,alignItems:"center",padding:"6px 8px",borderRadius:6,background:e.seen?"transparent":"rgba(255,215,0,0.05)",borderLeft:e.seen?"none":"2px solid #FFD700"},children:[(0,t.jsx)("span",{style:{fontSize:16},children:e.icon||"📌"}),(0,t.jsxs)("div",{style:{flex:1,minWidth:0},children:[(0,t.jsx)("div",{style:{fontSize:12,fontWeight:600,color:e.seen?"var(--sd-fg-3, #888)":"var(--sd-fg-1, #fff)"},children:e.title}),e.message&&(0,t.jsx)("div",{style:{fontSize:10,color:"var(--sd-fg-4, #666)"},children:e.message})]}),(0,t.jsx)("span",{style:{fontSize:9,color:"var(--sd-fg-5, #555)",flexShrink:0},children:new Date(e.created_at).toLocaleDateString()})]},e.id))})]}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:12,marginBottom:24},children:[(0,t.jsx)(C,{label:"Connections",value:g.d1Count}),(0,t.jsx)(C,{label:"Degree-2 Reach",value:g.d2Count}),(0,t.jsx)(C,{label:"Clusters",value:g.clusters}),(0,t.jsx)(C,{label:"S-Tier",value:g.tiers.S,color:"#FFD700"}),(0,t.jsx)(C,{label:"A-Tier",value:g.tiers.A,color:"#9B59B6"}),(0,t.jsx)(C,{label:"Catalysts",value:g.catalysts,color:"#00ff88"})]}),(0,t.jsxs)("div",{style:{background:"rgba(var(--sd-ink, 255, 255, 255), 0.04)",borderRadius:12,padding:20,marginBottom:24,border:"1px solid rgba(var(--sd-ink, 255, 255, 255), 0.08)"},children:[(0,t.jsx)("h3",{style:{fontSize:14,fontWeight:700,marginTop:0,marginBottom:12},children:"Tier Distribution"}),["S","A","B","C","D"].map(e=>{let n=g.tiers[e]||0,r=g.d1Count>0?n/g.d1Count*100:0;return(0,t.jsxs)("div",{style:{marginBottom:8},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",fontSize:11,marginBottom:2},children:[(0,t.jsxs)("span",{style:{color:R[e],fontWeight:600},children:[e,"-Tier"]}),(0,t.jsxs)("span",{style:{color:"var(--sd-fg-3, #888)"},children:[n," (",r.toFixed(1),"%)"]})]}),(0,t.jsx)("div",{style:{height:6,background:"rgba(var(--sd-ink, 255, 255, 255), 0.08)",borderRadius:3},children:(0,t.jsx)("div",{style:{height:"100%",width:`${r}%`,background:R[e],borderRadius:3}})})]},e)})]}),(0,t.jsxs)("div",{style:{background:"rgba(var(--sd-ink, 255, 255, 255), 0.04)",borderRadius:12,padding:20,marginBottom:24,border:"1px solid rgba(var(--sd-ink, 255, 255, 255), 0.08)"},children:[(0,t.jsx)("h3",{style:{fontSize:14,fontWeight:700,marginTop:0,marginBottom:12},children:"Degree-2 Reach"}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:12},children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{style:{fontSize:24,fontWeight:700,color:"var(--sd-orange, #FF6B35)"},children:g.d2Count}),(0,t.jsx)("div",{style:{fontSize:11,color:"var(--sd-fg-3, #888)"},children:"People reachable via bridges"})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{style:{fontSize:24,fontWeight:700,color:"var(--sd-gold, #FFD700)"},children:g.d2Tiers.S}),(0,t.jsx)("div",{style:{fontSize:11,color:"var(--sd-fg-3, #888)"},children:"S-Tier degree-2"})]})]})]}),(0,t.jsxs)("div",{style:{background:"rgba(var(--sd-ink, 255, 255, 255), 0.04)",borderRadius:12,padding:20,marginBottom:24,border:"1px solid rgba(var(--sd-ink, 255, 255, 255), 0.08)"},children:[(0,t.jsxs)("h3",{style:{fontSize:14,fontWeight:700,marginTop:0,marginBottom:12},children:["Milestones (",T.filter(e=>e.done).length,"/",T.length,")"]}),(0,t.jsx)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:T.map((e,n)=>(0,t.jsxs)("div",{style:{padding:"8px 10px",borderRadius:8,fontSize:12,background:e.done?"rgba(255,215,0,0.08)":"rgba(var(--sd-ink, 255, 255, 255), 0.02)",border:`1px solid ${e.done?"rgba(255,215,0,0.2)":"rgba(var(--sd-ink, 255, 255, 255), 0.05)"}`,color:e.done?"var(--sd-gold, #FFD700)":"var(--sd-fg-5, #555)",display:"flex",alignItems:"center",gap:6},children:[(0,t.jsx)("span",{style:{fontSize:16},children:e.done?e.icon:"🔒"}),(0,t.jsx)("span",{style:{fontWeight:e.done?600:400},children:e.label})]},n))})]}),(0,t.jsxs)("div",{style:{background:"rgba(var(--sd-ink, 255, 255, 255), 0.04)",borderRadius:12,padding:20,marginBottom:24,border:"1px solid rgba(var(--sd-ink, 255, 255, 255), 0.08)"},children:[(0,t.jsx)("h3",{style:{fontSize:14,fontWeight:700,marginTop:0,marginBottom:12},children:"Top Companies in Your Network"}),g.topCompanies.map(([e,n],r)=>(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",padding:"4px 0",borderBottom:r<g.topCompanies.length-1?"1px solid rgba(var(--sd-ink, 255, 255, 255), 0.04)":"none",fontSize:12},children:[(0,t.jsx)("span",{children:e}),(0,t.jsx)("span",{style:{color:"var(--sd-fg-3, #888)"},children:n})]},r))]}),(0,t.jsxs)("div",{style:{background:"rgba(var(--sd-ink, 255, 255, 255), 0.04)",borderRadius:12,padding:20,border:"1px solid rgba(var(--sd-ink, 255, 255, 255), 0.08)"},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:12},children:[(0,t.jsx)("h3",{style:{fontSize:14,fontWeight:700,margin:0},children:"Your Sectors"}),(0,t.jsxs)(p.default,{href:"/settings#sector",style:{fontSize:11,color:"var(--sd-blue, #3498DB)",textDecoration:"none",fontWeight:600},children:[F?.sectors?.length?"Change":F&&!F.failed?"Pick in Settings":"Settings"," →"]})]}),F?F.failed?(0,t.jsx)("div",{style:{fontSize:12,color:"var(--sd-red, #ff7676)"},children:"Couldn’t load your sectors. Reload this page, or open Settings to see them."}):F.sectors?.length?(0,t.jsxs)("div",{style:{display:"flex",flexWrap:"wrap",gap:6,alignItems:"center"},children:[F.sectors.map(e=>{let n=(0,h.sectorByKey)(e);return(0,t.jsx)("span",{style:{padding:"4px 12px",borderRadius:20,fontSize:11,fontWeight:600,background:`${n.color}26`,border:`1px solid ${n.color}66`,color:n.color},children:n.label},e)}),(0,t.jsxs)("span",{style:{fontSize:11,color:"var(--sd-fg-3, #888)"},children:["strong"===F.strength?"Strong":"Lean",": companies here count for more in your scores."]})]}):(0,t.jsx)("div",{style:{fontSize:12,color:"var(--sd-fg-3, #888)"},children:"None picked. Pick up to three in Settings and companies in them count for more in your scores."}):(0,t.jsx)("div",{style:{fontSize:12,color:"var(--sd-fg-3, #888)"},children:"Loading…"})]})]})})]})}function C({label:e,value:n,color:r}){return(0,t.jsxs)("div",{style:{background:"rgba(var(--sd-ink, 255, 255, 255), 0.04)",borderRadius:10,padding:"14px 12px",border:"1px solid rgba(var(--sd-ink, 255, 255, 255), 0.08)",textAlign:"center"},children:[(0,t.jsx)("div",{style:{fontSize:22,fontWeight:700,color:r||"#fff"},children:n}),(0,t.jsx)("div",{style:{fontSize:10,color:"var(--sd-fg-3, #888)",marginTop:2},children:e})]})}e.s(["default",0,function(){return(0,t.jsx)(n.Suspense,{fallback:null,children:(0,t.jsx)(g.default,{children:(0,t.jsx)(j,{})})})}],99201)},64666,e=>{"use strict";var t=e.i(7214);function n(e=[],r=[]){let i=new Set((r||[]).map(t.keyFor)),o=new Map;for(let n of e||[]){let e=n?.source_connection_id;if(null==e)continue;let r=(0,t.keyFor)(n);if(i.has(r))continue;let s=o.get(r);s||o.set(r,s=new Set),s.add(e)}let s=new Map;for(let e of o.values())for(let t of e){let n=s.get(t)||{reach:0,only:0,total:0};n.reach+=1/e.size,n.total+=1,1===e.size&&(n.only+=1),s.set(t,n)}return s}e.s(["bridgeOverlap",0,function(e=[],r=[]){let i=n(e,r),o=new Set((r||[]).map(t.keyFor)),s=new Map;for(let n of e||[]){let e=n?.source_connection_id;if(null==e)continue;let r=(0,t.keyFor)(n);if(o.has(r))continue;let i=s.get(r);i||s.set(r,i=new Set),i.add(e)}let a=new Map;for(let e of s.values()){if(e.size<2)continue;let t=[...e];for(let e=0;e<t.length;e++)for(let n=e+1;n<t.length;n++){let r=t[e]<t[n]?`${t[e]}|${t[n]}`:`${t[n]}|${t[e]}`;a.set(r,(a.get(r)||0)+1)}}let l=new Map;for(let[e,t]of a){let[n,r]=e.split("|"),o=i.get(n).total+i.get(r).total-t,s=o?t/o:0;for(let[e,i]of[[n,r],[r,n]]){let n=l.get(e);(!n||s>n.share)&&l.set(e,{with:i,share:s,shared:t})}}return l},"exclusiveReach",0,n,"redundancy",0,function(e=[],t=[]){let r=n(e,t),i=0,o=0;for(let e of r.values())i+=e.reach,o+=e.only;return i?1-o/i:0}])},89154,e=>{"use strict";var t=e.i(90179);function n(e){let n=(0,t.readTitle)(e);return{key:n.key,label:n.label,level:n.level}}function r(e){return(0,t.currentCompany)(e)}let i=[{key:"defense",label:"Government, Defense & Aerospace",color:"#7f8c8d",words:/\b(government|federal|state of|county|city of|defen[cs]e|army|navy|air force|marine corps|military|dod|nasa|aerospace|lockheed|northrop|boeing|raytheon|l3harris|leidos|blue origin|spacex|public sector)\b/i},{key:"finance",label:"Finance & Investing",color:"#2ecc71",words:/\b(bank|banking|capital|ventures?|vc|investments?|investor|fund|private equity|growth equity|asset management|wealth|trading|trader|hedge|crypto|blockchain|web3|defi|fintech|stripe|coinbase|blackrock|robinhood|goldman|morgan stanley|jpmorgan|chase|bny|mellon|wells fargo|citi|citigroup|capital one|fidelity|vanguard|schwab|visa|mastercard|amex|american express|paypal|insurance|accounting|cpa|financial)\b/i},{key:"health",label:"Healthcare & Biotech",color:"#e74c3c",words:/\b(health|healthcare|medical|medicine|hospital|clinic|pharma|pharmaceutical|biotech|nurse|nursing|physician|doctor|dental|therapy|therapist|wellness)\b/i},{key:"education",label:"Education",color:"#f1c40f",words:/\b(university|college|school|education|student|professor|teacher|academy|phd|faculty|alumni)\b/i},{key:"media",label:"Marketing & Media",color:"#e67e22",words:/\b(marketing|brand|branding|advertising|agency|media|content|social media|creative|creator|influencer|pr|public relations|communications|tiktok|pinterest|youtube|growth marketing)\b/i},{key:"entertainment",label:"Entertainment & Gaming",color:"#9b59b6",words:/\b(entertainment|film|movie|music|records|gaming|games?|esports|studio|studios|netflix|disney|spotify|hollywood|theater|theatre|sports)\b/i},{key:"tech",label:"Tech, Software & AI",color:"#3498db",words:/\b(software|saas|engineer|engineering|developer|tech|technology|technologies|ai|artificial intelligence|machine learning|ml|data|cloud|cyber|security|devops|product manager|google|microsoft|apple|meta|amazon|nvidia|openai|anthropic|palantir|salesforce|oracle|ibm|intel|app|apps|startup|platform|labs?)\b/i},{key:"consulting",label:"Consulting, Legal & Services",color:"#1abc9c",words:/\b(consulting|consultant|consultancy|deloitte|accenture|mckinsey|kpmg|pwc|ey|bain|bcg|legal|law|lawyer|attorney|paralegal|recruiting|recruiter|staffing|talent)\b/i},{key:"realestate",label:"Real Estate & Construction",color:"#d35400",words:/\b(real estate|realtor|realty|property|properties|construction|architecture|architect|mortgage|homes|housing|builders?)\b/i},{key:"consumer",label:"Retail, Consumer & Hospitality",color:"#ff79c6",words:/\b(retail|e-?commerce|shopify|consumer|cpg|fashion|apparel|beauty|cosmetics|food|beverage|restaurant|hospitality|hotel|travel|tourism|coca-cola|nike|store|shop)\b/i},{key:"industry",label:"Manufacturing, Energy & Logistics",color:"#95a5a6",words:/\b(manufacturing|energy|oil|gas|solar|utilities|automotive|tesla|siemens|ge|general electric|honeywell|3m|logistics|supply chain|shipping|freight|fedex|ups|industrial|mining|chemicals?)\b/i},{key:"nonprofit",label:"Nonprofit & Community",color:"#bdc3c7",words:/\b(nonprofit|non-profit|foundation|charity|ngo|church|ministry|volunteer)\b/i}],o={key:"unknown",label:"Unclear",color:"#555c66"},s=Object.fromEntries([...i,o].map(e=>[e.key,e])),a=e=>s[e]||o;function l(e,t){for(let n of[e,t]){if(!n)continue;let e=i.find(e=>e.words.test(n));if(e)return e}return o}let d=(e,t)=>l(e,t).key,c=e=>n(e).level>=4;e.s(["INDUSTRIES",0,i,"UNKNOWN_INDUSTRY",0,o,"buildCompanyIndex",0,function(e=[]){let n=new Map,r=e=>(n.has(e)||n.set(e,(0,t.rolesWithCompanies)(e)),n.get(e)),{industries:i}=(0,t.networkCompanies)(e,{industryOf:d,rolesOf:r}),o=new Map;for(let t of e){let e=t.profile_url||`id:${t.id}`,n=o.get(e);(!n||(t.degree||9)<(n.degree||9))&&o.set(e,t)}let s=new Map;for(let e of o.values()){let t=r(e).find(e=>!e.former)?.company;if(!t)continue;let n=s.get(t);n||(n={name:t,people:[],d1:0,d2:0,d3:0,S:0,A:0,senior:0},s.set(t,n)),n.people.push(e),1===e.degree?n.d1++:2===e.degree?n.d2++:n.d3++,"S"===e.tier&&n.S++,"A"===e.tier&&n.A++,c(e.headline)&&n.senior++}for(let e of s.values())e.industry=a(i.get(e.name));return s},"companyLinks",0,function(e=[],t=[]){let n=new Map;for(let t of e){let e=r(t);e&&n.set(t.id,e)}let i=new Map;for(let e of t){let t=n.get(e.source_connection_id),o=r(e);if(!t||!o||t===o)continue;let[s,a]=t<o?[t,o]:[o,t],l=`${s}\u0000${a}`,d=i.get(l);d||(d={a:s,b:a,weight:0,via:new Set},i.set(l,d)),d.weight++,d.via.add(e.source_connection_id)}return[...i.values()]},"companyOf",0,r,"getSeniority",0,n,"industryByKey",0,a,"industryOf",0,l,"isSenior",0,c,"waysInto",0,function(e,t=[],n=[]){let i=t.filter(t=>r(t)===e),o=new Map;for(let t of n)r(t)===e&&o.set(t.source_connection_id,(o.get(t.source_connection_id)||0)+1);let s=new Map(t.map(e=>[e.id,e]));return{direct:i,bridges:[...o.entries()].map(([e,t])=>({bridge:s.get(e),n:t})).filter(e=>e.bridge).sort((e,t)=>t.n-e.n||(Number(t.bridge.power_score)||0)-(Number(e.bridge.power_score)||0))}}])},19821,98658,e=>{"use strict";async function t(e){let t=e?`/api/network?userId=${encodeURIComponent(e)}`:"/api/network",n=await fetch(t);if(!n.ok)throw Error(`Failed to load network (${n.status})`);let r=await n.json();return{degree1:r.degree1||[],degree2:r.degree2||[],degree3:r.degree3||[],ties:Number(r.ties)||0}}function n(e=[],t=[]){let r={S:0,A:0,B:0,C:0,D:0};for(let t of e)r[t.tier]=(r[t.tier]||0)+1;let i=0;for(let e of t)"S"===e.tier&&(i+=1);let o=new Set(t.map(e=>e.source_connection_id).filter(Boolean)).size,s=e.filter(e=>e.is_catalyst).length;return 100*r.S+40*r.A+15*r.B+5*r.C+ +r.D+200*o+150*s+50*i+e.length}e.s(["loadNetwork",0,t],19821);let r=e=>Math.floor(Math.sqrt(Math.max(0,e)/10)),i="six-degrees-level",o={},s=new Set;function a(e="own"){if(!(e in o))try{let t=sessionStorage.getItem(`${i}:${e}`),n=null==t?NaN:Number(t);o[e]=Number.isFinite(n)?n:null}catch{o[e]=null}return o[e]}e.s(["levelNow",0,a,"levelOf",0,r,"networkLevel",0,(e,t)=>r(n(e,t)),"networkPower",0,n,"rememberLevel",0,function(e,t="own"){if(a(t)!==e){o[t]=e;try{sessionStorage.setItem(`${i}:${t}`,String(e))}catch{}s.forEach(e=>e())}},"watchLevel",0,function(e){return s.add(e),()=>s.delete(e)}],98658)},48235,e=>{"use strict";var t=e.i(51798),n=e.i(7214);function r(e,t){return e?t.scanned.has(e.id)||e.profile_url&&t.read?.has((0,n.keyFor)(e))?"scanned":e.profile_url&&t.hidden.has((0,n.keyFor)(e))?"hidden":"todo":"todo"}function i(e,t){if(!e||1!==e.degree||null==e.unlocked_from_bridge_id)return null;let n=r(e,t);return"todo"===n?"ready":n}e.s(["circleScanCost",0,function(e=100,n="fast"){let r=Math.max(1,Math.min(100,Math.round(e)||100)),i=n&&"fast"!==n?Math.max(5,Math.round((0,t.paceSeconds)(n,r)/60)):r>=100?55:Math.max(5,Math.round(.55*r));return{profileViews:1,searches:r,minutes:i}},"circleState",0,r,"reachIndex",0,function(e=[],t=[],r={}){let i=new Set;for(let e of t||[])e?.source_connection_id!=null&&i.add(e.source_connection_id);let o=new Set;for(let e of r?.skips||[])e?.profileUrl&&o.add((0,n.keyFor)({profile_url:e.profileUrl}));let s=new Set;for(let e of r?.read||[])e&&s.add((0,n.keyFor)({profile_url:e}));let a=new Map;for(let[e,t]of Object.entries(r?.lists||{}))e&&t&&a.set((0,n.keyFor)({profile_url:e}),t);let l=new Map;for(let t of e||[]){let e=t?.unlocked_from_bridge_id;if(null==e||1!==t.degree)continue;let n=l.get(e);n||l.set(e,n=[]),n.push(t)}return{scanned:i,read:s,hidden:o,reachedFrom:l,lists:a}},"reachState",0,i,"readyByCircle",0,function(e){let t=new Map;for(let[n,r]of e.reachedFrom){let o=r.filter(t=>"ready"===i(t,e)).length;o&&t.set(n,o)}return t},"readyToScan",0,function(e,t){return(e||[]).filter(e=>"ready"===i(e,t)).sort(n.compareBridges)},"scanBars",0,function(e,t){let i=r(e,t),o=e?.profile_url?t.lists?.get((0,n.keyFor)(e)):null;return"hidden"===i?null:o?o.more?o.total?Math.max(1,Math.min(4,Math.round(5*Math.min(1,10*o.pages/o.total)))):2:5:"scanned"===i?2:null}])},51798,e=>{"use strict";let t={fast:{label:"Fast",pagePause:20,chunkCooldown:60,profileGap:60},medium:{label:"Medium",pagePause:45,chunkCooldown:180,profileGap:90},slow:{label:"Slow",pagePause:90,chunkCooldown:300,profileGap:120}},n=e=>t[e]||t.fast;function r(e,t){let r=n(e),i=Math.max(0,Math.floor(Number(t)||0));return i*(6+r.pagePause)+Math.floor(i/10)*r.chunkCooldown}e.s(["PACES",0,t,"PACE_NAMES",0,["slow","medium","fast"],"durationText",0,function(e){if(!(e>=60))return"under a minute";let t=Math.round(e/60);if(t<60)return`about ${t} min`;let n=Math.floor(t/60),r=t%60;return`about ${n} h${r?` ${r} min`:""}`},"firstCircleSeconds",0,function(e){return r(e,10)},"paceOf",0,n,"paceSeconds",0,r,"searchesPerHour",0,function(e){let t=n(e);return Math.round(3600/(6+t.pagePause+t.chunkCooldown/10))}])},69083,e=>{"use strict";var t=e.i(89154);let n=new Map(t.INDUSTRIES.map(e=>[e.key,e.color])),r=new Map([...t.INDUSTRIES.map(e=>[e.key,Object.freeze({key:e.key,label:e.label,color:e.color,group:e.key,kind:"industry"})]),...Object.entries({software:["Software & SaaS","tech","function"],"ai-data":["AI & Data","tech","function"],cybersecurity:["Cybersecurity","tech","function"],telecom:["Telecom","tech","industry"],fintech:["Fintech & Payments","finance","industry"],banking:["Banking & Lending","finance","industry"],"vc-pe":["Venture Capital & Private Equity","finance","industry"],wealth:["Wealth & Asset Management","finance","industry"],insurance:["Insurance","finance","industry"],accounting:["Accounting & Tax","finance","function"],crypto:["Crypto & Web3","finance","industry"],hospitals:["Hospitals & Clinics","health","industry"],dental:["Dental","health","industry"],"pharma-biotech":["Pharma & Biotech","health","industry"],"medical-devices":["Medical Devices","health","industry"],"mental-health":["Mental Health","health","industry"],"fitness-wellness":["Fitness & Wellness","health","industry"],veterinary:["Veterinary & Animal Care","health","industry"],k12:["K-12 Education","education","industry"],"higher-ed":["Higher Education","education","industry"],"marketing-advertising":["Marketing & Advertising","media","function"],"pr-comms":["PR & Communications","media","function"],"media-publishing":["Media & Publishing","media","industry"],"creator-economy":["Creator Economy","media","industry"],"film-tv-music":["Film, TV & Music","entertainment","industry"],"gaming-esports":["Gaming & Esports","entertainment","industry"],sports:["Sports","entertainment","industry"],"ecommerce-retail":["E-commerce & Retail","consumer","industry"],"consumer-goods":["Consumer Goods","consumer","industry"],restaurants:["Restaurants & Food Service","consumer","industry"],"hospitality-travel":["Hospitality & Travel","consumer","industry"],"beauty-personal-care":["Beauty & Personal Care","consumer","industry"],logistics:["Logistics & Supply Chain","industry","industry"],manufacturing:["Manufacturing","industry","industry"],energy:["Energy & Utilities","industry","industry"],automotive:["Automotive","industry","industry"],agriculture:["Agriculture & Farming","industry","industry"],"aerospace-defense":["Aerospace & Defense","defense","industry"],military:["Military","defense","industry"],government:["Government & Public Sector","defense","industry"],legal:["Legal","consulting","function"],"management-consulting":["Management Consulting","consulting","function"],"hr-recruiting":["HR & Recruiting","consulting","function"],"security-services":["Security Services","consulting","function"],"real-estate":["Real Estate","realestate","industry"],"construction-trades":["Construction & Trades","realestate","industry"],charities:["Nonprofits & Charities","nonprofit","industry"],"social-work":["Social Work & Human Services","nonprofit","industry"],faith:["Faith & Ministry","nonprofit","industry"]}).map(([e,[r,i,o]])=>[e,Object.freeze({key:e,label:r,color:n.get(i)||t.UNKNOWN_INDUSTRY.color,group:i,kind:o})])]);e.s(["sectorByKey",0,function(e){return r.get(e)||{key:e,label:t.UNKNOWN_INDUSTRY.label,color:t.UNKNOWN_INDUSTRY.color,group:null,kind:null}}])},7214,36774,e=>{"use strict";let t=/^[A-Za-z0-9_-]+\.(webp|jpg|jpeg|png)$/,n="/avatars/";function r(e){return"string"==typeof e&&e.startsWith(n)&&t.test(e.slice(n.length))?e:null}e.s(["localPhoto",0,r],36774);let i={S:0,A:1,B:2,C:3,D:4};function o(e){let t=parseFloat(e?.power_score);return Number.isFinite(t)?t:0}function s(e){return Math.round(10*o(e))/10}function a(e){return String(e?.profile_url||"").split(/[?#]/)[0].replace(/\/+$/,"")||`id:${e?.id}`}let l=(e,t)=>String(e??"").localeCompare(String(t??""),void 0,{numeric:!0});function d(e,t){return(i[e.tier]??9)-(i[t.tier]??9)||o(t)-o(e)||String(e.name||"").localeCompare(String(t.name||""))||l(e.id,t.id)}function c(e,t){return e.bridge&&t.bridge?d(e.bridge,t.bridge):e.bridge?-1:t.bridge?1:l(e.id,t.id)}function u(e,t){return t.score-e.score||t.waysIn-e.waysIn||c(e.routes[0]||g,t.routes[0]||g)||String(e.person.name||"").localeCompare(String(t.person.name||""))||(e.key<t.key?-1:+(e.key>t.key))}let g={id:null,bridge:null};function f(e){let t=String(e||"").trim().split(/\s+/).filter(Boolean);return t.length<2?t[0]||"":`${t[0]} ${t[t.length-1].charAt(0)}.`}function h(e,t){let n=String(e||"");return t<=1?n?"…":"":n.length>t?`${n.slice(0,t-1)}…`:n}e.s(["TIERS",0,["S","A","B","C","D"],"compareBridges",0,d,"comparePower",0,u,"convergeLayout",0,function(e,t=800,n=!1,{cards:r=!1,mutuals:i=0}={}){let o=r?46:n?40:34,s=Math.round(t*(n?.44:.36)),a=Math.round(t*(n?.8:r?.6:.62)),l=[],d=null;for(let t of e?.routes||[])t.bridge?l.push({id:t.id,bridge:t.bridge,unresolved:!1,count:1}):d?d.count++:l.push(d={id:null,bridge:null,unresolved:!0,count:1});let c=Math.max(0,Math.floor(Number(i)||0)-(e?.waysIn||0)),u=Math.min(60,c),g=r?12:11,p=r?220:n?96:120,y=Math.max(1,Math.floor(p/g)+1),m=Math.ceil(u/y),b=u?40+m*g:0,v=Math.max(0,l.length-1)*o+b,x=Math.max(n?190:r?250:220,32+v+48),S=x/2,k=S-v/2,w=Math.max(4,Math.floor((s-10-42)/6)),j=l.map((e,t)=>{let n=e.unresolved?`can't be named (${e.count})`:e.bridge.name||"";return{...e,x:s,y:k+t*o,r:6,primary:0===t&&!e.unresolved,label:n.length<=w?n:h(e.unresolved?n:f(n),w)}}),C={x:a,y:S,r:17*!r,rings:r?[]:[32,50,70].filter(e=>e<=S-4)},M=j.map(t=>({key:e?.key,bridgeId:t.id,primary:t.primary,unresolved:t.unresolved,tier:t.bridge?.tier??null,x1:t.x,y1:t.y,x2:C.x,y2:C.y})),z={x:20,y:S,r:14},I=j.map(e=>({id:e.id,x1:z.x,y1:z.y,x2:e.x,y2:e.y})),B=e?[{key:e.key,p:e,x:C.x,y:C.y,r:C.r,rings:C.rings,big:!0,label:""}]:[],F=k+Math.max(0,l.length-1)*o+40,_=r?s-236+8:s-p,R=Array.from({length:u},(e,t)=>({x:_+t%y*g,y:F+Math.floor(t/y)*g})),T=e?.waysIn?e.waysIn/(e.waysIn+c):1;return{width:t,height:x,you:z,target:C,people:B,bridges:j,links:M,spokes:I,ghosts:R,unscanned:c,ghostLabel:u?{x:_,y:F-13}:null,drawn:T}},"keyFor",0,a,"mapCount",0,function(e,t=10){let n=Math.max(0,Math.min(100,Number(e)||0));return n<=50?t:Math.max(1,Math.round(t*(100-n)/50))},"mostMutuals",0,function(e=[],t=()=>0,n=7){return[...e].sort((e,n)=>Math.max(t(n)||0,n.waysIn)-Math.max(t(e)||0,e.waysIn)||n.waysIn-e.waysIn||u(e,n)).slice(0,n)},"routeIndex",0,function(e=[]){let t=new Map;for(let n of e||[]){let e=a(n),r=t.get(e);r||(r=new Set,t.set(e,r)),r.add(n.source_connection_id??null)}return t},"routesFor",0,function(e,t,n){return e?[...t?.get(a(e))??(null!=e.source_connection_id?new Set([e.source_connection_id]):new Set)].map(e=>({id:e,bridge:n?.get(e)??null})).sort(c):[]},"score",0,o,"score1",0,s,"separationPeople",0,function(e=[],t=[]){let n=new Map;for(let e of t||[])n.set(e.id,e);let i=new Map,o=new Map;for(let t of e||[]){let e=a(t);o.set(t.id,e);let n=i.get(e);n?function(e,t){let n=s(e)-s(t);if(n)return n>0;let i=!!r(e.profile_image_url);return!!r(t.profile_image_url)!==i?i:0>l(e.id,t.id)}(t,n.person)&&(n.person=t):(n={key:e,person:t,rowIds:[],routeIds:new Set},i.set(e,n)),n.rowIds.push(t.id),n.routeIds.add(t.source_connection_id??null)}let d={people:i.size,byTier:{S:0,A:0,B:0,C:0,D:0},multi:0,bridges:0,unresolvedIds:0,peopleOnlyUnresolved:0,onlyUnresolvedVia:0},g=new Set,f=new Set,h=new Set,p=[];for(let e of i.values()){let t=[...e.routeIds].map(e=>({id:e,bridge:n.get(e)??null}));t.sort(c);let r=t.filter(e=>e.bridge);for(let e of t)(e.bridge?g:f).add(e.id);if(!r.length)for(let e of(d.peopleOnlyUnresolved++,t))h.add(e.id);let{person:i}=e,o=i.tier;void 0!==d.byTier[o]&&d.byTier[o]++,t.length>1&&d.multi++,p.push({key:e.key,person:i,score:s(i),tier:o,routes:t,waysIn:t.length,rowIds:e.rowIds,haystack:[i.name,i.headline,i.company,i.role,...r.map(e=>e.bridge.name)].filter(Boolean).join("\n").toLowerCase(),rank:0,tied:!1})}return d.bridges=g.size,d.unresolvedIds=f.size,d.onlyUnresolvedVia=h.size,p.sort(u),function(e){for(let t=0;t<e.length;t++){let n=e[t],r=e[t-1],i=r&&r.score===n.score&&r.waysIn===n.waysIn;n.rank=i?r.rank:t+1,i&&(n.tied=!0,r.tied=!0)}}(p),{people:p,rowToKey:o,summary:d}},"shortName",0,f,"summitLayout",0,function(e=[],t=800,n=!1,{cards:r=!1}={}){let i=r?45:n?36:26,o=Math.round(.42*t),s=Math.round(.58*t),a=e.map((e,n)=>{var o;return{key:e.key,p:e,x:s,y:16+n*i,r:r?0:(o=e.waysIn)>=4?8.5:3===o?7:2===o?5.5:4,label:h(`#${e.rank}${e.tied?"=":""} ${e.person.name||""}`,Math.floor((t-s-60)/6.2))}}),l=new Map,c="\0unresolved";for(let e of a)for(let t of e.p.routes){let n=t.bridge?t.id:c,r=l.get(n);r||(r={id:t.bridge?t.id:null,bridge:t.bridge,unresolved:!t.bridge,ys:[],count:0},l.set(n,r)),r.count++,r.ys.push(e.y)}let u=[...l.values()].map(e=>({...e,bary:e.ys.reduce((e,t)=>e+t,0)/e.ys.length}));u.sort((e,t)=>e.bary-t.bary||e.unresolved-t.unresolved||(e.bridge&&t.bridge?d(e.bridge,t.bridge):0));let g=a.length?a[a.length-1].y:16,p=function(e=[],t=18,n=0){let r=[];e.forEach((e,n)=>{for(r.push({sum:e-n*t,count:1});r.length>1&&r[r.length-2].sum/r[r.length-2].count>r[r.length-1].sum/r[r.length-1].count;){let e=r.pop();r[r.length-1].sum+=e.sum,r[r.length-1].count+=e.count}});let i=r.flatMap(e=>Array(e.count).fill(e.sum/e.count)).map((e,n)=>e+n*t),o=i.length&&i[0]<n?n-i[0]:0;return i.map(e=>e+o)}(u.map(e=>e.bary),r?32:18,16),y=Math.max(4,Math.floor((o-10-42)/6));u.forEach((e,t)=>{if(e.x=o,e.y=p[t],e.r=5,e.unresolved)e.label=h(`can't be named (${e.count})`,y);else{let t=e.bridge.name||"";e.label=t.length<=y?t:h(f(t),y)}delete e.ys});let m=new Map(u.map(e=>[e.unresolved?c:e.id,e]));for(let e of u)e.onlyFor=0,e.bestFor=0;for(let e of a){let t=e.p.routes[0],n=t?m.get(t.bridge?t.id:c):null;n&&n.bestFor++,1===e.p.waysIn&&n&&n.onlyFor++}let b=[];for(let e of a){let t=new Set;e.p.routes.forEach((n,r)=>{let i=n.bridge?n.id:c;if(t.has(i))return;t.add(i);let o=m.get(i);b.push({key:e.key,bridgeId:o.id,primary:0===r&&!o.unresolved,unresolved:o.unresolved,tier:o.bridge?.tier??null,x1:o.x,y1:o.y,x2:e.x,y2:e.y})})}let v=Math.max(g,u.length?u[u.length-1].y:0),x=a.length?Math.ceil(v+16):0,S={x:20,y:a.length?(16+Math.max(g,v))/2:16,r:14},k=u.map(e=>({id:e.id,x1:S.x,y1:S.y,x2:e.x,y2:e.y}));return{width:t,height:x,you:S,people:a,bridges:u,links:b,spokes:k}}],7214)},828,e=>{"use strict";var t=e.i(54322);e.s(["TIER_COLORS_CLASSIC",()=>t.TIER_COLORS])},46949,e=>{"use strict";e.i(54322),e.s(["TIER_ORDER",0,["S","A","B","C","D"],"initialsFor",0,function(e){let t=String(e||"").trim().split(/\s+/).filter(Boolean);return 0===t.length?"?":(t[0].charAt(0)+(t.length>1?t[t.length-1].charAt(0):"")).toUpperCase()}])}]);
@@ -6,6 +6,149 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.7.0] - 2026-10-03
10
+
11
+ ### Added
12
+ - **Download for Mac shows how to open it the first time.** On sixdegreesapp.com, clicking Download
13
+ for Mac now shows the three steps right under the button: drag it into Applications, close
14
+ macOS's warning, and allow it once in System Settings → Privacy & Security. They used to be only
15
+ on the Download page.
16
+ - **Watch a circle fill in while it's scanned.** While the scanner reads who your connections know,
17
+ step 4 on the Scan page has a Watch it fill in link to that person's circle in Bridge Chains,
18
+ which fills in as the scanner saves every 10 pages, during a whole round too, not only a scan of
19
+ one person.
20
+ - **An "I understand" before the first scan**: the Scan page says once, plainly, that scanning runs
21
+ your own LinkedIn account automatically, that LinkedIn may restrict accounts that do this (the safe
22
+ limits of 50 searches a day and 250 a month stay on), and that nothing leaves your computer. Nothing
23
+ opens LinkedIn until you click I understand, whichever button asks, and the CSV import is one click
24
+ away instead. It's asked once and kept with your settings; anyone who has scanned before isn't asked.
25
+ The welcome screen's Scan card says the risk too, and the README and website say Six Degrees is not
26
+ affiliated with or endorsed by LinkedIn.
27
+ - **Light looks, and every look its own all the way through** (Settings → Appearance). Daylight and
28
+ Paper are light, designed for it: ink words, white cards and panels, deeper dots that read on
29
+ white. Pick any light background in the editor and the words and borders turn dark with it. Each
30
+ look now changes more than its colours: its buttons (soft, flat, square, glass, neon or bold), its
31
+ words (Obsidian's greys, a data terminal's for Analyst, brighter ones on Glass), its cards,
32
+ pickers, tooltips and notch, the sliders, and how the map draws its dots (glass droplets, flat
33
+ like Obsidian, or glowing). Both are yours to pick in the editor too.
34
+ - **Analyst is an analysis tool's look**: a bare white canvas and flat grey panels, plain outlined
35
+ dots in colour-blind-safe colours with black labels, thin grey lines, flat blue for what's picked,
36
+ no gradients, glows or shadows, and every number in even columns. Less on screen, more about the
37
+ numbers.
38
+ - **A look's dots and panels everywhere, not just on the map.** Glass droplets, glowing dots, plain
39
+ outlined dots or flat ones now follow a look into Degrees (bridges, clusters, the hover preview),
40
+ Separation, Paths' bubbles, the Scan cluster, circle previews, the header's scan dots, legends,
41
+ tier dots and avatars. Each look also has its own side panels, tab bar, notch and map tooltips:
42
+ graphite with fine borders (Obsidian), neon edges (Synthwave), a cool rim (Space), hard outlines
43
+ (High contrast), soft shadows (Daylight), ruled and warm (Paper), grey hairlines (Analyst), glass
44
+ (Glass).
45
+ - **Glass is Apple's Liquid Glass.** Panels of dark glass that keep their words readable, with a lit
46
+ rim and a bright top edge, and edges that bend what's behind them the way Apple's glass does. The
47
+ tabs sit in one glass capsule; buttons are glass capsules that spring when pressed. With Reduce
48
+ Transparency on, the panels go solid.
49
+ - **Bridge Chains: hovering a bridge grows its circle.** Their people shoot out of the bridge to
50
+ their places, then anyone among them whose own circle is scanned sprouts it (3rd degree), then
51
+ theirs (4th), in under half a second.
52
+ - **↻ Check for new forms a cluster.** Hover it and a ring of dots builds round it clockwise, the
53
+ way a connection's circle forms on the map; while it checks, the ring keeps building, round and
54
+ round, in the look's colours, and the button stays lit. The same on the Scan page.
55
+ - **Scan: the radar is a cluster that grows with every page.** While a scan runs, the people each
56
+ page finds gather round the Scan button as dots, ring by ring, each page's batch in the next of
57
+ the theme's colours (the same as the header's dots), the newest glowing.
58
+ - **Backups that look after themselves, photos and all.** Six Degrees now backs up your whole
59
+ network once a day while it's open (when it starts, and after a scan, if the last one is a day
60
+ old), before a new version first opens it, and whenever you click **Back up now** in Settings →
61
+ Your data. Each backup holds your connections, their profile photos, your settings and the
62
+ scanner's progress, and is checked as it's made, the same way a restore would check it. Settings
63
+ says "Last backup: <time>, verified", or plainly what's wrong if a backup ever fails its check.
64
+ It keeps the last 7 daily backups, 3 from before new versions and 3 from before an import or a
65
+ restore (each of those for at least 30 days); ones you make yourself stay until you delete them.
66
+ The Social tab's messages and notes are never in a backup, so deleting them there deletes them
67
+ everywhere.
68
+ - **Restore any backup, from Settings.** Each backup has **Restore** and **Show in Finder**.
69
+ Restore checks it, then puts it back when Six Degrees restarts (**Restart now** in the Mac app),
70
+ keeping what was there first so you can go back again. Undoing an import is now one click on
71
+ the backup it kept, instead of moving files by hand.
72
+ - **Your look and your saved Galaxy layouts travel with your network**: they're kept with your
73
+ settings, so a backup, a restore or a move to another computer brings them along.
74
+ - **Settings → LinkedIn usage: how close your account is to the line, at a glance.** A status pill
75
+ (well within, above the default, risky, too close, or paused) and four bars: searches in the last
76
+ 24 hours, marked at 50 (the default), 100 (risky) and 373 (where a real account was restricted),
77
+ with when the next one frees and when you're all clear; searches this month, with when LinkedIn's
78
+ month resets (midnight Pacific on the 1st) and the 250 to 350 people report for a free account
79
+ shaded as a guide, not a fact; the last 7 days against Auto scan's 200; and profile views. Below
80
+ them: your speed and searches in the last hour, about how many people you can still map, the last
81
+ time LinkedIn pushed back (its time and reason, even after you lift the pause), Auto scan's own
82
+ rules, and a plain warning with *Back to 50 a day, 250 a month* when it matters. Every number is
83
+ counted from what Six Degrees wrote down on this computer, and says so. The notch's budget and the
84
+ Scan page's budget box link to it.
85
+
86
+ ### Changed
87
+ - **A LinkedIn CSV import is kept until you remove it.** Close the window or restart the app and
88
+ your imported network is still there; it used to be gone with the window. It's kept on this
89
+ computer, in your data folder (`csv-network.json`), apart from any network you scan, and only
90
+ what the map needs (names, positions, companies, profile links, when you connected; never email
91
+ addresses). Click × beside *Your CSV* to remove it; it asks first, and your `Connections.csv`
92
+ isn't touched. *Save a copy of my network* carries it to another computer and an import brings
93
+ it back. If the kept file can't be read, the welcome screen says so instead of acting as if
94
+ there were none. The welcome screen's CSV card says where it's kept. Once you've scanned your own
95
+ connections, every page shows your scan instead; the CSV stays kept, and the import page says so
96
+ with a button to remove it.
97
+ - **Google Chrome is part of getting ready.** Step 1 on the Scan page isn't done until Chrome is on
98
+ your computer, and offers Install Google Chrome, then come back; it ticks by itself once Chrome is
99
+ there. Open LinkedIn waits for it, nothing that opens LinkedIn starts without it (every button
100
+ gets the same one-sentence reason), and the welcome screen's Scan card says it needs Chrome.
101
+ - **Honest about how long scanning takes.** The Scan page says your galaxy takes three steps and who
102
+ they know fills in over days. Step 4 says the first circle shows up in about 5 minutes (longer at
103
+ Medium or Slow) and why the rest takes days: every page is a LinkedIn search, and your budget caps
104
+ a day's.
105
+ - **Your field is asked after your connections are in**, under "Your galaxy is ready", instead of
106
+ before the first scan, and picking one rescores everyone straight away. Anyone with only their own
107
+ connections mapped who never answered is asked once; skipping counts as an answer.
108
+ - **Sign in to LinkedIn with Google or Apple?** Step 2 now says what to do: set a LinkedIn password
109
+ first (Forgot password on LinkedIn's sign-in page emails you a link to make one), since Google and
110
+ Apple sign-in can't work in the scanner's window.
111
+ - **A saved Galaxy picture or video credits sixdegreesapp.com** in its corner, instead of the app's
112
+ name, so anyone it's shared with knows where to get it.
113
+ - **Bridge Chains: the inner ring holds the circles with the most going on**: notifications about
114
+ them (new ones count double), people in them ready to scan, and clusters formed from them since.
115
+ A circle's tooltip says how many notifications are about it.
116
+ - **Separation fits the whole map in the window, and keeps fitting**: whatever the map shows, as the
117
+ slider moves or you aim at someone else, it fits again and glides there, list and all. − Fit +
118
+ at the right of its caption zooms in or out (as far as 15%) until the view changes.
119
+ - **Bridge Chains' legends are just dots**, no box: they fit whatever font a look uses.
120
+ - **Bridge Chains: the badge at a bridge's top right counts their circle's news**: new notifications
121
+ about it (gold) and people in it ready to scan (green), as asked for on 10/2; it counted only the
122
+ people ready before.
123
+ - **Settings → Your data says Export backup file… and Restore from a file…** instead of "Save a
124
+ copy of my network" and "Choose a file… / Import". They do the same: one file to carry your
125
+ network to another computer, and putting one back.
126
+
127
+ ### Fixed
128
+ - **Auto scan rests two days after any check from LinkedIn, as the Scan page says.** A pushback
129
+ partway through reading someone's list used to rest it one day, like a scan you start yourself;
130
+ only a check at the start of a run got the two days.
131
+ - **"Signed in" means signed in.** Step 2 used to tick as soon as the scanner's Chrome window had
132
+ opened once, even if you closed it without signing in. Now it ticks once the scanner has seen you
133
+ signed in. Anyone already signed in before this stays signed in.
134
+ - **Degrees says the right thing before who they know is mapped.** With no 2nd degree yet, it told
135
+ everyone LinkedIn's CSV can't have circles, scanner users included. Now someone who scanned is
136
+ pointed to step 4 on the Scan page; a CSV import gets the CSV reason, as before.
137
+ - **Words on screen read plainly**: no em dashes anywhere the app shows text (pages, notices,
138
+ notifications, error messages), and a test keeps it that way. The Scan page's old "Checking for
139
+ updates has moved" note is gone. Two messages written for developers now say what anyone can do: a
140
+ copy missing its scanner says to download it again, and a page that can't reach the app says to
141
+ quit and reopen it. The download size reads "about 210 MB" everywhere (the Mac downloads are 204
142
+ and 212 MB).
143
+ - **The Social tab says truly where its messages and notes go**: never into Six Degrees' own
144
+ backups, and into an exported backup file only with its Social tab box ticked. It used to say
145
+ they were never in a copy, which wasn't so when that box was ticked.
146
+ - **Copies kept before an import no longer pile up forever**: the newest 3 stay, and none goes
147
+ before it's 30 days old.
148
+ - **The budget says "the last 24 hours", because that's what it counts.** The notch said "searches
149
+ today" and the Scan page "searches left today" (and "profile views today"), but the budget has
150
+ always counted a rolling 24 hours, not since midnight. They now say so.
151
+
9
152
  ## [0.6.0] - 2026-10-03
10
153
 
11
154
  ### Added
@@ -68,7 +68,7 @@ The links above always fetch the newest release.</sub>
68
68
 
69
69
  **Which download?** Apple menu → **About This Mac**. If it says "Chip: Apple M…", take
70
70
  **Apple Silicon**. If it says "Processor: …Intel…", take **Intel**. It needs **macOS 13.5
71
- (Ventura) or later**, and it's about 220 MB. Everything the scanner needs except Google
71
+ (Ventura) or later**, and it's about 210 MB. Everything the scanner needs except Google
72
72
  Chrome is inside, Python included, so there's nothing else to install.
73
73
 
74
74
  **The first time you open it**, macOS stops it, because the app isn't signed with a
@@ -112,8 +112,9 @@ Downloading the new `.dmg` works too; you'll repeat step 3 once for it.
112
112
 
113
113
  Your network isn't stored in the app. It's in a hidden folder in your home folder,
114
114
  `.six-degrees` (open it any time with *Help → Show the Data Folder*), so updates never
115
- touch it. Each new version also copies your data into its `backups` folder before it
116
- first opens it. To take it to another computer, see
115
+ touch it. Each new version also backs up your data, photos and all, into its `backups`
116
+ folder before it first opens it, and Six Degrees makes a backup each day it's open
117
+ (see [Backups](#backups)). To take it to another computer, see
117
118
  [Moving to a new computer](#moving-to-a-new-computer).
118
119
 
119
120
  **Windows (beta):** download [Six-Degrees-Windows-Setup.exe](https://github.com/blakeb056/six-degrees/releases/download/v0.5.1-beta.1/Six-Degrees-Windows-Setup.exe)
@@ -283,6 +284,10 @@ Something out of date, or unfair to another tool? [Open an issue](https://github
283
284
  >
284
285
  > **The CSV import and the sample network carry no LinkedIn risk at all.** Details:
285
286
  > [how scanning works and what it risks](docs/SCRAPING.md).
287
+ >
288
+ > The app asks for an explicit "I understand" once, before the first scan.
289
+ >
290
+ > Six Degrees is not affiliated with or endorsed by LinkedIn.
286
291
 
287
292
  ## First run
288
293
 
@@ -298,7 +303,7 @@ The app opens on a welcome screen with three ways in, and asks nothing about you
298
303
  - **Import my LinkedIn CSV**: LinkedIn's official export, read on your machine. On
299
304
  LinkedIn: **Settings & Privacy → Data privacy → Get a copy of your data →
300
305
  Connections**. LinkedIn emails a link in about ten minutes; unzip it and drop
301
- `Connections.csv` into the app.
306
+ `Connections.csv` into the app. It's kept on your computer until you remove it.
302
307
  - **Explore a sample network**: 150 invented connections and the 598 invented people
303
308
  they know. Click through before deciding anything.
304
309
 
@@ -317,8 +322,12 @@ people you *haven't* met, have nothing to draw. That data exists in no official
317
322
  the scanner is the only way to it, and it's opt-in for that reason.
318
323
 
319
324
  While the sample or a CSV is loaded, the top bar shows *Sample network ×* or *Your CSV
320
- ×* (click × to go back), and Outlink and Scan are hidden. Neither is ever added to your
321
- network: they last as long as the app's window is open.
325
+ ×*, and Outlink and Scan are hidden. Neither is ever added to your network. The sample
326
+ lasts as long as the app's window is open. A CSV import is kept on your computer, in the
327
+ data folder (`csv-network.json`), so it's still there after you close the window or
328
+ restart; click × to remove it (your `Connections.csv` itself isn't touched). Once you've
329
+ scanned your own connections, the map shows your scan instead; the CSV stays kept until
330
+ you remove it from the import page.
322
331
 
323
332
  ## How scoring works
324
333
 
@@ -382,8 +391,9 @@ It estimates **network position**, not what anyone is worth as a person.
382
391
 
383
392
  - Your network is stored on your computer and nowhere else. No account, no server, no
384
393
  telemetry, no analytics, no crash reporting.
385
- - A CSV import is read on your machine and never added to your network. It's held only
386
- in the app window's own storage, and you import it again next time.
394
+ - A CSV import is read on your machine and never added to your network. It's kept in the
395
+ data folder as `csv-network.json` (names, positions, companies, profile links and when
396
+ you connected; never email addresses) until you click × beside *Your CSV*.
387
397
  - The app contacts only these, and only when you act:
388
398
  - **LinkedIn**, while you scan. Each profile photo is saved on your computer as the
389
399
  scan reads it, and the app shows photos only from there, so looking at your network
@@ -413,30 +423,58 @@ See [SECURITY.md](SECURITY.md) for the threat model.
413
423
  ```
414
424
  .six-degrees/ in your home folder (hidden)
415
425
  ├── six-degrees.sqlite your network: connections, scores, tiers, queue, settings
416
- ├── backups/ copies of the database from before each new version, and
417
- │ before an import, touched it
426
+ ├── backups/ backups of your network: daily, before each new version, before
427
+ │ an import or a restore, and any you make (see Backups below)
418
428
  ├── avatars/ profile photos, if you scan
419
429
  ├── chrome-profile/ the scanner's Chrome sign-in, if you scan (see below)
420
430
  ├── venv/ the scanner's Python add-ons, if you set it up without the Mac app
421
431
  ├── python/ a private Python for them, if Set up the scanner downloaded one
422
432
  ├── pushback/ what LinkedIn's page said if it ever pushed back
433
+ ├── csv-network.json a LinkedIn CSV import, kept until you remove it
423
434
  └── *.json the scanner's budget, cooldown, progress and skip lists
424
435
  ```
425
436
 
426
437
  **Settings → Your data** shows where this folder is (with *Copy the path* and *Show in
427
438
  Finder*), what each part takes up, and the backups in it.
428
439
 
440
+ ### Backups
441
+
442
+ A backup is your whole network in one `.sixdegrees` file: your connections, their profile
443
+ photos, your settings (the look and your saved Galaxy layouts too), and the scanner's
444
+ progress, skip lists and LinkedIn budget. Each one is checked as it's made, the same way a
445
+ restore would check it, so a backup that's listed would restore. The Social tab's messages
446
+ and notes are never in a backup, so deleting them there (*Forget it*) deletes them
447
+ everywhere, and a restore leaves them as they are. Six Degrees makes one:
448
+
449
+ - **each day** it's open with a network in it (when it starts, and after a scan, if the
450
+ newest daily one is a day old; nothing runs on a timer), keeping the last 7;
451
+ - **before a new version** first opens your data, keeping the last 3;
452
+ - **when you click Back up now** in Settings → Your data. These are never deleted for you.
453
+
454
+ An import or a restore keeps what it replaced as well (`before-import-…`), keeping the
455
+ last 3, and never one that's under 30 days old. Anything else you put in `backups/`
456
+ yourself is never touched.
457
+
458
+ Settings → Your data says when the last backup was made and whether it passed its check
459
+ ("Last backup: <time>, verified"), or what's wrong with it if it didn't. Each backup has
460
+ **Restore** and **Show in Finder**. Backups stay on this computer: to keep one safe if the
461
+ computer is lost, copy it somewhere else (Show in Finder, then drag it to a USB stick).
462
+
463
+ They take space. For a network of about 650 connections and 5,000 people beyond them,
464
+ with their photos, each backup is about 25 to 35 MB, so the kept ones add up to about
465
+ 300 to 400 MB.
466
+
429
467
  ### Moving to a new computer
430
468
 
431
- 1. On the old computer, open **Settings → Your data** and click **Save a copy of my
432
- network**. You get one file, `Six Degrees backup <date>.sixdegrees`, with your network,
469
+ 1. On the old computer, open **Settings → Your data** and click **Export backup
470
+ file…**. You get one file, `Six Degrees backup <date>.sixdegrees`, with your network,
433
471
  your settings, the scanner's progress, skip lists and LinkedIn budget, and the profile
434
472
  photos of the people in it (untick them to leave them out; they come back as you scan
435
473
  again).
436
474
  2. Move that file to the new computer yourself (a USB stick, AirDrop). It holds other
437
475
  people's names and photos, so don't post it or share it.
438
- 3. On the new computer, install Six Degrees, open **Settings → Your data**, choose the
439
- file and click **Import**. It's checked first, and nothing changes if it isn't a whole
476
+ 3. On the new computer, install Six Degrees, open **Settings → Your data**, click
477
+ **Restore from a file…**, choose the file and click **Restore**. It's checked first, and nothing changes if it isn't a whole
440
478
  and undamaged Six Degrees copy. If that computer already has a network, you're asked to
441
479
  confirm that the import replaces it. The two networks are never merged. Your LinkedIn
442
480
  search budget is the one thing that is: it belongs to your LinkedIn account, not to a
@@ -446,42 +484,27 @@ Finder*), what each part takes up, and the backups in it.
446
484
  **Restart now**; with `npx six-degrees`, press Ctrl-C and start it again. If another
447
485
  copy of Six Degrees has the same folder open (one started from the Terminal, say), the
448
486
  import waits, and Settings says so. What was there before is kept in `backups/`
449
- (`before-import-…`), and those copies are never deleted automatically: see
450
- [Undo an import](#undo-an-import).
487
+ (`before-import-…`), for at least 30 days: see [Undo an import](#undo-an-import).
451
488
  5. Sign in to LinkedIn again on the new computer before you scan. Your sign-in never goes
452
- into a copy. A network opened from a LinkedIn CSV isn't in the copy either: it lives in
453
- its browser tab, so import the CSV again there.
489
+ into a copy. A LinkedIn CSV import kept on the old computer does go into it, and opens
490
+ on the new one.
454
491
 
455
492
  ### Undo an import
456
493
 
457
- An import keeps what it replaced in the data folder's `backups/`, named with the time it
458
- finished (Settings → Your data shows the exact name):
459
-
460
- - `before-import-<time>.sqlite`: your network as it was.
461
- - `before-import-<time>-files/`: its profile photos (`avatars/`), the scanner's notes about
462
- it (`bridge-progress.json`, `bridge-skips.json`, `bridge-unclear.json`), and a copy of
463
- your LinkedIn budget files as they were.
464
-
465
- To put it back (there's no button for this yet):
466
-
467
- 1. Quit Six Degrees (⌘Q in the Mac app, Ctrl-C for `npx six-degrees`). Do the rest while
468
- it's closed.
469
- 2. Open the data folder (Settings → Your data → *Show in Finder*, or `~/.six-degrees`).
470
- Move these out of it, to the Trash or somewhere safe if you might want the imported
471
- network again: `six-degrees.sqlite`, and `six-degrees.sqlite-wal` and
472
- `six-degrees.sqlite-shm` if they're there (a `-wal` left beside a different database
473
- is replayed into it and damages it), then `avatars/` and the three `bridge-*.json`
474
- files.
475
- 3. Copy `backups/before-import-<time>.sqlite` into the data folder and rename the copy
476
- `six-degrees.sqlite`. If `before-import-<time>.sqlite-wal` and `-shm` files are beside
477
- it, copy them too, renamed to match (`six-degrees.sqlite-wal`,
478
- `six-degrees.sqlite-shm`).
479
- 4. Copy `avatars/` and the three `bridge-*.json` files from
480
- `backups/before-import-<time>-files/` back into the data folder.
481
- 5. Leave `linkedin-activity.json`, `linkedin-cooldown.json` and `scan-limits.json` as they
482
- are. They're your LinkedIn account's budget, which the import kept (it only added the
483
- other computer's searches), so they're right whichever network you use.
484
- 6. Open Six Degrees again.
494
+ An import, or a restore, keeps what it replaced in the data folder's `backups/`, named with
495
+ the time it finished: `before-import-<time>.sqlite`, your network as it was, and
496
+ `before-import-<time>-files/` beside it, with its profile photos, the scanner's notes
497
+ about it, and a CSV import kept with it if there was one.
498
+
499
+ To put it back, open **Settings → Your data**, open **The backups**, find **Before an import
500
+ or a restore** with that time, and click **Restore**. It's checked first, then finishes when
501
+ Six Degrees restarts (**Restart now** in the Mac app; with `npx six-degrees`, press Ctrl-C
502
+ and start it again), and what's there now is kept in the same way, so you can go back
503
+ again. Your LinkedIn search budget stays as it is: it belongs to your LinkedIn account,
504
+ not to a network.
505
+
506
+ The same **Restore** puts back any other backup: yesterday's, or the one from before the
507
+ last update.
485
508
 
486
509
  Don't put the live folder in iCloud Drive or Dropbox to share it between computers
487
510
  instead. A sync service that copies the database while it's open can damage it, and it
@@ -490,8 +513,7 @@ would also sync your LinkedIn sign-in.
490
513
  **To remove everything:** quit the app and drag **Six Degrees** from Applications to the
491
514
  Trash. Then in Finder choose **Go → Go to Folder…** (⇧⌘G), paste `~/.six-degrees` and
492
515
  move that folder to the Trash. Do the same for
493
- `~/Library/Application Support/Six Degrees`, the app window's own storage and cache
494
- (it can include a CSV you imported).
516
+ `~/Library/Application Support/Six Degrees`, the app window's own storage and cache.
495
517
 
496
518
  > [!WARNING]
497
519
  > `chrome-profile/` holds a **real, signed-in LinkedIn session**. It's the one thing here
@@ -505,7 +527,7 @@ Nothing to configure. Two optional environment variables exist:
505
527
  | Variable | Purpose |
506
528
  |---|---|
507
529
  | `SIX_DEGREES_HOME` | Where your data lives. Defaults to `~/.six-degrees`. It's read at launch, so it applies to `npx six-degrees` and source runs (npx also takes `--data-dir`; see `npx six-degrees --help`), not when the Mac app is opened from the Dock or Finder. A relative folder is taken from the folder you run the command in. |
508
- | `ADMIN_TOKEN` | Not needed on your own computer. The app listens only on 127.0.0.1 and isn't built to be exposed: don't put it behind a tunnel or bind it to another address ([SECURITY.md](SECURITY.md)). If it's ever bound elsewhere, the ten routes that delete, replace or hand over your data, run the scanner, open the data folder or update a copy run from source refuse every caller without this token, including the app's own buttons. Everything else, including reading your whole network, stays open. |
530
+ | `ADMIN_TOKEN` | Not needed on your own computer. The app listens only on 127.0.0.1 and isn't built to be exposed: don't put it behind a tunnel or bind it to another address ([SECURITY.md](SECURITY.md)). If it's ever bound elsewhere, the eleven routes that delete, replace or hand over your data, run the scanner, open the data folder or update a copy run from source refuse every caller without this token, including the app's own buttons. Everything else, including reading your whole network, stays open. |
509
531
 
510
532
  ## Docs
511
533