six-degrees 0.6.0 → 0.8.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 (609) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-path-routes-manifest.json +4 -0
  3. package/.next/standalone/.next/build-manifest.json +3 -3
  4. package/.next/standalone/.next/prerender-manifest.json +42 -14
  5. package/.next/standalone/.next/routes-manifest.json +24 -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 +3 -3
  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 +5 -3
  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/insights/page/app-paths-manifest.json +3 -0
  115. package/.next/standalone/.next/server/app/insights/page/build-manifest.json +20 -0
  116. package/.next/standalone/.next/server/app/insights/page/next-font-manifest.json +11 -0
  117. package/.next/standalone/.next/server/app/insights/page/react-loadable-manifest.json +1 -0
  118. package/.next/standalone/.next/server/app/insights/page/server-reference-manifest.json +4 -0
  119. package/.next/standalone/.next/server/app/insights/page.js +13 -0
  120. package/.next/standalone/.next/server/app/insights/page.js.map +5 -0
  121. package/.next/standalone/.next/server/app/insights/page.js.nft.json +1 -0
  122. package/.next/standalone/.next/server/app/insights/page_client-reference-manifest.js +3 -0
  123. package/.next/standalone/.next/server/app/insights.html +1 -0
  124. package/.next/standalone/.next/server/app/insights.meta +26 -0
  125. package/.next/standalone/.next/server/app/insights.rsc +35 -0
  126. package/.next/standalone/.next/server/app/insights.segments/_full.segment.rsc +35 -0
  127. package/.next/standalone/.next/server/app/insights.segments/_tree.segment.rsc +4 -0
  128. package/.next/standalone/.next/server/app/insights.segments/insights/__PAGE__.segment.rsc +33 -0
  129. package/.next/standalone/.next/server/app/launch/page.js +1 -1
  130. package/.next/standalone/.next/server/app/launch/page.js.nft.json +1 -1
  131. package/.next/standalone/.next/server/app/launch/page_client-reference-manifest.js +1 -1
  132. package/.next/standalone/.next/server/app/launch.html +2 -2
  133. package/.next/standalone/.next/server/app/launch.rsc +32 -24
  134. package/.next/standalone/.next/server/app/launch.segments/_full.segment.rsc +32 -24
  135. package/.next/standalone/.next/server/app/launch.segments/_tree.segment.rsc +2 -2
  136. package/.next/standalone/.next/server/app/launch.segments/launch/__PAGE__.segment.rsc +23 -18
  137. package/.next/standalone/.next/server/app/page.js +1 -1
  138. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  139. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  140. package/.next/standalone/.next/server/app/paths/page.js +1 -1
  141. package/.next/standalone/.next/server/app/paths/page.js.nft.json +1 -1
  142. package/.next/standalone/.next/server/app/paths/page_client-reference-manifest.js +1 -1
  143. package/.next/standalone/.next/server/app/paths.html +1 -1
  144. package/.next/standalone/.next/server/app/paths.rsc +32 -24
  145. package/.next/standalone/.next/server/app/paths.segments/_full.segment.rsc +32 -24
  146. package/.next/standalone/.next/server/app/paths.segments/_tree.segment.rsc +2 -2
  147. package/.next/standalone/.next/server/app/paths.segments/paths/__PAGE__.segment.rsc +21 -18
  148. package/.next/standalone/.next/server/app/profile/page.js +1 -1
  149. package/.next/standalone/.next/server/app/profile/page.js.nft.json +1 -1
  150. package/.next/standalone/.next/server/app/profile/page_client-reference-manifest.js +1 -1
  151. package/.next/standalone/.next/server/app/profile.html +1 -1
  152. package/.next/standalone/.next/server/app/profile.rsc +32 -24
  153. package/.next/standalone/.next/server/app/profile.segments/_full.segment.rsc +32 -24
  154. package/.next/standalone/.next/server/app/profile.segments/_tree.segment.rsc +2 -2
  155. package/.next/standalone/.next/server/app/profile.segments/profile/__PAGE__.segment.rsc +23 -18
  156. package/.next/standalone/.next/server/app/queue/page.js +1 -1
  157. package/.next/standalone/.next/server/app/queue/page.js.nft.json +1 -1
  158. package/.next/standalone/.next/server/app/queue/page_client-reference-manifest.js +1 -1
  159. package/.next/standalone/.next/server/app/queue.html +1 -1
  160. package/.next/standalone/.next/server/app/queue.rsc +32 -24
  161. package/.next/standalone/.next/server/app/queue.segments/_full.segment.rsc +32 -24
  162. package/.next/standalone/.next/server/app/queue.segments/_tree.segment.rsc +2 -2
  163. package/.next/standalone/.next/server/app/queue.segments/queue/__PAGE__.segment.rsc +21 -18
  164. package/.next/standalone/.next/server/app/scores/page.js +1 -1
  165. package/.next/standalone/.next/server/app/scores/page.js.nft.json +1 -1
  166. package/.next/standalone/.next/server/app/scores/page_client-reference-manifest.js +1 -1
  167. package/.next/standalone/.next/server/app/scores.html +1 -1
  168. package/.next/standalone/.next/server/app/scores.rsc +32 -24
  169. package/.next/standalone/.next/server/app/scores.segments/_full.segment.rsc +32 -24
  170. package/.next/standalone/.next/server/app/scores.segments/_tree.segment.rsc +2 -2
  171. package/.next/standalone/.next/server/app/scores.segments/scores/__PAGE__.segment.rsc +23 -18
  172. package/.next/standalone/.next/server/app/settings/page.js +1 -1
  173. package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
  174. package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  175. package/.next/standalone/.next/server/app/settings.html +1 -1
  176. package/.next/standalone/.next/server/app/settings.rsc +32 -24
  177. package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +32 -24
  178. package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  179. package/.next/standalone/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +20 -18
  180. package/.next/standalone/.next/server/app/setup/page.js +1 -1
  181. package/.next/standalone/.next/server/app/setup/page.js.nft.json +1 -1
  182. package/.next/standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  183. package/.next/standalone/.next/server/app/setup.html +1 -1
  184. package/.next/standalone/.next/server/app/setup.rsc +32 -24
  185. package/.next/standalone/.next/server/app/setup.segments/_full.segment.rsc +32 -24
  186. package/.next/standalone/.next/server/app/setup.segments/_tree.segment.rsc +2 -2
  187. package/.next/standalone/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +21 -18
  188. package/.next/standalone/.next/server/app/social/page.js +1 -1
  189. package/.next/standalone/.next/server/app/social/page.js.nft.json +1 -1
  190. package/.next/standalone/.next/server/app/social/page_client-reference-manifest.js +1 -1
  191. package/.next/standalone/.next/server/app/social.html +1 -1
  192. package/.next/standalone/.next/server/app/social.rsc +32 -24
  193. package/.next/standalone/.next/server/app/social.segments/_full.segment.rsc +32 -24
  194. package/.next/standalone/.next/server/app/social.segments/_tree.segment.rsc +2 -2
  195. package/.next/standalone/.next/server/app/social.segments/social/__PAGE__.segment.rsc +23 -18
  196. package/.next/standalone/.next/server/app-paths-manifest.json +4 -0
  197. package/.next/standalone/.next/server/chunks/[root-of-the-server]__00la_y0._.js +1 -1
  198. package/.next/standalone/.next/server/chunks/[root-of-the-server]__05_3-22._.js +1 -1
  199. package/.next/standalone/.next/server/chunks/[root-of-the-server]__066rab1._.js +7 -0
  200. package/.next/standalone/.next/server/chunks/[root-of-the-server]__07t47cm._.js +1 -1
  201. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0cj5jqc._.js +1 -1
  202. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0e0fei3._.js +1 -1
  203. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0fooke1._.js +7 -0
  204. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ljnyho._.js +1 -1
  205. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0o5-tcg._.js +1 -1
  206. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0qrnous._.js +1 -1
  207. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__15wc9e-._.js → [root-of-the-server]__0r-0t-9._.js} +2 -2
  208. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ra6xyg._.js +15 -0
  209. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__20rwfdw._.js → [root-of-the-server]__0rcpjad._.js} +6 -3
  210. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0t3v1a1._.js +1 -1
  211. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0t6y79e._.js +7 -0
  212. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0wmexuc._.js +1 -1
  213. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0x29muh._.js +7 -0
  214. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0xu34sz._.js +1 -1
  215. package/.next/standalone/.next/server/chunks/[root-of-the-server]__133knx1._.js +1 -1
  216. package/.next/standalone/.next/server/chunks/[root-of-the-server]__15-17hl._.js +1 -1
  217. package/.next/standalone/.next/server/chunks/[root-of-the-server]__19b7mig._.js +1 -1
  218. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1a_6x37._.js +8 -0
  219. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1an_8pa._.js +7 -0
  220. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1bbcwub._.js +1 -1
  221. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1ducpz2._.js +3 -0
  222. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1eris29._.js +1 -1
  223. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1gjo_cq._.js +1 -1
  224. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1qcm08_._.js +1 -1
  225. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1tir0vc._.js +1 -1
  226. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1w25q0m._.js +1 -1
  227. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1xhyinn._.js +3 -0
  228. package/.next/standalone/.next/server/chunks/_072jl0y._.js +1 -1
  229. package/.next/standalone/.next/server/chunks/_0lw8_i0._.js +1 -1
  230. package/.next/standalone/.next/server/chunks/_0sqqpzb._.js +3 -0
  231. package/.next/standalone/.next/server/chunks/_1_fynia._.js +7 -7
  232. package/.next/standalone/.next/server/chunks/_1fn30_l._.js +1 -1
  233. package/.next/standalone/.next/server/chunks/_1itd1o_._.js +1 -1
  234. package/.next/standalone/.next/server/chunks/_1iwkh8t._.js +1 -1
  235. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_data_backup_route_actions_0zoj04p.js +3 -0
  236. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_data_csv_route_actions_0l6m7lg.js +3 -0
  237. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_data_restore_route_actions_0-b05bv.js +3 -0
  238. package/.next/standalone/.next/server/chunks/lib_02iz_9q._.js +4 -0
  239. package/.next/standalone/.next/server/chunks/lib_05agvk3._.js +4 -0
  240. package/.next/standalone/.next/server/chunks/lib_0v84u66._.js +4 -0
  241. package/.next/standalone/.next/server/chunks/lib_db-client_0_dch35.js +174 -0
  242. package/.next/standalone/.next/server/chunks/lib_linkedin-export_12imqxg.js +1 -1
  243. package/.next/standalone/.next/server/chunks/lib_rpc_00nndai.js +3 -0
  244. package/.next/standalone/.next/server/chunks/lib_rpc_03ibb-x.js +3 -0
  245. package/.next/standalone/.next/server/chunks/lib_rpc_03ri3ji.js +3 -0
  246. package/.next/standalone/.next/server/chunks/lib_rpc_078ce48.js +3 -0
  247. package/.next/standalone/.next/server/chunks/lib_rpc_0a69mgr.js +3 -0
  248. package/.next/standalone/.next/server/chunks/lib_rpc_0c9d9ti.js +7 -0
  249. package/.next/standalone/.next/server/chunks/lib_rpc_0cej3t8.js +3 -0
  250. package/.next/standalone/.next/server/chunks/lib_rpc_0cmh4g6.js +3 -0
  251. package/.next/standalone/.next/server/chunks/lib_rpc_0nx2_pc.js +3 -0
  252. package/.next/standalone/.next/server/chunks/lib_rpc_0r79-w1.js +3 -0
  253. package/.next/standalone/.next/server/chunks/lib_rpc_0t552z6.js +3 -0
  254. package/.next/standalone/.next/server/chunks/lib_rpc_0yx8ynd.js +3 -0
  255. package/.next/standalone/.next/server/chunks/lib_rpc_12p-o9-.js +3 -0
  256. package/.next/standalone/.next/server/chunks/lib_rpc_1466dnb.js +3 -0
  257. package/.next/standalone/.next/server/chunks/lib_rpc_1sryxv6.js +3 -0
  258. package/.next/standalone/.next/server/chunks/lib_rpc_1trn-x5.js +3 -0
  259. package/.next/standalone/.next/server/chunks/lib_rpc_1ygu_mv.js +3 -0
  260. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0egamyq._.js +3 -0
  261. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0qd8pzm._.js +3 -0
  262. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0qdeuyo._.js → [root-of-the-server]__1-012q1._.js} +2 -2
  263. package/.next/standalone/.next/server/chunks/ssr/_04am_h8._.js +3 -0
  264. package/.next/standalone/.next/server/chunks/ssr/_06rgzfh._.js +3 -0
  265. package/.next/standalone/.next/server/chunks/ssr/_07zb7lu._.js +3 -0
  266. package/.next/standalone/.next/server/chunks/ssr/_0_79idq._.js +3 -0
  267. package/.next/standalone/.next/server/chunks/ssr/_0gds903._.js +3 -0
  268. package/.next/standalone/.next/server/chunks/ssr/_0hb-dhy._.js +3 -0
  269. package/.next/standalone/.next/server/chunks/ssr/_0klqt9z._.js +3 -0
  270. package/.next/standalone/.next/server/chunks/ssr/_14jak5s._.js +7 -0
  271. package/.next/standalone/.next/server/chunks/ssr/_14nxd3q._.js +3 -0
  272. package/.next/standalone/.next/server/chunks/ssr/_1cj2yog._.js +3 -0
  273. package/.next/standalone/.next/server/chunks/ssr/_1fm1ih_._.js +2 -2
  274. package/.next/standalone/.next/server/chunks/ssr/_1hdqw0-._.js +7 -0
  275. package/.next/standalone/.next/server/chunks/ssr/_1k2nmbw._.js +2 -2
  276. package/.next/standalone/.next/server/chunks/ssr/_1r62six._.js +7 -0
  277. package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_insights_page_actions_0-0tf75.js +3 -0
  278. package/.next/standalone/.next/server/chunks/ssr/app_141w189._.js +1 -1
  279. package/.next/standalone/.next/server/chunks/ssr/app_components_0uuff77._.js +25 -2
  280. package/.next/standalone/.next/server/chunks/ssr/app_components_1j3q-h5._.js +25 -2
  281. package/.next/standalone/.next/server/chunks/ssr/app_components_CompanyScores_1g0mytz.js +1 -1
  282. package/.next/standalone/.next/server/chunks/ssr/app_components_settings_SectorPicker_1c-29qw.js +1 -1
  283. package/.next/standalone/.next/server/chunks/ssr/app_components_ui_0pdmz2z.js +3 -0
  284. package/.next/standalone/.next/server/chunks/ssr/app_import_page_1fmu6_l.js +1 -1
  285. package/.next/standalone/.next/server/chunks/ssr/app_insights_page_1d_chja.js +3 -0
  286. package/.next/standalone/.next/server/chunks/ssr/app_launch_page_19t0dyd.js +1 -1
  287. package/.next/standalone/.next/server/chunks/ssr/app_page_1fazqbf.js +26 -14
  288. package/.next/standalone/.next/server/chunks/ssr/app_paths_page_1ol90m7.js +2 -2
  289. package/.next/standalone/.next/server/chunks/ssr/app_profile_page_0u3-l5y.js +1 -1
  290. package/.next/standalone/.next/server/chunks/ssr/app_queue_page_0c6znd6.js +11 -11
  291. package/.next/standalone/.next/server/chunks/ssr/app_settings_page_1f8mjj_.js +1 -1
  292. package/.next/standalone/.next/server/chunks/ssr/app_setup_page_1-282zx.js +12 -13
  293. package/.next/standalone/.next/server/chunks/ssr/app_social_page_0h7zxda.js +1 -1
  294. package/.next/standalone/.next/server/chunks/ssr/{lib_1c4ieuw._.js → lib_csv_1ttiu_h.js} +2 -2
  295. package/.next/standalone/.next/server/chunks/ssr/lib_galaxy-lab_108_lu-.js +1 -1
  296. package/.next/standalone/.next/server/chunks/ssr/lib_separation_1305zsx.js +3 -0
  297. package/.next/standalone/.next/server/edge/chunks/[root-of-the-server]__0pco7a6._.js +1 -1
  298. package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
  299. package/.next/standalone/.next/server/middleware-manifest.json +5 -5
  300. package/.next/standalone/.next/server/next-font-manifest.js +1 -1
  301. package/.next/standalone/.next/server/next-font-manifest.json +4 -0
  302. package/.next/standalone/.next/server/pages/404.html +1 -1
  303. package/.next/standalone/.next/server/pages/500.html +1 -1
  304. package/.next/standalone/.next/server/prefetch-hints.json +14 -0
  305. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  306. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  307. package/.next/standalone/.next/static/chunks/02wnf8dkxegxg.js +34 -0
  308. package/.next/standalone/.next/static/chunks/03-_esd2x_yk6.js +1 -0
  309. package/.next/standalone/.next/static/chunks/03-demj2iy-0p.js +44 -0
  310. package/.next/standalone/.next/static/chunks/0838_s6w-i_ik.js +1 -0
  311. package/.next/standalone/.next/static/chunks/0_1r-3csplxnj.js +1 -0
  312. package/.next/standalone/.next/static/chunks/0ka4prpk3w9wn.js +34 -0
  313. package/.next/standalone/.next/static/chunks/0kscsqnvfq3-r.js +1 -0
  314. package/.next/standalone/.next/static/chunks/0s_xxwp7z88vv.js +1 -0
  315. package/.next/standalone/.next/static/chunks/1-nnl8amfm4yh.js +57 -0
  316. package/.next/standalone/.next/static/chunks/112mv-com-mqa.js +21 -0
  317. package/.next/standalone/.next/static/chunks/1bkt_hhjzvbh8.js +1 -0
  318. package/.next/standalone/.next/static/chunks/1cmphb3kh2ers.css +3 -0
  319. package/.next/standalone/.next/static/chunks/1d8yv3k_atka7.js +1 -0
  320. package/.next/standalone/.next/static/chunks/{0ws7zy0w57ufi.js → 1eyajb9ntzlrl.js} +1 -1
  321. package/.next/standalone/.next/static/chunks/1z9lb-dbcg4aa.js +1 -0
  322. package/.next/standalone/.next/static/chunks/23hc51oa4vkhc.js +5 -0
  323. package/.next/standalone/.next/static/chunks/27n8k9wxlz5-7.js +1 -0
  324. package/.next/standalone/.next/static/chunks/2q9i7pcxcnph1.js +7 -0
  325. package/.next/standalone/.next/static/chunks/2w-y83mjlpnse.js +1 -0
  326. package/.next/standalone/.next/static/chunks/2ws1xf293j-tm.js +5 -0
  327. package/.next/standalone/.next/static/chunks/2z1-q0_vunbql.js +2 -0
  328. package/.next/standalone/.next/static/chunks/34g73qhayuevu.js +1 -0
  329. package/.next/standalone/.next/static/chunks/3cqn-r-y5rrw1.js +5 -0
  330. package/.next/standalone/.next/static/chunks/3opgg1efrx8q6.js +1 -0
  331. package/.next/standalone/.next/static/chunks/3p51fpxxi4d5y.js +34 -0
  332. package/.next/standalone/.next/static/chunks/3y40z6of3r9py.js +1 -0
  333. package/.next/standalone/.next/static/chunks/403dpflln8ah5.js +1 -0
  334. package/.next/standalone/.next/static/chunks/43pg2sursiypz.js +1 -0
  335. package/.next/standalone/CHANGELOG.md +203 -0
  336. package/.next/standalone/README.md +96 -50
  337. package/.next/standalone/SECURITY.md +25 -11
  338. package/.next/standalone/app/api/data/backup/route.js +25 -0
  339. package/.next/standalone/app/api/data/csv/route.js +74 -0
  340. package/.next/standalone/app/api/data/export/route.js +1 -1
  341. package/.next/standalone/app/api/data/restore/route.js +48 -0
  342. package/.next/standalone/app/api/data/reveal/route.js +19 -6
  343. package/.next/standalone/app/api/data/route.js +15 -4
  344. package/.next/standalone/app/api/ingest/route.js +1 -1
  345. package/.next/standalone/app/api/outreach/route.js +13 -73
  346. package/.next/standalone/app/api/queue/route.js +1 -1
  347. package/.next/standalone/app/api/scraper/route.js +217 -36
  348. package/.next/standalone/app/api/social/crm/route.js +2 -1
  349. package/.next/standalone/app/components/AppHeader.js +41 -21
  350. package/.next/standalone/app/components/AppTabs.js +12 -8
  351. package/.next/standalone/app/components/AutoConnect.js +286 -0
  352. package/.next/standalone/app/components/AutoScanButton.js +2 -2
  353. package/.next/standalone/app/components/Avatar.js +1 -1
  354. package/.next/standalone/app/components/ChainView.js +258 -113
  355. package/.next/standalone/app/components/CirclePanel.js +16 -16
  356. package/.next/standalone/app/components/ClusterSpinner.js +64 -0
  357. package/.next/standalone/app/components/CompanyScores.js +20 -20
  358. package/.next/standalone/app/components/EmptyState.js +39 -18
  359. package/.next/standalone/app/components/FieldStep.js +15 -13
  360. package/.next/standalone/app/components/FilterPanel.js +25 -18
  361. package/.next/standalone/app/components/ForceGraph.js +49 -14
  362. package/.next/standalone/app/components/GalaxyLab.js +33 -33
  363. package/.next/standalone/app/components/GridView.js +18 -18
  364. package/.next/standalone/app/components/LegacyScoresCard.js +10 -11
  365. package/.next/standalone/app/components/LinkedInLimits.js +57 -27
  366. package/.next/standalone/app/components/LiquidGlass.js +99 -0
  367. package/.next/standalone/app/components/ListView.js +20 -20
  368. package/.next/standalone/app/components/MapControls.js +5 -5
  369. package/.next/standalone/app/components/MappingProgress.js +16 -16
  370. package/.next/standalone/app/components/NoteDetail.js +13 -13
  371. package/.next/standalone/app/components/OnboardingGate.js +4 -4
  372. package/.next/standalone/app/components/OutlinkQuest.js +56 -35
  373. package/.next/standalone/app/components/PathsAnalyzer.js +37 -36
  374. package/.next/standalone/app/components/PeopleMap.js +21 -21
  375. package/.next/standalone/app/components/RingsView.js +11 -11
  376. package/.next/standalone/app/components/ScanRadar.js +84 -39
  377. package/.next/standalone/app/components/ScanStatusBar.js +40 -21
  378. package/.next/standalone/app/components/ScanTrail.js +21 -8
  379. package/.next/standalone/app/components/SeparationView.js +172 -124
  380. package/.next/standalone/app/components/Sidebar.js +308 -199
  381. package/.next/standalone/app/components/StaleServerBanner.js +4 -4
  382. package/.next/standalone/app/components/TheirCircle.js +26 -26
  383. package/.next/standalone/app/components/ThemeDefs.js +42 -0
  384. package/.next/standalone/app/components/ThemeLoader.js +20 -1
  385. package/.next/standalone/app/components/UpdatePanel.js +22 -22
  386. package/.next/standalone/app/components/UserProvider.js +22 -15
  387. package/.next/standalone/app/components/insights/Boards.js +275 -0
  388. package/.next/standalone/app/components/insights/PeopleView.js +266 -0
  389. package/.next/standalone/app/components/insights/Rail.js +156 -0
  390. package/.next/standalone/app/components/insights/Report.js +382 -0
  391. package/.next/standalone/app/components/insights/parts.js +239 -0
  392. package/.next/standalone/app/components/settings/AppearanceSection.js +47 -24
  393. package/.next/standalone/app/components/settings/DataSection.js +276 -109
  394. package/.next/standalone/app/components/settings/NetworkHealthSection.js +13 -13
  395. package/.next/standalone/app/components/settings/SectorPicker.js +12 -12
  396. package/.next/standalone/app/components/settings/SectorSection.js +13 -14
  397. package/.next/standalone/app/components/settings/TierSection.js +9 -9
  398. package/.next/standalone/app/components/settings/TitleSection.js +11 -11
  399. package/.next/standalone/app/components/settings/UsageSection.js +360 -0
  400. package/.next/standalone/app/components/ui.js +8 -8
  401. package/.next/standalone/app/globals.css +161 -5
  402. package/.next/standalone/app/import/page.js +94 -38
  403. package/.next/standalone/app/insights/page.js +220 -0
  404. package/.next/standalone/app/launch/page.js +5 -5
  405. package/.next/standalone/app/layout.js +6 -2
  406. package/.next/standalone/app/page.js +53 -53
  407. package/.next/standalone/app/paths/page.js +63 -63
  408. package/.next/standalone/app/profile/page.js +58 -58
  409. package/.next/standalone/app/queue/page.js +84 -72
  410. package/.next/standalone/app/scores/page.js +2 -2
  411. package/.next/standalone/app/settings/page.js +16 -13
  412. package/.next/standalone/app/setup/page.js +236 -133
  413. package/.next/standalone/app/social/Crm.js +63 -62
  414. package/.next/standalone/app/social/SocialHub.js +22 -22
  415. package/.next/standalone/app/social/Thread.js +7 -7
  416. package/.next/standalone/app/social/page.js +2 -2
  417. package/.next/standalone/lib/auto-connect.js +145 -0
  418. package/.next/standalone/lib/backups.js +458 -0
  419. package/.next/standalone/lib/chain-layout.js +32 -0
  420. package/.next/standalone/lib/companies.js +1 -1
  421. package/.next/standalone/lib/csv-store.js +131 -0
  422. package/.next/standalone/lib/csv.js +137 -39
  423. package/.next/standalone/lib/data-folder.js +19 -3
  424. package/.next/standalone/lib/data-import.js +5 -2
  425. package/.next/standalone/lib/db-client.js +78 -20
  426. package/.next/standalone/lib/demo.js +5 -4
  427. package/.next/standalone/lib/galaxy-export.js +9 -2
  428. package/.next/standalone/lib/galaxy-lab.js +19 -5
  429. package/.next/standalone/lib/galaxy-layouts.js +43 -0
  430. package/.next/standalone/lib/gate.js +10 -4
  431. package/.next/standalone/lib/in-progress.js +46 -0
  432. package/.next/standalone/lib/ingest.js +1 -1
  433. package/.next/standalone/lib/insights-board.js +613 -0
  434. package/.next/standalone/lib/linkedin-limits.js +240 -14
  435. package/.next/standalone/lib/liquid-glass.js +59 -0
  436. package/.next/standalone/lib/notifications.js +13 -0
  437. package/.next/standalone/lib/requests-client.js +10 -0
  438. package/.next/standalone/lib/requests.js +124 -0
  439. package/.next/standalone/lib/scan-pace.js +11 -0
  440. package/.next/standalone/lib/scan-progress.js +20 -0
  441. package/.next/standalone/lib/scan-risk.js +44 -0
  442. package/.next/standalone/lib/scan-state.js +1 -0
  443. package/.next/standalone/lib/scanner-setup.js +97 -15
  444. package/.next/standalone/lib/scraper-client.js +35 -8
  445. package/.next/standalone/lib/search-risk.js +7 -3
  446. package/.next/standalone/lib/settings-client.js +5 -3
  447. package/.next/standalone/lib/settings.js +13 -0
  448. package/.next/standalone/lib/social-store.js +3 -2
  449. package/.next/standalone/lib/synced-setting.js +46 -0
  450. package/.next/standalone/lib/theme-store.js +42 -10
  451. package/.next/standalone/lib/themes.js +111 -21
  452. package/.next/standalone/lib/usage.js +200 -0
  453. package/.next/standalone/package-lock.json +2 -2
  454. package/.next/standalone/package.json +1 -1
  455. package/.next/standalone/scripts/scrape.py +595 -11
  456. package/.next/static/chunks/02wnf8dkxegxg.js +34 -0
  457. package/.next/static/chunks/03-_esd2x_yk6.js +1 -0
  458. package/.next/static/chunks/03-demj2iy-0p.js +44 -0
  459. package/.next/static/chunks/0838_s6w-i_ik.js +1 -0
  460. package/.next/static/chunks/0_1r-3csplxnj.js +1 -0
  461. package/.next/static/chunks/0ka4prpk3w9wn.js +34 -0
  462. package/.next/static/chunks/0kscsqnvfq3-r.js +1 -0
  463. package/.next/static/chunks/0s_xxwp7z88vv.js +1 -0
  464. package/.next/static/chunks/1-nnl8amfm4yh.js +57 -0
  465. package/.next/static/chunks/112mv-com-mqa.js +21 -0
  466. package/.next/static/chunks/1bkt_hhjzvbh8.js +1 -0
  467. package/.next/static/chunks/1cmphb3kh2ers.css +3 -0
  468. package/.next/static/chunks/1d8yv3k_atka7.js +1 -0
  469. package/.next/static/chunks/{0ws7zy0w57ufi.js → 1eyajb9ntzlrl.js} +1 -1
  470. package/.next/static/chunks/1z9lb-dbcg4aa.js +1 -0
  471. package/.next/static/chunks/23hc51oa4vkhc.js +5 -0
  472. package/.next/static/chunks/27n8k9wxlz5-7.js +1 -0
  473. package/.next/static/chunks/2q9i7pcxcnph1.js +7 -0
  474. package/.next/static/chunks/2w-y83mjlpnse.js +1 -0
  475. package/.next/static/chunks/2ws1xf293j-tm.js +5 -0
  476. package/.next/static/chunks/2z1-q0_vunbql.js +2 -0
  477. package/.next/static/chunks/34g73qhayuevu.js +1 -0
  478. package/.next/static/chunks/3cqn-r-y5rrw1.js +5 -0
  479. package/.next/static/chunks/3opgg1efrx8q6.js +1 -0
  480. package/.next/static/chunks/3p51fpxxi4d5y.js +34 -0
  481. package/.next/static/chunks/3y40z6of3r9py.js +1 -0
  482. package/.next/static/chunks/403dpflln8ah5.js +1 -0
  483. package/.next/static/chunks/43pg2sursiypz.js +1 -0
  484. package/CHANGELOG.md +203 -0
  485. package/README.md +96 -50
  486. package/SECURITY.md +25 -11
  487. package/lib/auto-connect.js +145 -0
  488. package/lib/backups.js +458 -0
  489. package/lib/chain-layout.js +32 -0
  490. package/lib/companies.js +1 -1
  491. package/lib/csv-store.js +131 -0
  492. package/lib/csv.js +137 -39
  493. package/lib/data-folder.js +19 -3
  494. package/lib/data-import.js +5 -2
  495. package/lib/db-client.js +78 -20
  496. package/lib/demo.js +5 -4
  497. package/lib/galaxy-export.js +9 -2
  498. package/lib/galaxy-lab.js +19 -5
  499. package/lib/galaxy-layouts.js +43 -0
  500. package/lib/gate.js +10 -4
  501. package/lib/in-progress.js +46 -0
  502. package/lib/ingest.js +1 -1
  503. package/lib/insights-board.js +613 -0
  504. package/lib/linkedin-limits.js +240 -14
  505. package/lib/liquid-glass.js +59 -0
  506. package/lib/notifications.js +13 -0
  507. package/lib/requests-client.js +10 -0
  508. package/lib/requests.js +124 -0
  509. package/lib/scan-pace.js +11 -0
  510. package/lib/scan-progress.js +20 -0
  511. package/lib/scan-risk.js +44 -0
  512. package/lib/scan-state.js +1 -0
  513. package/lib/scanner-setup.js +97 -15
  514. package/lib/scraper-client.js +35 -8
  515. package/lib/search-risk.js +7 -3
  516. package/lib/settings-client.js +5 -3
  517. package/lib/settings.js +13 -0
  518. package/lib/social-store.js +3 -2
  519. package/lib/synced-setting.js +46 -0
  520. package/lib/theme-store.js +42 -10
  521. package/lib/themes.js +111 -21
  522. package/lib/usage.js +200 -0
  523. package/package.json +1 -1
  524. package/scripts/scrape.py +595 -11
  525. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0-rnla2._.js +0 -3
  526. package/.next/standalone/.next/server/chunks/[root-of-the-server]__13dx4sd._.js +0 -8
  527. package/.next/standalone/.next/server/chunks/[root-of-the-server]__14ou7j5._.js +0 -3
  528. package/.next/standalone/.next/server/chunks/[root-of-the-server]__16iu0hv._.js +0 -3
  529. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1kbl21f._.js +0 -3
  530. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1rphsdk._.js +0 -3
  531. package/.next/standalone/.next/server/chunks/_02twlca._.js +0 -10
  532. package/.next/standalone/.next/server/chunks/lib_0851sk0._.js +0 -8
  533. package/.next/standalone/.next/server/chunks/lib_1q7p2ro._.js +0 -8
  534. package/.next/standalone/.next/server/chunks/lib_1r6l86l._.js +0 -8
  535. package/.next/standalone/.next/server/chunks/lib_db-client_15le7cw.js +0 -174
  536. package/.next/standalone/.next/server/chunks/lib_rpc_04s8mzr.js +0 -3
  537. package/.next/standalone/.next/server/chunks/lib_rpc_053z7as.js +0 -3
  538. package/.next/standalone/.next/server/chunks/lib_rpc_0b_-2te.js +0 -3
  539. package/.next/standalone/.next/server/chunks/lib_rpc_0dhbxdm.js +0 -3
  540. package/.next/standalone/.next/server/chunks/lib_rpc_0dxlk31.js +0 -3
  541. package/.next/standalone/.next/server/chunks/lib_rpc_0f8b-qc.js +0 -3
  542. package/.next/standalone/.next/server/chunks/lib_rpc_0pzie7_.js +0 -3
  543. package/.next/standalone/.next/server/chunks/lib_rpc_0r76fq_.js +0 -3
  544. package/.next/standalone/.next/server/chunks/lib_rpc_0ut7pjp.js +0 -3
  545. package/.next/standalone/.next/server/chunks/lib_rpc_15zyqaz.js +0 -3
  546. package/.next/standalone/.next/server/chunks/lib_rpc_18zpjtq.js +0 -3
  547. package/.next/standalone/.next/server/chunks/lib_rpc_1a8xkiz.js +0 -3
  548. package/.next/standalone/.next/server/chunks/lib_rpc_1e_55xo.js +0 -3
  549. package/.next/standalone/.next/server/chunks/lib_rpc_1oxfd1_.js +0 -3
  550. package/.next/standalone/.next/server/chunks/lib_rpc_1s0lod0.js +0 -3
  551. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__08oxiqh._.js +0 -3
  552. package/.next/standalone/.next/server/chunks/ssr/_03l7vge._.js +0 -3
  553. package/.next/standalone/.next/server/chunks/ssr/_08g31gm._.js +0 -3
  554. package/.next/standalone/.next/server/chunks/ssr/_0gk_ofx._.js +0 -3
  555. package/.next/standalone/.next/server/chunks/ssr/_0nwsf93._.js +0 -3
  556. package/.next/standalone/.next/server/chunks/ssr/_0vho1lb._.js +0 -3
  557. package/.next/standalone/.next/server/chunks/ssr/_1-658fq._.js +0 -3
  558. package/.next/standalone/.next/server/chunks/ssr/_1bc46kz._.js +0 -3
  559. package/.next/standalone/.next/server/chunks/ssr/_1f_n00p._.js +0 -3
  560. package/.next/standalone/.next/server/chunks/ssr/_2105jz8._.js +0 -3
  561. package/.next/standalone/.next/server/chunks/ssr/app_components_0t908t-._.js +0 -3
  562. package/.next/standalone/.next/static/chunks/02pq76u7y4v9-.js +0 -22
  563. package/.next/standalone/.next/static/chunks/0cmq0exd4d0h9.js +0 -1
  564. package/.next/standalone/.next/static/chunks/0i02yxppzds1o.js +0 -1
  565. package/.next/standalone/.next/static/chunks/0m_p4k-q2qh--.js +0 -1
  566. package/.next/standalone/.next/static/chunks/0oyslj62jkubd.js +0 -1
  567. package/.next/standalone/.next/static/chunks/0vo-l8hxneba6.css +0 -3
  568. package/.next/standalone/.next/static/chunks/0yh8z2tbrc5i_.js +0 -1
  569. package/.next/standalone/.next/static/chunks/17-rhp8sg4m1b.js +0 -44
  570. package/.next/standalone/.next/static/chunks/172e10mi-tpo_.js +0 -34
  571. package/.next/standalone/.next/static/chunks/1ei5vbe2uw6fl.js +0 -1
  572. package/.next/standalone/.next/static/chunks/1f7_pl_wq7lh3.js +0 -11
  573. package/.next/standalone/.next/static/chunks/1jzbe7zdx9vbj.js +0 -2
  574. package/.next/standalone/.next/static/chunks/1m3017gp790pw.js +0 -45
  575. package/.next/standalone/.next/static/chunks/1t20e8u0st7ep.js +0 -1
  576. package/.next/standalone/.next/static/chunks/2-ch9rm27eril.js +0 -11
  577. package/.next/standalone/.next/static/chunks/2ldv-v3s9yaif.js +0 -1
  578. package/.next/standalone/.next/static/chunks/3bp284gjf7dyq.js +0 -1
  579. package/.next/standalone/.next/static/chunks/3k1f6clbn3gj3.js +0 -7
  580. package/.next/standalone/.next/static/chunks/3l4t8je6iguzc.js +0 -1
  581. package/.next/standalone/.next/static/chunks/3tplzuc9jk-tl.js +0 -1
  582. package/.next/standalone/.next/static/chunks/42m0bqr8pbovz.js +0 -11
  583. package/.next/static/chunks/02pq76u7y4v9-.js +0 -22
  584. package/.next/static/chunks/0cmq0exd4d0h9.js +0 -1
  585. package/.next/static/chunks/0i02yxppzds1o.js +0 -1
  586. package/.next/static/chunks/0m_p4k-q2qh--.js +0 -1
  587. package/.next/static/chunks/0oyslj62jkubd.js +0 -1
  588. package/.next/static/chunks/0vo-l8hxneba6.css +0 -3
  589. package/.next/static/chunks/0yh8z2tbrc5i_.js +0 -1
  590. package/.next/static/chunks/17-rhp8sg4m1b.js +0 -44
  591. package/.next/static/chunks/172e10mi-tpo_.js +0 -34
  592. package/.next/static/chunks/1ei5vbe2uw6fl.js +0 -1
  593. package/.next/static/chunks/1f7_pl_wq7lh3.js +0 -11
  594. package/.next/static/chunks/1jzbe7zdx9vbj.js +0 -2
  595. package/.next/static/chunks/1m3017gp790pw.js +0 -45
  596. package/.next/static/chunks/1t20e8u0st7ep.js +0 -1
  597. package/.next/static/chunks/2-ch9rm27eril.js +0 -11
  598. package/.next/static/chunks/2ldv-v3s9yaif.js +0 -1
  599. package/.next/static/chunks/3bp284gjf7dyq.js +0 -1
  600. package/.next/static/chunks/3k1f6clbn3gj3.js +0 -7
  601. package/.next/static/chunks/3l4t8je6iguzc.js +0 -1
  602. package/.next/static/chunks/3tplzuc9jk-tl.js +0 -1
  603. package/.next/static/chunks/42m0bqr8pbovz.js +0 -11
  604. /package/.next/standalone/.next/static/{dQUvvVSXqbkEFC3-CNcwT → 3NCyJyAPDCEYsYTwF1Ieu}/_buildManifest.js +0 -0
  605. /package/.next/standalone/.next/static/{dQUvvVSXqbkEFC3-CNcwT → 3NCyJyAPDCEYsYTwF1Ieu}/_clientMiddlewareManifest.js +0 -0
  606. /package/.next/standalone/.next/static/{dQUvvVSXqbkEFC3-CNcwT → 3NCyJyAPDCEYsYTwF1Ieu}/_ssgManifest.js +0 -0
  607. /package/.next/static/{dQUvvVSXqbkEFC3-CNcwT → 3NCyJyAPDCEYsYTwF1Ieu}/_buildManifest.js +0 -0
  608. /package/.next/static/{dQUvvVSXqbkEFC3-CNcwT → 3NCyJyAPDCEYsYTwF1Ieu}/_clientMiddlewareManifest.js +0 -0
  609. /package/.next/static/{dQUvvVSXqbkEFC3-CNcwT → 3NCyJyAPDCEYsYTwF1Ieu}/_ssgManifest.js +0 -0
