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
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { Suspense, useEffect, useState, useRef, useMemo, useCallback } from 'react';
4
4
  import { useSearchParams } from 'next/navigation';
5
- import { isCircleScan, loadScanNotes, NO_SCAN_NOTES } from '../lib/scraper-client';
5
+ import { fillsCircles, loadScanNotes, NO_SCAN_NOTES } from '../lib/scraper-client';
6
6
  import useScanner from './components/useScanner';
7
7
  import useRequests from './components/useRequests';
8
8
  import { requestCount } from '../lib/requests-client';
@@ -18,7 +18,7 @@ import OnboardingGate from './components/OnboardingGate';
18
18
  import EmptyState from './components/EmptyState';
19
19
  import { useUser } from './components/UserProvider';
20
20
  import { IS_DEMO, loadDemoNetwork } from '../lib/demo';
21
- import { hasCsvNetwork, loadCsvNetwork, clearCsvNetwork } from '../lib/csv';
21
+ import { loadCsvNetwork, closeCsvNetwork, REMOVE_CSV_QUESTION } from '../lib/csv';
22
22
  import Link from 'next/link';
23
23
  import AppHeader from './components/AppHeader';
24
24
  import { networkLevel } from '../lib/level';
@@ -110,10 +110,11 @@ function HomeInner() {
110
110
  useEffect(() => {
111
111
  if (!userId) return;
112
112
  async function load() {
113
- // Demo mode: hydrate from the bundled static snapshot, no Supabase.
114
- // Three possible sources: the bundled demo snapshot, a CSV the visitor
115
- // imported in this tab (1st-degree only, never persisted), or Supabase.
116
- const csv = hasCsvNetwork() ? loadCsvNetwork() : null;
113
+ // Three possible sources: the bundled demo snapshot (demo mode), the
114
+ // sample opened in this tab or a CSV import kept in the data folder
115
+ // (1st degree only, never in the database), or the database. Which one
116
+ // is lib/csv.js openNetworkSource: a scan you've made wins over a CSV.
117
+ const csv = await loadCsvNetwork();
117
118
  if (csv) { setCsvMode(true); setCsvSource(csv.source || 'csv'); }
118
119
  const { degree1: d1, degree2: d2, degree3: d3 = [] } = IS_DEMO
119
120
  ? await loadDemoNetwork()
@@ -129,11 +130,9 @@ function HomeInner() {
129
130
  shapeRef.current = networkShape(d1, d2);
130
131
  setStats(statsFor(d1, d2));
131
132
  setLoading(false);
133
+ if (!IS_DEMO && !csv) loadScanNotes().then(setScanNotes);
132
134
  }
133
135
  load();
134
- if (!IS_DEMO && !hasCsvNetwork()) {
135
- loadScanNotes().then(setScanNotes);
136
- }
137
136
  }, [userId]);
138
137
 
139
138
  // The network again, after a scan: circles fill in while they're scanned
@@ -141,7 +140,7 @@ function HomeInner() {
141
140
  // is published, because the graph views rebuild their scene whenever these
142
141
  // lists change identity (TRAPS ยง29).
143
142
  const reload = useCallback(async () => {
144
- if (IS_DEMO || hasCsvNetwork() || !userId) return;
143
+ if (IS_DEMO || csvMode || !userId) return;
145
144
  try {
146
145
  const [{ degree1: d1, degree2: d2, degree3: d3 = [] }, notes] = await Promise.all([loadNetwork(userId), loadScanNotes()]);
147
146
  setScanNotes((prev) => (JSON.stringify(prev) === JSON.stringify(notes) ? prev : notes));
@@ -153,7 +152,7 @@ function HomeInner() {
153
152
  setDegree2(d2);
154
153
  setStats(statsFor(d1, d2));
155
154
  } catch { /* the app restarting, say: keep what's on screen */ }
156
- }, [userId]);
155
+ }, [userId, csvMode]);
157
156
 
158
157
  // Followed once: Bridge Chains has opened it, so leaving that view and coming
159
158
  // back, or reloading, starts from the overview.
@@ -249,9 +248,9 @@ function HomeInner() {
249
248
 
250
249
  if (loading) {
251
250
  return (
252
- <div style={{ minHeight: '100vh', display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', background: 'var(--sd-page)', color: '#fff' }}>
251
+ <div style={{ minHeight: '100vh', display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', background: 'var(--sd-page)', color: 'var(--sd-fg-1, #fff)' }}>
253
252
  <div style={{ fontSize: 24, fontWeight: 700 }}>Loading Six Degreesโ€ฆ</div>
254
- <div style={{ fontSize: 14, color: '#888', marginTop: 8 }}>Mapping your LinkedIn network</div>
253
+ <div style={{ fontSize: 14, color: 'var(--sd-fg-3, #888)', marginTop: 8 }}>Mapping your LinkedIn network</div>
255
254
  </div>
256
255
  );
257
256
  }
@@ -260,7 +259,7 @@ function HomeInner() {
260
259
  const canScan = !IS_DEMO && !csvMode;
261
260
 
262
261
  return (
263
- <div data-map style={{ height: '100vh', overflow: 'hidden', background: 'var(--sd-page)', color: '#fff', fontFamily: 'var(--sd-font)' }}>
262
+ <div data-map style={{ height: '100vh', overflow: 'hidden', background: 'var(--sd-page)', color: 'var(--sd-fg-1, #fff)', fontFamily: 'var(--sd-font)' }}>
264
263
  <AppHeader
265
264
  active={mode}
266
265
  isMobile={isMobile}
@@ -271,27 +270,34 @@ function HomeInner() {
271
270
  openNoteId={linkedNote}
272
271
  // Which network you are looking at, and the way back out of it. Loading
273
272
  // the sample used to be a one-way door: it lives in sessionStorage, and
274
- // nothing in the UI cleared it.
273
+ // nothing in the UI cleared it. A CSV import is kept in the data folder
274
+ // now, so ร— is how it's removed for good, and it asks first, as every
275
+ // delete of something kept on this computer does.
275
276
  chips={csvMode && (
276
277
  <div style={{
277
278
  display: 'flex', alignItems: 'center', gap: 6,
278
279
  marginLeft: isMobile ? 4 : 10, padding: isMobile ? '4px 8px' : '5px 10px',
279
- borderRadius: 999, background: 'rgba(255,255,255,0.05)',
280
- border: '1px solid rgba(255,255,255,0.12)',
280
+ borderRadius: 999, background: 'rgba(var(--sd-ink, 255, 255, 255), 0.05)',
281
+ border: '1px solid rgba(var(--sd-ink, 255, 255, 255), 0.12)',
281
282
  }}>
282
283
  <span style={{
283
284
  width: 6, height: 6, borderRadius: '50%',
284
285
  background: csvSource === 'sample' ? '#9B59B6' : '#2ecc71',
285
286
  }} />
286
- <span style={{ fontSize: isMobile ? 10 : 12, color: 'rgba(255,255,255,0.65)', whiteSpace: 'nowrap' }}>
287
+ <span style={{ fontSize: isMobile ? 10 : 12, color: 'rgba(var(--sd-ink, 255, 255, 255), 0.65)', whiteSpace: 'nowrap' }}>
287
288
  {csvSource === 'sample' ? 'Sample network' : 'Your CSV'}
288
289
  </span>
289
290
  <button
290
- onClick={() => { clearCsvNetwork(); window.location.href = '/'; }}
291
- title={csvSource === 'sample' ? 'Leave the sample network' : 'Clear this import'}
291
+ onClick={async () => {
292
+ if (csvSource !== 'sample' && !window.confirm(REMOVE_CSV_QUESTION)) return;
293
+ const closed = await closeCsvNetwork(csvSource);
294
+ if (!closed.ok) { alert(closed.error); return; }
295
+ window.location.href = '/';
296
+ }}
297
+ title={csvSource === 'sample' ? 'Leave the sample network' : 'Remove this import from this computer'}
292
298
  style={{
293
299
  border: 'none', background: 'transparent', cursor: 'pointer',
294
- color: '#888', fontSize: isMobile ? 13 : 15, lineHeight: 1,
300
+ color: 'var(--sd-fg-3, #888)', fontSize: isMobile ? 13 : 15, lineHeight: 1,
295
301
  padding: '0 0 0 2px',
296
302
  }}
297
303
  >
@@ -304,7 +310,7 @@ function HomeInner() {
304
310
  {isDegreesMode && !csvMode && pendingCount > 0 && (
305
311
  <Link href="/queue" style={{
306
312
  padding: '5px 12px', borderRadius: 16, fontSize: 12, fontWeight: 600, textDecoration: 'none',
307
- background: 'rgba(255,107,53,0.12)', color: '#FF6B35',
313
+ background: 'rgba(255,107,53,0.12)', color: 'var(--sd-orange, #FF6B35)',
308
314
  border: '1px solid rgba(255,107,53,0.25)',
309
315
  display: 'inline-flex', alignItems: 'center', gap: 5,
310
316
  }}>
@@ -330,8 +336,11 @@ function HomeInner() {
330
336
  // No connections at all: offer a way in rather than a black screen.
331
337
  if (degree1.length === 0) return <EmptyState />;
332
338
 
333
- // Every Degrees surface is built from 2nd-degree rows. A CSV import
334
- // has none, so say why instead of rendering an empty canvas.
339
+ // Every Degrees surface is built from 2nd-degree rows, so with none
340
+ // say why instead of rendering an empty canvas. Why depends on where
341
+ // the network came from: a CSV import (csvMode) can never have them,
342
+ // while a scanned network just hasn't had step 4 yet. It used to tell
343
+ // everyone the CSV reason, scanner users included.
335
344
  if (isDegreesMode && degree2.length === 0) {
336
345
  return (
337
346
  <div style={{
@@ -340,16 +349,21 @@ function HomeInner() {
340
349
  }}>
341
350
  <div style={{ maxWidth: 440 }}>
342
351
  <div style={{ fontSize: 40, marginBottom: 16, opacity: 0.5 }}>&#128279;</div>
343
- <h2 style={{ fontSize: 22, fontWeight: 800, margin: '0 0 12px', color: '#fff' }}>
344
- Degrees need 2nd-degree data
352
+ <h2 style={{ fontSize: 22, fontWeight: 800, margin: '0 0 12px', color: 'var(--sd-fg-1, #fff)' }}>
353
+ {csvMode ? 'Degrees need 2nd-degree data' : 'Who they know comes next'}
345
354
  </h2>
346
- <p style={{ color: 'rgba(255,255,255,0.45)', fontSize: 14, lineHeight: 1.7, margin: '0 0 20px' }}>
347
- This view maps who <em>your connections</em>{' '}know &mdash; the people you haven&rsquo;t met yet.
348
- LinkedIn&rsquo;s CSV export only covers your own 1st-degree list, so there are no circles to open here.
355
+ <p style={{ color: 'rgba(var(--sd-ink, 255, 255, 255), 0.45)', fontSize: 14, lineHeight: 1.7, margin: '0 0 20px' }}>
356
+ This view maps who <em>your connections</em>{' '}know: the people you haven&rsquo;t met yet.{' '}
357
+ {csvMode
358
+ ? <>LinkedIn&rsquo;s CSV export only covers your own 1st-degree list, so there are no circles to open here.</>
359
+ : <>Your own connections are mapped. Step 4 on the Scan page reads their circles, one person at a
360
+ time: the first shows up here in a few minutes, and the rest fill in over days.</>}
349
361
  </p>
350
- <p style={{ color: '#666', fontSize: 13, lineHeight: 1.7, margin: 0 }}>
351
- The local scanner maps those circles (and captures real photos).{' '}
352
- <Link href="/setup" style={{ color: '#3498DB', textDecoration: 'none' }}>Set up scanning &rarr;</Link>
362
+ <p style={{ color: 'var(--sd-fg-4, #666)', fontSize: 13, lineHeight: 1.7, margin: 0 }}>
363
+ {csvMode ? <>The local scanner maps those circles (and captures real photos).{' '}</> : null}
364
+ <Link href="/setup" style={{ color: 'var(--sd-blue, #3498DB)', textDecoration: 'none' }}>
365
+ {csvMode ? 'Set up scanning' : 'Map who they know'} &rarr;
366
+ </Link>
353
367
  </p>
354
368
  </div>
355
369
  </div>
@@ -428,14 +442,16 @@ function networkShape(d1, d2) {
428
442
  }
429
443
 
430
444
  // Looks at the network again when a scan has changed it: once when any scan
431
- // ends, and every 20 seconds while a circle is being scanned with Bridge Chains
432
- // open, since the scanner saves every 10 pages and the circle fills in as it
433
- // does. Its own component so the scanner's answer, which changes every second or
434
- // two while a scan runs, re-renders it and not the whole map.
445
+ // ends, and every 20 seconds while circles are being scanned with Bridge Chains
446
+ // open, since the scanner saves every 10 pages and a circle fills in as it
447
+ // does. A batch (Map 2nd degree) counts too, not only one person's scan: the
448
+ // Scan page's "Watch it fill in" opens the circle it is reading. Its own
449
+ // component so the scanner's answer, which changes every second or two while
450
+ // a scan runs, re-renders it and not the whole map.
435
451
  function NetworkRefresh({ onChange, live }) {
436
452
  const scan = useScanner();
437
453
  const ended = scan.finished.find(CHANGES_NETWORK)?.startedAt ?? null;
438
- const filling = live && scan.running && isCircleScan(scan);
454
+ const filling = live && scan.running && fillsCircles(scan);
439
455
  useEffect(() => {
440
456
  if (ended != null) onChange();
441
457
  }, [ended, onChange]);
@@ -7,7 +7,7 @@ import { useRouter, useSearchParams } from 'next/navigation';
7
7
  import { runScrape, scraperStatus, notReadyMessage, busyReason } from '../../lib/scraper-client';
8
8
  import { loadNetwork } from '../../lib/network';
9
9
  import { IS_DEMO } from '../../lib/demo';
10
- import { hasCsvNetwork, loadCsvNetwork } from '../../lib/csv';
10
+ import { loadCsvNetwork } from '../../lib/csv';
11
11
  import OnboardingGate from '../components/OnboardingGate';
12
12
  import PathsAnalyzer from '../components/PathsAnalyzer';
13
13
  import { useUser } from '../components/UserProvider';
@@ -57,17 +57,17 @@ function PathsInner() {
57
57
  }, [tab, selectedCompany]);
58
58
  // Bumped when company scores change, so the network reloads with new tiers.
59
59
  const [reloadKey, setReloadKey] = useState(0);
60
- // The sample or a CSV import: they live only in this tab, so a company scan could only fail.
60
+ // The sample or a CSV import: neither is in the database, so a company scan could only fail.
61
61
  const [localOnly, setLocalOnly] = useState(false);
62
62
 
63
63
  useEffect(() => {
64
64
  if (IS_DEMO) return;
65
65
  if (!userId) return;
66
66
  async function load() {
67
- // A CSV import (1st degree only) and the sample network (both degrees) live
68
- // in this tab, not the database. Keep the sample's 2nd degree: without it
67
+ // A CSV import (1st degree only, kept in the data folder) and the sample
68
+ // network (both degrees, in this tab) aren't in the database. Keep the sample's 2nd degree: without it
69
69
  // the company map has no links and nobody is "reachable".
70
- const csv = hasCsvNetwork() ? loadCsvNetwork() : null;
70
+ const csv = await loadCsvNetwork();
71
71
  setLocalOnly(Boolean(csv));
72
72
  let d1 = [], d2 = [], d3 = [];
73
73
  if (csv) {
@@ -240,23 +240,23 @@ function PathsInner() {
240
240
  return (
241
241
  <div style={{
242
242
  minHeight: '100vh', display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center',
243
- gap: 12, background: 'var(--sd-page)', color: 'rgba(255,255,255,0.7)',
243
+ gap: 12, background: 'var(--sd-page)', color: 'rgba(var(--sd-ink, 255, 255, 255), 0.7)',
244
244
  fontFamily: 'var(--sd-font)',
245
245
  }}>
246
- <h1 style={{ fontSize: 20, fontWeight: 700, margin: 0, color: '#fff' }}>Not part of the demo</h1>
246
+ <h1 style={{ fontSize: 20, fontWeight: 700, margin: 0, color: 'var(--sd-fg-1, #fff)' }}>Not part of the demo</h1>
247
247
  <p style={{ fontSize: 13, margin: 0 }}>The public demo includes the Network Circle and Degrees views only.</p>
248
- <Link href="/" style={{ fontSize: 13, color: '#888', textDecoration: 'none' }}>&larr; Back to the network</Link>
248
+ <Link href="/" style={{ fontSize: 13, color: 'var(--sd-fg-3, #888)', textDecoration: 'none' }}>&larr; Back to the network</Link>
249
249
  </div>
250
250
  );
251
251
  }
252
252
 
253
253
  if (loading) {
254
- return <div style={{ minHeight: '100vh', display: 'flex', alignItems: 'center', justifyContent: 'center', background: 'var(--sd-page)', color: '#fff' }}>Loading...</div>;
254
+ return <div style={{ minHeight: '100vh', display: 'flex', alignItems: 'center', justifyContent: 'center', background: 'var(--sd-page)', color: 'var(--sd-fg-1, #fff)' }}>Loading...</div>;
255
255
  }
256
256
 
257
257
  return (
258
258
  <div style={{
259
- height: '100vh', background: 'var(--sd-page)', color: '#fff',
259
+ height: '100vh', background: 'var(--sd-page)', color: 'var(--sd-fg-1, #fff)',
260
260
  fontFamily: 'var(--sd-font)',
261
261
  display: 'flex', flexDirection: 'column', overflow: 'hidden',
262
262
  }}>
@@ -264,26 +264,26 @@ function PathsInner() {
264
264
  Industries and Companies sit in the notch under it. */}
265
265
  <AppHeader active="paths" csvMode={localOnly} />
266
266
  {selectedCompany && (
267
- <div style={{ padding: '10px 24px', borderBottom: '1px solid rgba(255,255,255,0.08)', flexShrink: 0 }}>
267
+ <div style={{ padding: '10px 24px', borderBottom: '1px solid rgba(var(--sd-ink, 255, 255, 255), 0.08)', flexShrink: 0 }}>
268
268
  <div style={{ display: 'flex', alignItems: 'center', gap: 12 }}>
269
269
  {selectedCompany && (
270
270
  <>
271
271
  <button onClick={() => { setSelectedCompany(null); setCompanyPeople([]); }}
272
- style={{ background: 'none', border: 'none', color: '#888', cursor: 'pointer', fontSize: 12 }}>
272
+ style={{ background: 'none', border: 'none', color: 'var(--sd-fg-3, #888)', cursor: 'pointer', fontSize: 12 }}>
273
273
  โ† Companies
274
274
  </button>
275
275
  <span style={{ fontSize: 13, fontWeight: 600 }}>{selectedCompany.name}</span>
276
- <span style={{ fontSize: 11, color: '#888' }}>
276
+ <span style={{ fontSize: 11, color: 'var(--sd-fg-3, #888)' }}>
277
277
  {connectedCount}/{companyPeople.length} connected
278
278
  </span>
279
279
  {localOnly ? (
280
- <span style={{ marginLeft: 'auto', fontSize: 11, color: '#888' }}>Scanning needs your own network</span>
280
+ <span style={{ marginLeft: 'auto', fontSize: 11, color: 'var(--sd-fg-3, #888)' }}>Scanning needs your own network</span>
281
281
  ) : (
282
282
  <button onClick={scanFullCompany} disabled={scanning || Boolean(busy)}
283
283
  title={busy ? `${busy}. One scan at a time.` : undefined}
284
284
  style={{
285
285
  marginLeft: 'auto', padding: '5px 12px', borderRadius: 6, border: 'none', cursor: scanning || busy ? 'not-allowed' : 'pointer',
286
- background: scanning || busy ? '#333' : 'rgba(0,255,136,0.15)', color: scanning || busy ? '#555' : '#00ff88',
286
+ background: scanning || busy ? '#333' : 'rgba(0,255,136,0.15)', color: scanning || busy ? 'var(--sd-fg-5, #555)' : 'var(--sd-green, #00ff88)',
287
287
  fontSize: 11, fontWeight: 600,
288
288
  }}>
289
289
  {scanning ? 'Scanning...' : busy ? 'Scanner busy' : '+ Scan Full Company'}
@@ -293,7 +293,7 @@ function PathsInner() {
293
293
  title="Not yet tested against live LinkedIn. Results may be incomplete."
294
294
  style={{
295
295
  fontSize: 9.5, fontWeight: 800, letterSpacing: 0.6, padding: '3px 7px',
296
- borderRadius: 20, border: '1px solid rgba(255,215,0,0.45)', color: '#FFD700',
296
+ borderRadius: 20, border: '1px solid rgba(255,215,0,0.45)', color: 'var(--sd-gold, #FFD700)',
297
297
  }}
298
298
  >EXPERIMENTAL</span>
299
299
  </>
@@ -312,31 +312,31 @@ function PathsInner() {
312
312
  {/* Company selection grid */}
313
313
  {!selectedCompany && (
314
314
  <>
315
- <p style={{ fontSize: 13, color: '#888', marginBottom: 16 }}>
315
+ <p style={{ fontSize: 13, color: 'var(--sd-fg-3, #888)', marginBottom: 16 }}>
316
316
  Pick a company to see your path to the top. Based on {d1Data.length + d2Data.length} people in your network.
317
317
  </p>
318
318
  <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 10 }}>
319
319
  {companies.slice(0, 60).map(co => (
320
320
  <button key={co.name} onClick={() => selectCompany(co)} style={{
321
321
  padding: '14px', borderRadius: 10, border: 'none', cursor: 'pointer', textAlign: 'left',
322
- background: 'rgba(255,255,255,0.04)', transition: 'background 0.15s',
322
+ background: 'rgba(var(--sd-ink, 255, 255, 255), 0.04)', transition: 'background 0.15s',
323
323
  borderLeft: `3px solid ${co.sCount > 0 ? '#FFD700' : co.aCount > 0 ? '#9B59B6' : '#3498DB'}`,
324
324
  }}
325
- onMouseEnter={e => e.currentTarget.style.background = 'rgba(255,255,255,0.08)'}
326
- onMouseLeave={e => e.currentTarget.style.background = 'rgba(255,255,255,0.04)'}
325
+ onMouseEnter={e => e.currentTarget.style.background = 'rgba(var(--sd-ink, 255, 255, 255), 0.08)'}
326
+ onMouseLeave={e => e.currentTarget.style.background = 'rgba(var(--sd-ink, 255, 255, 255), 0.04)'}
327
327
  >
328
- <div style={{ fontSize: 14, fontWeight: 700, color: '#fff', marginBottom: 4 }}>{co.name}</div>
329
- <div style={{ display: 'flex', gap: 8, fontSize: 10, color: '#888' }}>
330
- <span style={{ color: '#00ff88' }}>{co.d1} connected</span>
328
+ <div style={{ fontSize: 14, fontWeight: 700, color: 'var(--sd-fg-1, #fff)', marginBottom: 4 }}>{co.name}</div>
329
+ <div style={{ display: 'flex', gap: 8, fontSize: 10, color: 'var(--sd-fg-3, #888)' }}>
330
+ <span style={{ color: 'var(--sd-green, #00ff88)' }}>{co.d1} connected</span>
331
331
  <span>{co.d2 + co.d3} locked</span>
332
332
  </div>
333
333
  <div style={{ display: 'flex', gap: 6, marginTop: 4, fontSize: 9 }}>
334
- {co.sCount > 0 && <span style={{ color: '#FFD700', fontWeight: 600 }}>{co.sCount}S</span>}
335
- {co.aCount > 0 && <span style={{ color: '#9B59B6', fontWeight: 600 }}>{co.aCount}A</span>}
336
- <span style={{ color: '#555' }}>{co.d1 + co.d2} total</span>
334
+ {co.sCount > 0 && <span style={{ color: 'var(--sd-gold, #FFD700)', fontWeight: 600 }}>{co.sCount}S</span>}
335
+ {co.aCount > 0 && <span style={{ color: 'var(--sd-purple, #9B59B6)', fontWeight: 600 }}>{co.aCount}A</span>}
336
+ <span style={{ color: 'var(--sd-fg-5, #555)' }}>{co.d1 + co.d2} total</span>
337
337
  </div>
338
338
  {/* Progress bar */}
339
- <div style={{ height: 3, background: 'rgba(255,255,255,0.08)', borderRadius: 2, marginTop: 6 }}>
339
+ <div style={{ height: 3, background: 'rgba(var(--sd-ink, 255, 255, 255), 0.08)', borderRadius: 2, marginTop: 6 }}>
340
340
  <div style={{
341
341
  height: '100%', borderRadius: 2,
342
342
  width: `${(co.d1 / Math.max(co.d1 + co.d2 + co.d3, 1)) * 100}%`,
@@ -357,9 +357,9 @@ function PathsInner() {
357
357
  }}>
358
358
  <div style={{ display: 'flex', alignItems: 'center', gap: 6, marginBottom: 4 }}>
359
359
  <div style={{ width: 6, height: 6, borderRadius: '50%', background: '#00ff88', animation: 'pulse 1s infinite' }} />
360
- <span style={{ fontSize: 10, fontWeight: 600, color: '#00ff88' }}>Scanning LinkedIn...</span>
360
+ <span style={{ fontSize: 10, fontWeight: 600, color: 'var(--sd-green, #00ff88)' }}>Scanning LinkedIn...</span>
361
361
  </div>
362
- <div style={{ fontFamily: 'monospace', fontSize: 9, color: '#777', maxHeight: 60, overflow: 'auto' }}>
362
+ <div style={{ fontFamily: 'monospace', fontSize: 9, color: 'var(--sd-fg-4, #777)', maxHeight: 60, overflow: 'auto' }}>
363
363
  {scanLog.map((l, i) => <div key={i}>{l}</div>)}
364
364
  </div>
365
365
  </div>
@@ -377,15 +377,15 @@ function PathsInner() {
377
377
  <div>
378
378
  <span style={{
379
379
  fontSize: 12, fontWeight: 700,
380
- color: level.level >= 5 ? '#FFD700' : level.level >= 3 ? '#9B59B6' : '#3498DB',
380
+ color: level.level >= 5 ? 'var(--sd-gold, #FFD700)' : level.level >= 3 ? 'var(--sd-purple, #9B59B6)' : 'var(--sd-blue, #3498DB)',
381
381
  }}>{level.label}</span>
382
- {level.level >= 5 && <span style={{ fontSize: 9, color: '#FF6B35', marginLeft: 8, fontWeight: 700 }}>TARGET</span>}
382
+ {level.level >= 5 && <span style={{ fontSize: 9, color: 'var(--sd-orange, #FF6B35)', marginLeft: 8, fontWeight: 700 }}>TARGET</span>}
383
383
  </div>
384
384
  <div style={{ display: 'flex', gap: 8, alignItems: 'center' }}>
385
- <span style={{ fontSize: 9, color: '#FF6B35', fontWeight: 600 }}>
385
+ <span style={{ fontSize: 9, color: 'var(--sd-orange, #FF6B35)', fontWeight: 600 }}>
386
386
  +{level.people.filter(p => !p.connected).reduce((s, p) => s + (p.xp || 0), 0)} XP
387
387
  </span>
388
- <span style={{ fontSize: 10, color: '#666' }}>
388
+ <span style={{ fontSize: 10, color: 'var(--sd-fg-4, #666)' }}>
389
389
  {level.people.filter(p => p.connected).length}/{level.people.length}
390
390
  </span>
391
391
  </div>
@@ -418,43 +418,43 @@ function PathPersonRow({ p, level, companyPeople, d1Urls, selectedCompany }) {
418
418
  // How many people above would gain a mutual
419
419
  const aboveCount = aboveMe.length;
420
420
  if (aboveCount > 0) {
421
- unlockInsights.push({ icon: 'โฌ†๏ธ', text: `Adding them gives you a mutual with ${aboveCount} people above in the hierarchy`, color: '#00ff88' });
421
+ unlockInsights.push({ icon: 'โฌ†๏ธ', text: `Adding them gives you a mutual with ${aboveCount} people above in the hierarchy`, color: 'var(--sd-green, #00ff88)' });
422
422
  }
423
423
 
424
424
  // Same level connections help with social proof
425
425
  const sameLevelConnected = sameLevel.filter(op => d1Urls.has(op.profile_url || op.profileUrl)).length;
426
426
  if (sameLevelConnected > 0) {
427
- unlockInsights.push({ icon: '๐Ÿค', text: `${sameLevelConnected} people at their level already connected โ€” high social proof`, color: '#FFD700' });
427
+ unlockInsights.push({ icon: '๐Ÿค', text: `${sameLevelConnected} people at their level already connected: high social proof`, color: 'var(--sd-gold, #FFD700)' });
428
428
  } else {
429
- unlockInsights.push({ icon: '๐ŸŽฏ', text: `First connection at this level โ€” opens a new layer`, color: '#3498DB' });
429
+ unlockInsights.push({ icon: '๐ŸŽฏ', text: `First connection at this level: opens a new layer`, color: 'var(--sd-blue, #3498DB)' });
430
430
  }
431
431
 
432
432
  // Bridge path value
433
433
  if (p.bridgeName) {
434
- unlockInsights.push({ icon: '๐Ÿ”—', text: `Reachable through ${p.bridgeName} โ€” warm intro possible`, color: '#FF6B35' });
434
+ unlockInsights.push({ icon: '๐Ÿ”—', text: `Reachable through ${p.bridgeName}: warm intro possible`, color: 'var(--sd-orange, #FF6B35)' });
435
435
  }
436
436
 
437
437
  // Role-specific value
438
438
  if (p.seniority.level >= 5) {
439
- unlockInsights.push({ icon: '๐Ÿ‘‘', text: `${p.seniority.label} โ€” decision maker, high strategic value but low accept rate`, color: '#FFD700' });
439
+ unlockInsights.push({ icon: '๐Ÿ‘‘', text: `${p.seniority.label}: decision maker, high strategic value but low accept rate`, color: 'var(--sd-gold, #FFD700)' });
440
440
  } else if (p.seniority.level >= 3) {
441
- unlockInsights.push({ icon: '๐Ÿ“Š', text: `${p.seniority.label} โ€” middle management, good balance of access and accept rate`, color: '#9B59B6' });
441
+ unlockInsights.push({ icon: '๐Ÿ“Š', text: `${p.seniority.label}: middle management, good balance of access and accept rate`, color: 'var(--sd-purple, #9B59B6)' });
442
442
  } else {
443
- unlockInsights.push({ icon: 'โœ…', text: `${p.seniority.label} โ€” highest accept rate, builds mutual foundation for people above`, color: '#00ff88' });
443
+ unlockInsights.push({ icon: 'โœ…', text: `${p.seniority.label}: highest accept rate, builds mutual foundation for people above`, color: 'var(--sd-green, #00ff88)' });
444
444
  }
445
445
 
446
446
  // Likelihood explanation
447
447
  if (p.likelihood >= 60) {
448
- unlockInsights.push({ icon: '๐Ÿ”ฅ', text: `${p.likelihood}% likely to accept โ€” strong mutual overlap + approachable role`, color: '#00ff88' });
448
+ unlockInsights.push({ icon: '๐Ÿ”ฅ', text: `${p.likelihood}% likely to accept: strong mutual overlap + approachable role`, color: 'var(--sd-green, #00ff88)' });
449
449
  } else if (p.likelihood >= 30) {
450
- unlockInsights.push({ icon: 'โšก', text: `${p.likelihood}% likely โ€” moderate chance, add more people at their level first`, color: '#FFD700' });
450
+ unlockInsights.push({ icon: 'โšก', text: `${p.likelihood}% likely: moderate chance, add more people at their level first`, color: 'var(--sd-gold, #FFD700)' });
451
451
  } else {
452
- unlockInsights.push({ icon: '๐Ÿ”’', text: `${p.likelihood}% likely โ€” low chance right now, build more connections below them first`, color: '#ff5050' });
452
+ unlockInsights.push({ icon: '๐Ÿ”’', text: `${p.likelihood}% likely: low chance right now, build more connections below them first`, color: 'var(--sd-red, #ff5050)' });
453
453
  }
454
454
  }
455
455
 
456
456
  return (
457
- <div style={{ borderBottom: '1px solid rgba(255,255,255,0.03)' }}>
457
+ <div style={{ borderBottom: '1px solid rgba(var(--sd-ink, 255, 255, 255), 0.03)' }}>
458
458
  {/* Main row */}
459
459
  <div
460
460
  onClick={() => setExpanded(!expanded)}
@@ -462,11 +462,11 @@ function PathPersonRow({ p, level, companyPeople, d1Urls, selectedCompany }) {
462
462
  display: 'flex', alignItems: 'center', gap: 8, padding: '6px 8px',
463
463
  cursor: 'pointer', opacity: p.connected ? 0.7 : 1,
464
464
  }}
465
- onMouseEnter={e => e.currentTarget.style.background = 'rgba(255,255,255,0.04)'}
465
+ onMouseEnter={e => e.currentTarget.style.background = 'rgba(var(--sd-ink, 255, 255, 255), 0.04)'}
466
466
  onMouseLeave={e => e.currentTarget.style.background = 'transparent'}
467
467
  >
468
468
  {/* Expand arrow */}
469
- <span style={{ fontSize: 8, color: '#555', flexShrink: 0, width: 10 }}>
469
+ <span style={{ fontSize: 8, color: 'var(--sd-fg-5, #555)', flexShrink: 0, width: 10 }}>
470
470
  {expanded ? 'โ–พ' : 'โ–ธ'}
471
471
  </span>
472
472
 
@@ -474,9 +474,9 @@ function PathPersonRow({ p, level, companyPeople, d1Urls, selectedCompany }) {
474
474
  <div style={{
475
475
  width: 18, height: 18, borderRadius: '50%', flexShrink: 0, fontSize: 8,
476
476
  display: 'flex', alignItems: 'center', justifyContent: 'center',
477
- background: p.connected ? 'rgba(0,255,136,0.2)' : 'rgba(255,255,255,0.05)',
478
- color: p.connected ? '#00ff88' : '#555',
479
- border: `1px solid ${p.connected ? 'rgba(0,255,136,0.3)' : 'rgba(255,255,255,0.1)'}`,
477
+ background: p.connected ? 'rgba(0,255,136,0.2)' : 'rgba(var(--sd-ink, 255, 255, 255), 0.05)',
478
+ color: p.connected ? 'var(--sd-green, #00ff88)' : 'var(--sd-fg-5, #555)',
479
+ border: `1px solid ${p.connected ? 'rgba(0,255,136,0.3)' : 'rgba(var(--sd-ink, 255, 255, 255), 0.1)'}`,
480
480
  }}>{p.connected ? 'โœ“' : '๐Ÿ”’'}</div>
481
481
 
482
482
  {/* Photo */}
@@ -487,21 +487,21 @@ function PathPersonRow({ p, level, companyPeople, d1Urls, selectedCompany }) {
487
487
  ) : (
488
488
  <div style={{
489
489
  width: 26, height: 26, borderRadius: '50%', flexShrink: 0, fontSize: 10, fontWeight: 700,
490
- background: '#333', color: '#888', display: 'flex', alignItems: 'center', justifyContent: 'center',
490
+ background: '#333', color: 'var(--sd-fg-3, #888)', display: 'flex', alignItems: 'center', justifyContent: 'center',
491
491
  }}>{p.name?.charAt(0)}</div>
492
492
  )}
493
493
 
494
494
  {/* Name + headline */}
495
495
  <div style={{ flex: 1, minWidth: 0 }}>
496
496
  <div style={{ fontSize: 11, fontWeight: 600, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>{p.name}</div>
497
- <div style={{ fontSize: 8, color: '#666', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>
497
+ <div style={{ fontSize: 8, color: 'var(--sd-fg-4, #666)', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>
498
498
  {p.headline?.substring(0, 45)}
499
499
  </div>
500
500
  </div>
501
501
 
502
502
  {/* Bridge */}
503
503
  {!p.connected && p.bridgeName && (
504
- <span style={{ fontSize: 8, color: '#FF6B35', flexShrink: 0, maxWidth: 55, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>
504
+ <span style={{ fontSize: 8, color: 'var(--sd-orange, #FF6B35)', flexShrink: 0, maxWidth: 55, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>
505
505
  via {p.bridgeName.split(' ')[0]}
506
506
  </span>
507
507
  )}
@@ -509,10 +509,10 @@ function PathPersonRow({ p, level, companyPeople, d1Urls, selectedCompany }) {
509
509
  {/* XP + Likelihood */}
510
510
  {!p.connected && (
511
511
  <div style={{ display: 'flex', alignItems: 'center', gap: 6, flexShrink: 0 }}>
512
- <span style={{ fontSize: 8, fontWeight: 700, color: '#FF6B35' }}>+{p.xp}</span>
512
+ <span style={{ fontSize: 8, fontWeight: 700, color: 'var(--sd-orange, #FF6B35)' }}>+{p.xp}</span>
513
513
  <div style={{
514
514
  fontSize: 9, fontWeight: 700, minWidth: 30, textAlign: 'right',
515
- color: p.likelihood >= 60 ? '#00ff88' : p.likelihood >= 30 ? '#FFD700' : '#ff5050',
515
+ color: p.likelihood >= 60 ? 'var(--sd-green, #00ff88)' : p.likelihood >= 30 ? 'var(--sd-gold, #FFD700)' : 'var(--sd-red, #ff5050)',
516
516
  }}>{p.likelihood}%</div>
517
517
  </div>
518
518
  )}
@@ -531,11 +531,11 @@ function PathPersonRow({ p, level, companyPeople, d1Urls, selectedCompany }) {
531
531
  {expanded && (
532
532
  <div style={{
533
533
  padding: '8px 12px 10px 44px',
534
- background: 'rgba(255,255,255,0.02)',
535
- borderTop: '1px solid rgba(255,255,255,0.04)',
534
+ background: 'rgba(var(--sd-ink, 255, 255, 255), 0.02)',
535
+ borderTop: '1px solid rgba(var(--sd-ink, 255, 255, 255), 0.04)',
536
536
  }}>
537
537
  {/* Full role */}
538
- <div style={{ fontSize: 11, color: '#aaa', marginBottom: 8 }}>
538
+ <div style={{ fontSize: 11, color: 'var(--sd-fg-3, #aaa)', marginBottom: 8 }}>
539
539
  {p.headline || 'No headline available'}
540
540
  </div>
541
541
 
@@ -544,7 +544,7 @@ function PathPersonRow({ p, level, companyPeople, d1Urls, selectedCompany }) {
544
544
  <div style={{
545
545
  display: 'inline-block', padding: '2px 8px', borderRadius: 4, fontSize: 9, fontWeight: 600,
546
546
  background: p.seniority.level >= 5 ? 'rgba(255,215,0,0.1)' : p.seniority.level >= 3 ? 'rgba(155,89,182,0.1)' : 'rgba(52,152,219,0.1)',
547
- color: p.seniority.level >= 5 ? '#FFD700' : p.seniority.level >= 3 ? '#9B59B6' : '#3498DB',
547
+ color: p.seniority.level >= 5 ? 'var(--sd-gold, #FFD700)' : p.seniority.level >= 3 ? 'var(--sd-purple, #9B59B6)' : 'var(--sd-blue, #3498DB)',
548
548
  border: `1px solid ${p.seniority.level >= 5 ? 'rgba(255,215,0,0.2)' : p.seniority.level >= 3 ? 'rgba(155,89,182,0.2)' : 'rgba(52,152,219,0.2)'}`,
549
549
  }}>
550
550
  {p.seniority.label} ยท Level {p.seniority.level}
@@ -552,7 +552,7 @@ function PathPersonRow({ p, level, companyPeople, d1Urls, selectedCompany }) {
552
552
  {!p.connected && (
553
553
  <div style={{
554
554
  display: 'inline-block', padding: '2px 8px', borderRadius: 4, fontSize: 9, fontWeight: 700,
555
- background: 'rgba(255,107,53,0.1)', color: '#FF6B35',
555
+ background: 'rgba(255,107,53,0.1)', color: 'var(--sd-orange, #FF6B35)',
556
556
  border: '1px solid rgba(255,107,53,0.2)',
557
557
  }}>
558
558
  +{p.xp} XP
@@ -563,11 +563,11 @@ function PathPersonRow({ p, level, companyPeople, d1Urls, selectedCompany }) {
563
563
  {/* Strategic insights */}
564
564
  {!p.connected && unlockInsights.length > 0 && (
565
565
  <div style={{ marginTop: 4 }}>
566
- <div style={{ fontSize: 9, fontWeight: 700, color: '#888', letterSpacing: 0.5, marginBottom: 4 }}>
566
+ <div style={{ fontSize: 9, fontWeight: 700, color: 'var(--sd-fg-3, #888)', letterSpacing: 0.5, marginBottom: 4 }}>
567
567
  STRATEGIC VALUE
568
568
  </div>
569
569
  {unlockInsights.map((ins, idx) => (
570
- <div key={idx} style={{ display: 'flex', gap: 6, alignItems: 'flex-start', padding: '2px 0', fontSize: 10, color: '#bbb' }}>
570
+ <div key={idx} style={{ display: 'flex', gap: 6, alignItems: 'flex-start', padding: '2px 0', fontSize: 10, color: 'var(--sd-fg-2, #bbb)' }}>
571
571
  <span style={{ fontSize: 11, lineHeight: 1 }}>{ins.icon}</span>
572
572
  <span style={{ color: ins.color }}>{ins.text}</span>
573
573
  </div>
@@ -577,8 +577,8 @@ function PathPersonRow({ p, level, companyPeople, d1Urls, selectedCompany }) {
577
577
 
578
578
  {/* Connected state */}
579
579
  {p.connected && (
580
- <div style={{ fontSize: 10, color: '#00ff88', fontWeight: 600 }}>
581
- โœ“ Already connected โ€” contributes as mutual for others at {selectedCompany?.name}
580
+ <div style={{ fontSize: 10, color: 'var(--sd-green, #00ff88)', fontWeight: 600 }}>
581
+ โœ“ Already connected: contributes as mutual for others at {selectedCompany?.name}
582
582
  </div>
583
583
  )}
584
584
  </div>