@@ -0,0 +1,360 @@
1
+ 'use client';
2
+
3
+ // Settings → LinkedIn usage: how close this LinkedIn account is to the line,
4
+ // in one look, the way Claude's usage page shows a plan's limits (neo's
5
+ // handoff, 2026-10-03; Blake's 1.0 list, item 3). Until now the only view of
6
+ // it was the budget box folded away in the Scan page's "Fine-tune the
7
+ // scanner", and an account was restricted once after 373 searches in 24 hours
8
+ // (TRAPS §16). The notch and that box link here.
9
+ //
10
+ // Every number is counted from the scanner's own record on this computer
11
+ // (GET /api/scraper?usage, lib/linkedin-limits.js linkedinUsage) or is a rule
12
+ // that says where it came from (lib/usage.js). LinkedIn publishes no limits and
13
+ // shows no count of its own, so nothing here claims to be LinkedIn's number.
14
+ // The page only reads; its one button is the Scan page's own "Back to 50 a
15
+ // day, 250 a month".
16
+
17
+ import { useCallback, useEffect, useState } from 'react';
18
+ import Link from 'next/link';
19
+ import { Section, Body, LINE } from '../ui';
20
+ import {
21
+ AUTO, PEOPLE_PER_SEARCH, DANGER_AT, REPORTED_MONTH, LEVELS, usageLevel, warningParts, estimate,
22
+ barMax, pacificText, whenText, untilText, agoText, hoursText, INVITE_CAPS, REPORTED_WEEKLY_INVITES,
23
+ } from '../../../lib/usage';
24
+ import { RESTRICTED_AT, RISKY_DAILY, SAFE_LIMITS } from '../../../lib/search-risk';
25
+ import { paceOf, searchesPerHour } from '../../../lib/scan-pace';
26
+
27
+ // Looked at again while the page is open, as the Scan page's own checks are.
28
+ const REFRESH_MS = 30 * 1000;
29
+
30
+ const count = (n) => (Number.isFinite(n) ? n.toLocaleString('en-US') : '?');
31
+ const plural = (n, one, many = `${one}s`) => `${count(n)} ${n === 1 ? one : many}`;
32
+ const link = { color: 'var(--sd-blue, #3498DB)', textDecoration: 'none', fontWeight: 600 };
33
+ const small = { fontSize: 12, color: 'var(--sd-fg-4, #778)', lineHeight: 1.6, marginTop: 4 };
34
+
35
+ function Pill({ level }) {
36
+ const l = LEVELS[level] || LEVELS.unknown;
37
+ return (
38
+ <span role="status" style={{
39
+ display: 'inline-flex', alignItems: 'center', gap: 7, padding: '4px 11px', borderRadius: 999,
40
+ fontSize: 12.5, fontWeight: 700, color: l.color, background: `${l.color}1f`, border: `1px solid ${l.color}55`, whiteSpace: 'nowrap',
41
+ }}>
42
+ <span style={{ width: 7, height: 7, borderRadius: '50%', background: l.color }} />
43
+ {l.label}
44
+ </span>
45
+ );
46
+ }
47
+
48
+ /** Where on the bar a number sits, as a percentage. */
49
+ const at = (n, max) => `${Math.max(0, Math.min(100, (n / max) * 100))}%`;
50
+
51
+ /**
52
+ * One meter: a heading with the count, a bar with its marks (and a shaded
53
+ * range), the marks' numbers under it, then what they mean.
54
+ */
55
+ function Meter({ title, used, of, max, color, ticks = [], band, children }) {
56
+ return (
57
+ <div style={{ marginTop: 18 }}>
58
+ <div style={{ display: 'flex', alignItems: 'baseline', gap: 10, flexWrap: 'wrap' }}>
59
+ <span style={{ fontSize: 13.5, fontWeight: 650, color: 'var(--sd-fg-1, #e8e8ee)' }}>{title}</span>
60
+ <span style={{ marginLeft: 'auto', fontSize: 13, color: 'var(--sd-fg-3, #8b9a9a)', fontVariantNumeric: 'tabular-nums' }}>
61
+ <b style={{ fontSize: 17, color: 'var(--sd-fg-1, #fff)' }}>{count(used)}</b>{of ? ` ${of}` : ''}
62
+ </span>
63
+ </div>
64
+ <div style={{ position: 'relative', height: 10, borderRadius: 5, marginTop: 7, background: 'rgba(var(--sd-ink, 255, 255, 255), 0.07)' }}>
65
+ {band && (
66
+ <div title={band.title} style={{
67
+ position: 'absolute', top: 0, bottom: 0, left: at(band.from, max), width: `calc(${at(band.to, max)} - ${at(band.from, max)})`,
68
+ background: 'repeating-linear-gradient(135deg, rgba(255,215,0,0.28) 0 4px, rgba(255,215,0,0.08) 4px 8px)',
69
+ }} />
70
+ )}
71
+ <div style={{
72
+ position: 'absolute', top: 0, bottom: 0, left: 0, width: Number.isFinite(used) ? at(used, max) : 0,
73
+ borderRadius: 5, background: color, transition: 'width 0.4s ease',
74
+ }} />
75
+ {ticks.map((t) => (
76
+ <div key={t.at} title={t.title} style={{
77
+ position: 'absolute', top: -3, bottom: -3, left: at(t.at, max), width: 2, marginLeft: -1, borderRadius: 1,
78
+ background: t.color || 'rgba(var(--sd-ink, 255, 255, 255), 0.55)',
79
+ }} />
80
+ ))}
81
+ </div>
82
+ {(ticks.length > 0 || band) && (
83
+ <div aria-hidden="true" style={{ position: 'relative', height: 16, marginTop: 3, fontSize: 10.5, color: 'var(--sd-fg-4, #778)', fontVariantNumeric: 'tabular-nums' }}>
84
+ {/* The shaded range's ends, where no mark already says the number */}
85
+ {(band ? [band.from, band.to] : []).filter((n) => !ticks.some((t) => t.at === n))
86
+ .map((n) => ({ at: n, label: String(n), color: 'rgba(255,215,0,0.75)' }))
87
+ .concat(ticks).map((t) => {
88
+ const p = (t.at / max) * 100;
89
+ return (
90
+ <span key={t.at} style={{
91
+ position: 'absolute', left: `${Math.min(100, p)}%`, whiteSpace: 'nowrap', color: t.color || undefined,
92
+ transform: p > 94 ? 'translateX(-100%)' : p < 4 ? 'none' : 'translateX(-50%)',
93
+ }}>{t.label}</span>
94
+ );
95
+ })}
96
+ </div>
97
+ )}
98
+ <div style={{ fontSize: 12.5, color: 'var(--sd-fg-3, #8b9a9a)', lineHeight: 1.6, marginTop: 2 }}>{children}</div>
99
+ </div>
100
+ );
101
+ }
102
+
103
+ /**
104
+ * Auto's connection requests (lib/auto-connect.js): the last 24 hours and the
105
+ * last 7 days, each against its cap, one bar under the other. Its own caps,
106
+ * not the search budget: a request is the one thing Six Degrees sends.
107
+ */
108
+ function InviteMeter({ day, week, freesAt, weekFreesAt, now }) {
109
+ const known = Number.isFinite(day) && Number.isFinite(week);
110
+ const bars = [
111
+ { label: 'Last 24 hours', used: day, cap: INVITE_CAPS.day },
112
+ { label: 'Last 7 days', used: week, cap: INVITE_CAPS.week },
113
+ ];
114
+ const left = known ? Math.max(0, Math.min(INVITE_CAPS.day - day, INVITE_CAPS.week - week)) : null;
115
+ return (
116
+ <div style={{ marginTop: 18 }} data-usage="invites">
117
+ <div style={{ fontSize: 13.5, fontWeight: 650, color: 'var(--sd-fg-1, #e8e8ee)' }}>Connection requests (Auto)</div>
118
+ {bars.map((b) => (
119
+ <div key={b.label} style={{ display: 'flex', alignItems: 'center', gap: 10, marginTop: 8 }}>
120
+ <span style={{ flex: '0 0 88px', fontSize: 12, color: 'var(--sd-fg-3, #8b9a9a)' }}>{b.label}</span>
121
+ <div style={{ position: 'relative', flex: 1, height: 10, borderRadius: 5, background: 'rgba(var(--sd-ink, 255, 255, 255), 0.07)' }}>
122
+ <div style={{
123
+ position: 'absolute', top: 0, bottom: 0, left: 0, borderRadius: 5, transition: 'width 0.4s ease',
124
+ width: Number.isFinite(b.used) ? at(b.used, Math.max(b.cap, b.used)) : 0,
125
+ background: b.used >= b.cap ? '#ff6b6b' : 'linear-gradient(90deg, #FFD700, #FF6B35)',
126
+ }} />
127
+ </div>
128
+ <span style={{ flex: '0 0 auto', fontSize: 13, color: 'var(--sd-fg-3, #8b9a9a)', fontVariantNumeric: 'tabular-nums', minWidth: 58, textAlign: 'right' }}>
129
+ <b style={{ fontSize: 15, color: 'var(--sd-fg-1, #fff)' }}>{count(b.used)}</b> of {b.cap}
130
+ </span>
131
+ </div>
132
+ ))}
133
+ <div style={{ fontSize: 12.5, color: 'var(--sd-fg-3, #8b9a9a)', lineHeight: 1.6, marginTop: 6 }}>
134
+ {!known ? null
135
+ : freesAt ? <>Auto&rsquo;s {INVITE_CAPS.day} a day are used. The next one frees {whenAndUntil(freesAt, now)}.</>
136
+ : weekFreesAt ? <>Auto&rsquo;s {INVITE_CAPS.week} a week are used. The next one frees {whenAndUntil(weekFreesAt, now)}.</>
137
+ : <>{plural(left, 'request')} left for Auto now.</>}
138
+ <div style={small}>
139
+ Each press of Auto sends one request from the scanner&rsquo;s Chrome, without a note, and opens their
140
+ profile once (a profile view). It stops at {INVITE_CAPS.day} in any 24 hours and {INVITE_CAPS.week} in any 7 days.
141
+ LinkedIn doesn&rsquo;t publish its invitation limit; people commonly report about {REPORTED_WEEKLY_INVITES} a week.
142
+ </div>
143
+ </div>
144
+ </div>
145
+ );
146
+ }
147
+
148
+ function Row({ label, children }) {
149
+ return (
150
+ <div style={{ display: 'flex', gap: '4px 16px', flexWrap: 'wrap', padding: '10px 0', borderTop: LINE, fontSize: 13 }}>
151
+ <span style={{ flex: '0 0 150px', color: 'var(--sd-fg-1, #e8e8ee)', fontWeight: 600 }}>{label}</span>
152
+ <span style={{ flex: '1 1 280px', color: 'var(--sd-fg-3, #8b9a9a)', lineHeight: 1.6 }}>{children}</span>
153
+ </div>
154
+ );
155
+ }
156
+
157
+ /** "in 2 h 5 min (Sat, Oct 3, 5:20 PM)" */
158
+ const whenAndUntil = (ms, now) => `${untilText(ms, now)} (${whenText(ms)})`;
159
+
160
+ export default function UsageSection() {
161
+ const [u, setU] = useState(null);
162
+ const [error, setError] = useState(null);
163
+ const [saving, setSaving] = useState(false);
164
+
165
+ const load = useCallback(() => fetch('/api/scraper?usage=1', { cache: 'no-store' })
166
+ .then((r) => r.json().then((d) => (r.ok && !d.error ? d : Promise.reject(new Error(d.error || 'The usage could not be read.')))))
167
+ .then((d) => { setU(d); setError(null); })
168
+ .catch((e) => setError(e.message)), []);
169
+
170
+ useEffect(() => {
171
+ load();
172
+ const timer = setInterval(load, REFRESH_MS);
173
+ return () => clearInterval(timer);
174
+ }, [load]);
175
+
176
+ const backToSafe = async () => {
177
+ setSaving(true);
178
+ try {
179
+ const r = await fetch('/api/scraper', {
180
+ method: 'POST', headers: { 'Content-Type': 'application/json' },
181
+ body: JSON.stringify({ action: 'set-limits', ...SAFE_LIMITS }),
182
+ });
183
+ if (!r.ok) throw new Error((await r.json().catch(() => ({}))).error || 'The budget could not be saved.');
184
+ await load();
185
+ } catch (e) {
186
+ setError(e.message);
187
+ } finally {
188
+ setSaving(false);
189
+ }
190
+ };
191
+
192
+ if (!u) {
193
+ return (
194
+ <Section id="usage" title="LinkedIn usage">
195
+ <Body>{error ? `${error}` : 'Counting…'}</Body>
196
+ </Section>
197
+ );
198
+ }
199
+
200
+ // The server's clock, the one the windows were counted on.
201
+ const now = u.now;
202
+ const { limits = {} } = u;
203
+ const day = u.searchesToday;
204
+ const level = usageLevel({ cooldown: u.cooldown, searchesDay: day, lastPushback: u.lastPushback, searchesSincePushback: u.searchesSincePushback, now });
205
+ // The level's warning, then the budget's own when it invites trouble whatever has been
206
+ // used; the 373 said once between them (lib/usage.js warningParts).
207
+ const warnings = warningParts(level, { searchesDay: day, cooldown: u.cooldown, lastPushback: u.lastPushback, now }, limits);
208
+ const aboveSafe = limits.daily > SAFE_LIMITS.daily || limits.monthly === 0 || limits.monthly > SAFE_LIMITS.monthly;
209
+ const left = estimate({ leftDay: u.leftToday, leftMonth: u.leftMonth, paused: Boolean(u.cooldown) });
210
+ const pace = paceOf(limits.pace);
211
+ const push = u.lastPushback;
212
+
213
+ // The 24-hour bar's colour is its count's own level, so a pause elsewhere doesn't redden it.
214
+ const dayLevel = usageLevel({ searchesDay: day });
215
+ const dayTicks = [
216
+ { at: SAFE_LIMITS.daily, label: String(SAFE_LIMITS.daily), title: 'The default budget' },
217
+ { at: RISKY_DAILY, label: String(RISKY_DAILY), title: 'Above this is risky', color: '#FF8C42' },
218
+ { at: RESTRICTED_AT, label: String(RESTRICTED_AT), title: 'A real account was restricted here', color: '#ff6b6b' },
219
+ ];
220
+ if (limits.daily && !dayTicks.some((t) => t.at === limits.daily)) {
221
+ dayTicks.push({ at: limits.daily, label: `${limits.daily} yours`, title: 'Your daily budget', color: 'var(--sd-blue, #3498DB)' });
222
+ }
223
+ const dayMax = barMax(day, dayTicks.map((t) => t.at));
224
+
225
+ const month = u.searchesMonth;
226
+ const monthTicks = limits.monthly ? [{ at: limits.monthly, label: `${limits.monthly} yours`, title: 'Your monthly budget', color: 'var(--sd-blue, #3498DB)' }] : [];
227
+ const monthMax = barMax(month, [REPORTED_MONTH[1], limits.monthly || 0]);
228
+ const monthColor = limits.monthly && month >= limits.monthly ? '#ff6b6b' : month >= REPORTED_MONTH[0] ? '#FFD700' : '#3498DB';
229
+
230
+ const week = u.searchesWeek;
231
+ const weekMax = barMax(week, [AUTO.week]);
232
+
233
+ const views = u.profilesToday;
234
+ const viewsMax = Math.max(limits.profiles || 1, Number(views) || 0);
235
+
236
+ return (
237
+ <Section id="usage" title="LinkedIn usage">
238
+ <div style={{ display: 'flex', alignItems: 'center', gap: 12, flexWrap: 'wrap' }}>
239
+ <Pill level={level} />
240
+ <span style={{ fontSize: 13, color: 'var(--sd-fg-3, #8b9a9a)', flex: '1 1 260px', lineHeight: 1.5 }}>
241
+ What Six Degrees has asked of your LinkedIn account from this computer, and how close that is to the line.
242
+ </span>
243
+ </div>
244
+
245
+ {warnings.length > 0 && (
246
+ <div style={{
247
+ marginTop: 14, padding: '11px 14px', borderRadius: 8, fontSize: 13, lineHeight: 1.6,
248
+ color: 'var(--sd-fg-2, #e3d9c4)', background: `${(LEVELS[level] || LEVELS.unknown).color}14`,
249
+ border: `1px solid ${(LEVELS[level] || LEVELS.unknown).color}55`,
250
+ }}>
251
+ {warnings.map((text, i) => <div key={i} style={{ marginTop: i ? 6 : 0 }}>{text}</div>)}
252
+ {aboveSafe && (
253
+ <button onClick={backToSafe} disabled={saving} style={{
254
+ marginTop: 9, padding: '6px 12px', borderRadius: 7, fontSize: 12.5, fontWeight: 650,
255
+ cursor: saving ? 'not-allowed' : 'pointer', background: 'rgba(255,215,0,0.08)',
256
+ color: 'var(--sd-gold, #FFD700)', border: '1px solid rgba(255,215,0,0.4)',
257
+ }}>{saving ? 'Saving…' : `Back to ${SAFE_LIMITS.daily} a day, ${SAFE_LIMITS.monthly} a month`}</button>
258
+ )}
259
+ </div>
260
+ )}
261
+ {error && <Body style={{ color: 'var(--sd-red, #ff7676)' }}>{error}</Body>}
262
+
263
+ <Meter title="Searches in the last 24 hours" used={day} of={limits.daily ? `of ${limits.daily} a day` : 'no daily cap'}
264
+ max={dayMax} color={(LEVELS[dayLevel] || LEVELS.unknown).color} ticks={dayTicks}>
265
+ {u.unreadable ? null : limits.daily
266
+ ? (u.dayFreesAt
267
+ ? <>Your {limits.daily} a day are used. The next one frees {whenAndUntil(u.dayFreesAt, now)}.</>
268
+ : <>{plural(u.leftToday, 'search', 'searches')} left under your budget{u.cooldown ? ', once the pause ends' : ''}.</>)
269
+ : <>No daily cap is set, so only the monthly one stops a scan.</>}
270
+ {u.dayClearAt && <> All clear {whenAndUntil(u.dayClearAt, now)}, when the newest of these turns 24 hours old.</>}
271
+ <div style={small}>
272
+ {SAFE_LIMITS.daily} is the default budget. Over {RISKY_DAILY} is risky: the budget picker asks first.
273
+ {' '}{RESTRICTED_AT} is where a real account was restricted, on Sep 28, 2026, with searches run back to back.
274
+ {' '}{DANGER_AT} (60% of that) or more shows as too close.
275
+ </div>
276
+ </Meter>
277
+
278
+ <Meter title="Searches this month" used={month} of={limits.monthly ? `of ${limits.monthly} a month` : 'no monthly cap'}
279
+ max={monthMax} color={monthColor} ticks={monthTicks}
280
+ band={{ from: REPORTED_MONTH[0], to: REPORTED_MONTH[1], title: 'The range people report for a free account' }}>
281
+ LinkedIn&rsquo;s month resets {pacificText(u.monthResets)} ({whenText(u.monthResets)} here).
282
+ {!limits.monthly ? <> No monthly cap is set (Premium).</>
283
+ : Number.isFinite(u.leftMonth) && <> {plural(u.leftMonth, 'search', 'searches')} left under your budget.</>}
284
+ <div style={small}>
285
+ The shaded {REPORTED_MONTH[0]} to {REPORTED_MONTH[1]} is the range people report for a free account&rsquo;s
286
+ monthly search limit. LinkedIn doesn&rsquo;t publish one, so it&rsquo;s a guide, not a fact.
287
+ Every page of someone&rsquo;s connections is one search.
288
+ </div>
289
+ </Meter>
290
+
291
+ <Meter title="Searches in the last 7 days" used={week} of={`against Auto scan's ${AUTO.week}`}
292
+ max={weekMax} color={week >= AUTO.week ? '#FFD700' : '#3498DB'}
293
+ ticks={[{ at: AUTO.week, label: String(AUTO.week), title: 'Auto scan stops here' }]}>
294
+ Auto scan stops at {AUTO.week} in any 7 days. A scan you start yourself stops only at your daily and monthly budget.
295
+ </Meter>
296
+
297
+ <Meter title="Profile views in the last 24 hours" used={views} of={`of ${limits.profiles} a day`}
298
+ max={viewsMax} color={views >= limits.profiles ? '#ff6b6b' : '#9B59B6'}>
299
+ {u.profilesFreeAt
300
+ ? <>Your {limits.profiles} a day are used. The next one frees {whenAndUntil(u.profilesFreeAt, now)}.</>
301
+ : Number.isFinite(views) && <>{plural(u.profilesLeftToday, 'view', 'views')} left.</>}
302
+ <div style={small}>
303
+ Each circle scan opens the person&rsquo;s profile once. Profile views are what got an account restricted on
304
+ Sep 9, 2026, after about 20 to 25 in an hour; at {pace.label} the scanner opens at most one every {pace.profileGap} seconds.
305
+ </div>
306
+ </Meter>
307
+
308
+ <InviteMeter day={u.invitesToday} week={u.invitesWeek} freesAt={u.invitesFreeAt} weekFreesAt={u.invitesWeekFreeAt} now={now} />
309
+
310
+ <div style={{ marginTop: 22 }}>
311
+ <Row label="Speed">
312
+ {pace.label}: about {searchesPerHour(limits.pace)} searches an hour at most while a scan runs.
313
+ {Number.isFinite(u.searchesLastHour) && <> In the last hour: {plural(u.searchesLastHour, 'search', 'searches')}.</>}
314
+ {' '}<Link href="/setup" style={link}>Change it on the Scan page</Link>
315
+ </Row>
316
+ <Row label="Can still map">
317
+ {u.unreadable
318
+ ? <>Can&rsquo;t tell until the record of searches can be read.</>
319
+ : !left
320
+ ? <>No cap is set, so there&rsquo;s no count of what&rsquo;s left.</>
321
+ : u.cooldown
322
+ ? <>No one until the pause ends.</>
323
+ : left.searches === 0
324
+ ? <>No one for now: your {left.by === 'day' ? 'daily' : 'monthly'} budget is used.</>
325
+ : <>
326
+ About {count(left.people)} people: {plural(left.searches, 'search', 'searches')} left under your
327
+ {' '}{left.by === 'day' ? 'daily' : 'monthly'} budget, at about {PEOPLE_PER_SEARCH} people a search.
328
+ <span style={{ color: 'var(--sd-fg-4, #778)' }}> An estimate: a page of results shows up to 10 people, and the last page of a list is usually short.</span>
329
+ </>}
330
+ </Row>
331
+ <Row label="Last pushback">
332
+ {!push
333
+ ? <>None on record on this computer.</>
334
+ : <>
335
+ {push.at ? <>{whenText(push.at)} ({agoText(push.at, now)}): </> : null}{push.reason}.
336
+ {push.active && <> Scanning is paused until {whenText(push.pausedUntil)}.</>}
337
+ {push.liftedAt && <> You lifted the pause {whenText(push.liftedAt)}; it would have run until {whenText(push.pausedUntil)}.</>}
338
+ {!push.active && !push.liftedAt && push.pausedUntil && <> The pause ended {whenText(push.pausedUntil)}.</>}
339
+ {u.searchesSincePushback > 0 && <> {plural(u.searchesSincePushback, 'search', 'searches')} since.</>}
340
+ </>}
341
+ </Row>
342
+ <Row label="Auto scan">
343
+ However high your budget is set, Auto scan keeps under its own limits: {AUTO.day} searches in any 24 hours,
344
+ {' '}{AUTO.week} in any 7 days, only from {hoursText(AUTO.hours)} on this computer&rsquo;s clock,
345
+ {' '}{AUTO.sittingRest === 3600 ? 'an hour’s rest' : `a ${AUTO.sittingRest / 60}-minute rest`} after every {AUTO.sitting} searches,
346
+ {' '}and {AUTO.pushbackRest / 86400} days off after any check from LinkedIn.
347
+ </Row>
348
+ </div>
349
+
350
+ <div style={{ ...small, marginTop: 14, paddingTop: 12, borderTop: LINE }}>
351
+ Where these numbers come from: Six Degrees writes down every search, profile view and Auto request it makes
352
+ on your LinkedIn account, on this computer, and counts them here. Searches you make yourself on linkedin.com
353
+ aren&rsquo;t in it, and LinkedIn shows no count of its own. The {RESTRICTED_AT} searches and the 20 to 25
354
+ profile views are what happened to one real account, not safe limits. Change the budget on the
355
+ {' '}<Link href="/setup" style={link}>Scan page</Link>, under Fine-tune the scanner. Nothing here is sent anywhere.
356
+ {' '}Counted {whenText(now)}.
357
+ </div>
358
+ </Section>
359
+ );
360
+ }
@@ -4,7 +4,7 @@
4
4
  // (UpdatePanel uses them). The Scan page still keeps its own private copies;
5
5
  // new screens should use these rather than adding another.
6
6
 
7
- export const LINE = '1px solid rgba(255,255,255,0.1)';
7
+ export const LINE = '1px solid rgba(var(--sd-ink, 255, 255, 255), 0.1)';
8
8
  // The theme's font (lib/themes.js), Standard's until one is applied.
9
9
  export const FONT = 'var(--sd-font)';
10
10
 
@@ -21,7 +21,7 @@ export function Section({ id, title, intro, children }) {
21
21
 
22
22
  export function Body({ children, style }) {
23
23
  return (
24
- <div style={{ fontSize: 13.5, color: '#8b9a9a', lineHeight: 1.6, marginTop: 4, ...style }}>
24
+ <div style={{ fontSize: 13.5, color: 'var(--sd-fg-3, #8b9a9a)', lineHeight: 1.6, marginTop: 4, ...style }}>
25
25
  {children}
26
26
  </div>
27
27
  );
@@ -29,7 +29,7 @@ export function Body({ children, style }) {
29
29
 
30
30
  export function Mono({ children }) {
31
31
  return (
32
- <code style={{ background: 'rgba(255,255,255,0.08)', padding: '1px 5px', borderRadius: 4, wordBreak: 'break-all' }}>
32
+ <code style={{ background: 'rgba(var(--sd-ink, 255, 255, 255), 0.08)', padding: '1px 5px', borderRadius: 4, wordBreak: 'break-all' }}>
33
33
  {children}
34
34
  </code>
35
35
  );
@@ -38,8 +38,8 @@ export function Mono({ children }) {
38
38
  /** The answer to an action, where it can't be missed. tone: 'ok' | 'bad' | undefined. */
39
39
  export function Status({ children, tone }) {
40
40
  const color = tone === 'ok' ? '#00ff88' : tone === 'bad' ? '#ff7676' : '#e8e8ee';
41
- const bg = tone === 'ok' ? 'rgba(0,255,136,0.08)' : tone === 'bad' ? 'rgba(255,80,80,0.08)' : 'rgba(255,255,255,0.05)';
42
- const border = tone === 'ok' ? 'rgba(0,255,136,0.3)' : tone === 'bad' ? 'rgba(255,80,80,0.3)' : 'rgba(255,255,255,0.12)';
41
+ const bg = tone === 'ok' ? 'rgba(0,255,136,0.08)' : tone === 'bad' ? 'rgba(255,80,80,0.08)' : 'rgba(var(--sd-ink, 255, 255, 255), 0.05)';
42
+ const border = tone === 'ok' ? 'rgba(0,255,136,0.3)' : tone === 'bad' ? 'rgba(255,80,80,0.3)' : 'rgba(var(--sd-ink, 255, 255, 255), 0.12)';
43
43
  return (
44
44
  <div role="status" style={{
45
45
  marginTop: 10, padding: '10px 14px', borderRadius: 8, fontSize: 13.5, lineHeight: 1.6,
@@ -51,12 +51,12 @@ export function Status({ children, tone }) {
51
51
  export function Btn({ children, onClick, disabled, primary, tone, type = 'button' }) {
52
52
  const bg = tone === 'bad' ? 'rgba(255,80,80,0.15)'
53
53
  : primary ? 'linear-gradient(135deg, #9B59B6, #3498DB)'
54
- : 'rgba(255,255,255,0.08)';
54
+ : 'rgba(var(--sd-ink, 255, 255, 255), 0.08)';
55
55
  return (
56
56
  <button type={type} onClick={onClick} disabled={disabled} style={{
57
57
  padding: '9px 18px', borderRadius: 7, fontSize: 13.5, fontWeight: 650,
58
- color: disabled ? '#667' : '#fff', border: LINE,
59
- background: disabled ? 'rgba(255,255,255,0.05)' : bg,
58
+ color: disabled ? 'var(--sd-fg-4, #667)' : 'var(--sd-fg-1, #fff)', border: LINE,
59
+ background: disabled ? 'rgba(var(--sd-ink, 255, 255, 255), 0.05)' : bg,
60
60
  cursor: disabled ? 'not-allowed' : 'pointer',
61
61
  }}>{children}</button>
62
62
  );
@@ -21,7 +21,7 @@
21
21
 
22
22
  body {
23
23
  background: var(--sd-bg);
24
- color: #fff;
24
+ color: var(--sd-fg-1, #fff);
25
25
  font-family: var(--sd-font);
26
26
  }
27
27
 
@@ -103,17 +103,16 @@ html:has([data-field-question]) {
103
103
  }
104
104
 
105
105
  ::-webkit-scrollbar-thumb {
106
- background: rgba(255, 255, 255, 0.15);
106
+ background: rgba(var(--sd-ink, 255, 255, 255), 0.15);
107
107
  border-radius: 3px;
108
108
  }
109
109
 
110
- /* Where the scan status bar sits: just under the header (app/components/ScanStatusBar.js). */
111
- :root { --scan-bar-top: 94px; }
112
- @media (max-width: 767px) { :root { --scan-bar-top: 66px; } }
113
110
 
114
111
  /* The notch's running dot (app/components/ScanStatusBar.js). */
115
112
  @keyframes notch-pulse { 50% { opacity: 0.35; } }
116
113
  @media (prefers-reduced-motion: no-preference) { .notch-pulse { animation: notch-pulse 1.6s ease-in-out infinite; } }
114
+ @keyframes notch-in { from { opacity: 0; } }
115
+ @media (prefers-reduced-motion: no-preference) { .notch-in { animation: notch-in 0.25s ease-out; } }
117
116
 
118
117
  /* The Social tab's CRM (app/social/Crm.js): the list and the person side by
119
118
  side, stacked on a phone. In Pipeline the board takes the whole width and
@@ -125,3 +124,160 @@ html:has([data-field-question]) {
125
124
  .crm-grid { grid-template-columns: minmax(0, 1fr); }
126
125
  .crm-board { grid-template-columns: minmax(0, 1fr); }
127
126
  }
127
+
128
+ /* ---- How a look draws its buttons (lib/themes.js BUTTONS; html[data-buttons]) ----
129
+ Buttons carry their own colours inline, so a look adds what they don't set:
130
+ shadow, frost, glow, outline, and the corner where a look has its own shape.
131
+ Round buttons (50%) stay round. The tab row's links count as buttons. */
132
+ /* Flat: Obsidian, Paper. No depth, a quiet hover. */
133
+ html[data-buttons="flat"] :is(button, #main-tabs > a) { box-shadow: none !important; text-shadow: none !important; }
134
+ html[data-buttons="flat"] :is(button, #main-tabs > a):not(:disabled):hover { filter: brightness(1.12); }
135
+ html[data-buttons="flat"] :is(button, select, input[type="search"], input[type="text"], #main-tabs > a):not([style*="border-radius: 50%"]) { border-radius: 5px !important; }
136
+
137
+ /* Square: Analyst. Crisp corners, hairline borders, no depth. */
138
+ html[data-buttons="square"] :is(button, select, input[type="search"], input[type="text"], #main-tabs, #main-tabs > a):not([style*="border-radius: 50%"]) { border-radius: 2px !important; }
139
+ html[data-buttons="square"] :is(button, #main-tabs > a) { box-shadow: none !important; letter-spacing: 0.02em; }
140
+ html[data-buttons="square"] :is(button, #main-tabs > a):not(:disabled):hover { outline: 1px solid color-mix(in srgb, var(--sd-accent) 70%, transparent); outline-offset: -1px; }
141
+
142
+ /* Frosted: Glass, as Apple's Liquid Glass (WWDC25 "Meet Liquid Glass"; HIG →
143
+ Materials). Not a frosted blur: glass that bends light at its edges (the
144
+ lensing comes from app/components/LiquidGlass.js, as --lg-lens), with a
145
+ specular rim lit from the top left, a bright top edge, and a soft shadow
146
+ under it. Panels full of words use the "regular" glass: a dark tint under
147
+ the blur so the words read (lib/themes.js --sd-panel). Controls are capsules
148
+ of clearer glass; the tab bar is one capsule with plain segments in it,
149
+ never glass on glass. */
150
+ html[data-buttons="frosted"] [data-glass-panel] {
151
+ position: relative;
152
+ isolation: isolate;
153
+ -webkit-backdrop-filter: var(--sd-panel-blur) var(--lg-lens, ) !important;
154
+ backdrop-filter: var(--sd-panel-blur) var(--lg-lens, ) !important;
155
+ background-image: linear-gradient(180deg, rgba(255, 255, 255, 0.09), rgba(255, 255, 255, 0.02) 40%, rgba(255, 255, 255, 0)) !important;
156
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.24), inset 0 -1px 0 rgba(255, 255, 255, 0.05), 0 24px 60px rgba(0, 0, 0, 0.42), 0 1px 2px rgba(0, 0, 0, 0.25) !important;
157
+ }
158
+ html[data-buttons="frosted"] [data-glass-panel="bar"] { border-radius: 999px !important; }
159
+ html[data-buttons="frosted"] .glass-rim, html[data-buttons="frosted"] [data-glass-panel]::before,
160
+ html[data-buttons="frosted"] :is(button, #main-tabs > a):not(.radar-go):not(#main-tabs *)::before {
161
+ content: "";
162
+ position: absolute;
163
+ inset: 0;
164
+ border-radius: inherit;
165
+ padding: 1px;
166
+ pointer-events: none;
167
+ background: linear-gradient(135deg, rgba(255, 255, 255, 0.55), rgba(255, 255, 255, 0.1) 30%, rgba(255, 255, 255, 0) 55%, rgba(255, 255, 255, 0.22));
168
+ -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
169
+ -webkit-mask-composite: xor;
170
+ mask-composite: exclude;
171
+ }
172
+ /* Controls: capsules of clear glass that spring when pressed. */
173
+ html[data-buttons="frosted"] :is(button):not(.radar-go):not(#main-tabs *) {
174
+ position: relative;
175
+ isolation: isolate;
176
+ -webkit-backdrop-filter: blur(4px) saturate(170%);
177
+ backdrop-filter: blur(4px) saturate(170%);
178
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.3), inset 0 0 0 0.5px rgba(255, 255, 255, 0.14), 0 4px 14px rgba(0, 0, 0, 0.24) !important;
179
+ }
180
+ html[data-buttons="frosted"] :is(button, select, input[type="search"], input[type="text"]):not([style*="border-radius: 50%"]):not(.radar-go):not(#main-tabs *) { border-radius: 14px !important; }
181
+ html[data-buttons="frosted"] :is(button):not(:disabled):not(#main-tabs *):hover { filter: brightness(1.14); }
182
+ @media (prefers-reduced-motion: no-preference) {
183
+ html[data-buttons="frosted"] :is(button):not(#main-tabs *) { transition: transform 0.25s cubic-bezier(0.3, 1.4, 0.5, 1), filter 0.2s; }
184
+ html[data-buttons="frosted"] :is(button):not(:disabled):not(#main-tabs *):active { transform: scale(1.04); }
185
+ }
186
+ /* The tab bar's segments: the picked one is a lit thumb inside the glass. */
187
+ html[data-buttons="frosted"] #main-tabs > :is(a, button) { border-radius: 999px !important; }
188
+ html[data-buttons="frosted"] #main-tabs > :is(a, button)[aria-current="page"],
189
+ html[data-buttons="frosted"] #main-tabs > button[style*="background: rgb(255, 255, 255)"] {
190
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.4), inset 0 0 0 0.5px rgba(255, 255, 255, 0.25), 0 2px 8px rgba(0, 0, 0, 0.25) !important;
191
+ }
192
+ /* Reduce Transparency: solid panels, no lensing. More contrast: a darker tint and a plain rim. */
193
+ @media (prefers-reduced-transparency: reduce) {
194
+ html[data-buttons="frosted"] [data-glass-panel] { -webkit-backdrop-filter: none !important; backdrop-filter: none !important; background: rgba(28, 28, 36, 0.97) !important; }
195
+ }
196
+ @media (prefers-contrast: more) {
197
+ html[data-buttons="frosted"] [data-glass-panel] { background-color: rgba(10, 10, 14, 0.85) !important; }
198
+ html[data-buttons="frosted"] [data-glass-panel]::before { background: rgba(255, 255, 255, 0.6); }
199
+ }
200
+
201
+ /* Neon: Synthwave. A glow in the accent, brighter on hover. */
202
+ html[data-buttons="neon"] :is(button, #main-tabs > a):not(:disabled) {
203
+ box-shadow: 0 0 0 1px color-mix(in srgb, var(--sd-accent) 55%, transparent), 0 0 12px color-mix(in srgb, var(--sd-accent) 26%, transparent) !important;
204
+ text-shadow: 0 0 8px color-mix(in srgb, var(--sd-accent) 45%, transparent);
205
+ }
206
+ html[data-buttons="neon"] :is(button, #main-tabs > a):not(:disabled):hover {
207
+ box-shadow: 0 0 0 1px var(--sd-accent), 0 0 20px color-mix(in srgb, var(--sd-accent) 50%, transparent) !important;
208
+ }
209
+
210
+ /* Bold: High contrast. A clear outline on every control, and a thick focus ring. */
211
+ html[data-buttons="bold"] :is(button, select, input[type="search"], input[type="text"], #main-tabs > a) { outline: 1.5px solid rgba(var(--sd-ink, 255, 255, 255), 0.55); outline-offset: -1.5px; font-weight: 700; }
212
+ html[data-buttons="bold"] :is(button, a, select, input):focus-visible { outline: 3px solid var(--sd-accent) !important; outline-offset: 2px; }
213
+
214
+ @media (prefers-reduced-motion: no-preference) {
215
+ html:not([data-buttons="soft"]) :is(button, #main-tabs > a) { transition: box-shadow 0.15s, filter 0.15s, outline-color 0.15s; }
216
+ }
217
+
218
+ /* ---- Analyst: nothing decorative (lib/themes.js) ----
219
+ An analysis tool's restraint: no gradients, glows or shadows anywhere, the
220
+ name in plain ink, the picked tab and the main buttons a flat accent, and
221
+ every number in even columns. Only in this look; the colours inline stay
222
+ the same in every other. */
223
+ html[data-theme="analyst"] body { font-variant-numeric: tabular-nums; }
224
+ html[data-theme="analyst"] [style*="box-shadow"] { box-shadow: none !important; }
225
+ html[data-theme="analyst"] [style*="text-shadow"] { text-shadow: none !important; }
226
+ html[data-theme="analyst"] header h1, html[data-theme="analyst"] header :is(span, a) > h1, html[data-theme="analyst"] [style*="-webkit-text-fill-color"] {
227
+ background: none !important; -webkit-text-fill-color: currentColor !important; color: var(--sd-fg-1, #111) !important;
228
+ }
229
+ html[data-theme="analyst"] :is(button, a)[style*="gradient"] { background: var(--sd-accent) !important; color: #fff !important; border-color: transparent !important; }
230
+ html[data-theme="analyst"] div[style*="radial-gradient"], html[data-theme="analyst"] div[style*="linear-gradient(1"] { background-image: none !important; }
231
+ html[data-theme="analyst"] [style*="backdrop-filter"] { -webkit-backdrop-filter: none !important; backdrop-filter: none !important; }
232
+ html[data-theme="analyst"] :is(.galaxy-ring-pulse, .cluster-hub, .seed) { animation: none !important; }
233
+
234
+ /* ---- A look's dots, on every map (Blake, 2026-10-03: "liquid glass for even
235
+ path dots etc all things of nature … the same for the others") ----
236
+ The Galaxy paints its own (app/components/ForceGraph.js); everywhere else a
237
+ dot is .sd-dot (SVG) or .sd-dot-html, and takes its look's style here, with
238
+ app/components/ThemeDefs.js's filters: Degrees' bridges, clusters and hover
239
+ previews, Separation, Paths' bubbles, the Scan cluster, circle previews, the
240
+ header's scan dots, Check for new's spinner, legends, tier dots, avatars. */
241
+ html[data-dots="droplet"] :is(.sd-dot, .pv-d3, .pv-d4) { filter: url(#sd-droplet); }
242
+ html[data-dots="glow"] :is(.sd-dot, .pv-d3, .pv-d4) { filter: url(#sd-glow); }
243
+ html[data-dots="plain"] .sd-dot:is(:not([stroke]), [stroke="none"]) { stroke: #2b2b2b; stroke-width: 0.8px; stroke-opacity: 0.75; }
244
+ html[data-dots="droplet"] .sd-dot-html {
245
+ background-image: radial-gradient(circle at 34% 30%, rgba(255, 255, 255, 0.95), rgba(255, 255, 255, 0.35) 22%, rgba(255, 255, 255, 0) 55%) !important;
246
+ box-shadow: inset 0 0 0 0.5px rgba(255, 255, 255, 0.55), 0 1px 3px rgba(0, 0, 0, 0.35) !important;
247
+ }
248
+ html[data-dots="glow"] .sd-dot-html { filter: saturate(1.25) brightness(1.08) drop-shadow(0 0 3px rgba(255, 255, 255, 0.35)); }
249
+ html[data-dots="plain"] .sd-dot-html { box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.6) !important; }
250
+
251
+ /* ---- Each look's panels, tab bar, notch and the map's tooltips ----
252
+ [data-glass-panel] marks the side panels, the tab bar and the notch; the
253
+ tooltips are the Galaxy's .graph-tooltip. Glass's are above. */
254
+ /* Obsidian: graphite panels with fine borders, no depth, square-ish tooltips */
255
+ html[data-theme="obsidian"] [data-glass-panel] { box-shadow: none !important; border-color: #363636 !important; }
256
+ html[data-theme="obsidian"] [data-glass-panel="side"] { border-right: 1px solid #363636 !important; border-left: 1px solid #363636 !important; }
257
+ html[data-theme="obsidian"] #main-tabs { background: #262626 !important; box-shadow: inset 0 0 0 1px #363636; }
258
+ html[data-theme="obsidian"] .graph-tooltip { background: #262626 !important; border: 1px solid #3f3f3f !important; border-radius: 4px !important; color: #dcddde !important; box-shadow: 0 4px 14px rgba(0, 0, 0, 0.4); }
259
+ /* Synthwave: neon edges in the accent */
260
+ html[data-theme="synthwave"] [data-glass-panel] { box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--sd-accent) 45%, transparent), 0 0 26px color-mix(in srgb, var(--sd-accent) 16%, transparent) !important; }
261
+ html[data-theme="synthwave"] #main-tabs { box-shadow: 0 0 0 1px color-mix(in srgb, var(--sd-accent) 55%, transparent), 0 0 18px color-mix(in srgb, var(--sd-accent) 22%, transparent); }
262
+ html[data-theme="synthwave"] .graph-tooltip { background: rgba(36, 16, 63, 0.94) !important; border: 1px solid var(--sd-accent) !important; box-shadow: 0 0 16px color-mix(in srgb, var(--sd-accent) 35%, transparent); color: #fff5ff !important; }
263
+ /* Space: deep panels with a cool rim of starlight */
264
+ html[data-theme="space"] [data-glass-panel] { box-shadow: inset 0 1px 0 rgba(205, 218, 255, 0.14), inset 0 0 0 1px rgba(150, 170, 255, 0.1), 0 18px 50px rgba(0, 0, 0, 0.5) !important; }
265
+ html[data-theme="space"] .graph-tooltip { background: rgba(8, 10, 28, 0.94) !important; border: 1px solid rgba(150, 170, 255, 0.28) !important; color: #eef2ff !important; }
266
+ /* High contrast: hard outlines everywhere */
267
+ html[data-theme="contrast"] [data-glass-panel] { box-shadow: inset 0 0 0 1.5px #ffffff !important; }
268
+ html[data-theme="contrast"] .graph-tooltip { background: #000 !important; border: 1.5px solid #fff !important; color: #fff !important; }
269
+ /* Daylight: white panels with soft, layered shadows, as light Mac apps draw them */
270
+ html[data-theme="daylight"] [data-glass-panel] { box-shadow: 0 0 0 1px rgba(18, 22, 40, 0.07), 0 1px 2px rgba(18, 22, 40, 0.06), 0 10px 30px rgba(18, 22, 40, 0.08) !important; }
271
+ html[data-theme="daylight"] #main-tabs { background: #ffffff !important; }
272
+ /* Paper: ruled, flat, warm */
273
+ html[data-theme="paper"] [data-glass-panel] { box-shadow: inset 0 0 0 1px #d8cdb8 !important; }
274
+ html[data-theme="paper"] #main-tabs { background: #efe7d6 !important; }
275
+ /* Analyst: grey, flat, hairlines */
276
+ html[data-theme="analyst"] [data-glass-panel] { box-shadow: inset 0 0 0 1px #d0d0d0 !important; }
277
+ html[data-theme="analyst"] #main-tabs { background: #ececec !important; }
278
+ /* Light looks: the map's tooltip is a light card with ink words */
279
+ html[data-mode="light"] .graph-tooltip { background: rgba(255, 255, 255, 0.98) !important; color: #11141c !important; border: 1px solid rgba(18, 22, 40, 0.12) !important; box-shadow: 0 6px 20px rgba(18, 22, 40, 0.14); }
280
+ html[data-theme="paper"] .graph-tooltip { background: #fbf8f1 !important; border-color: #d8cdb8 !important; font-family: var(--sd-font); }
281
+ html[data-theme="analyst"] .graph-tooltip { border-radius: 2px !important; box-shadow: none; }
282
+ /* Glass: the tooltip is a pane of glass too */
283
+ html[data-buttons="frosted"] .graph-tooltip { background: rgba(18, 18, 30, 0.45) !important; -webkit-backdrop-filter: blur(16px) saturate(1.8); backdrop-filter: blur(16px) saturate(1.8); border: 1px solid rgba(255, 255, 255, 0.18) !important; border-radius: 12px !important; box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.22), 0 10px 30px rgba(0, 0, 0, 0.35); }