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.
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/app-path-routes-manifest.json +4 -0
- package/.next/standalone/.next/build-manifest.json +3 -3
- package/.next/standalone/.next/prerender-manifest.json +42 -14
- package/.next/standalone/.next/routes-manifest.json +24 -0
- package/.next/standalone/.next/server/app/_global-error.html +1 -1
- package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found/page.js +1 -1
- package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +1 -1
- package/.next/standalone/.next/server/app/_not-found.rsc +26 -18
- package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +26 -18
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +25 -16
- package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/api/admin-delete/route.js +2 -2
- package/.next/standalone/.next/server/app/api/admin-delete/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/admin-update/route.js +2 -2
- package/.next/standalone/.next/server/app/api/admin-update/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/bridges/route.js +2 -2
- package/.next/standalone/.next/server/app/api/bridges/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/bulk-import/route.js +2 -2
- package/.next/standalone/.next/server/app/api/bulk-import/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/company-scores/legacy/route.js +3 -3
- package/.next/standalone/.next/server/app/api/company-scores/legacy/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/company-scores/route.js +3 -3
- package/.next/standalone/.next/server/app/api/company-scores/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/connections/route.js +2 -2
- package/.next/standalone/.next/server/app/api/connections/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/data/backup/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/data/backup/route/build-manifest.json +12 -0
- package/.next/standalone/.next/server/app/api/data/backup/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/data/backup/route.js +7 -0
- package/.next/standalone/.next/server/app/api/data/backup/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/data/backup/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/data/backup/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/data/csv/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/data/csv/route/build-manifest.json +12 -0
- package/.next/standalone/.next/server/app/api/data/csv/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/data/csv/route.js +8 -0
- package/.next/standalone/.next/server/app/api/data/csv/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/data/csv/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/data/csv/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/data/export/route.js +1 -1
- package/.next/standalone/.next/server/app/api/data/export/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/data/import/route.js +1 -1
- package/.next/standalone/.next/server/app/api/data/import/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/data/restart/route.js +1 -1
- package/.next/standalone/.next/server/app/api/data/restart/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/data/restore/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/data/restore/route/build-manifest.json +12 -0
- package/.next/standalone/.next/server/app/api/data/restore/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/data/restore/route.js +7 -0
- package/.next/standalone/.next/server/app/api/data/restore/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/data/restore/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/data/restore/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/data/reveal/route.js +1 -1
- package/.next/standalone/.next/server/app/api/data/reveal/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/data/route.js +1 -1
- package/.next/standalone/.next/server/app/api/data/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/delete-cluster/route.js +2 -2
- package/.next/standalone/.next/server/app/api/delete-cluster/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ingest/route.js +2 -2
- package/.next/standalone/.next/server/app/api/ingest/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/route.js +2 -2
- package/.next/standalone/.next/server/app/api/network/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/notifications/route.js +2 -2
- package/.next/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/outreach/route.js +3 -3
- package/.next/standalone/.next/server/app/api/outreach/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/queue/route.js +2 -2
- package/.next/standalone/.next/server/app/api/queue/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/scraper/route.js +5 -3
- package/.next/standalone/.next/server/app/api/scraper/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/settings/route.js +3 -3
- package/.next/standalone/.next/server/app/api/settings/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/settings/sector-preview/route.js +3 -3
- package/.next/standalone/.next/server/app/api/settings/sector-preview/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/settings/sector-suggestions/route.js +3 -3
- package/.next/standalone/.next/server/app/api/settings/sector-suggestions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/setup-profile/route.js +2 -2
- package/.next/standalone/.next/server/app/api/setup-profile/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/social/crm/route.js +1 -1
- package/.next/standalone/.next/server/app/api/social/crm/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/social/messages/route.js +1 -1
- package/.next/standalone/.next/server/app/api/social/messages/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/social/route.js +2 -2
- package/.next/standalone/.next/server/app/api/social/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/unlock/route.js +2 -2
- package/.next/standalone/.next/server/app/api/unlock/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/update/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/update-images/route.js +2 -2
- package/.next/standalone/.next/server/app/api/update-images/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/users/route.js +2 -2
- package/.next/standalone/.next/server/app/api/users/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/avatars/[file]/route.js +1 -1
- package/.next/standalone/.next/server/app/avatars/[file]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/import/page.js +1 -1
- package/.next/standalone/.next/server/app/import/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/import/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/import.html +1 -1
- package/.next/standalone/.next/server/app/import.rsc +32 -24
- package/.next/standalone/.next/server/app/import.segments/_full.segment.rsc +32 -24
- package/.next/standalone/.next/server/app/import.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/import.segments/import/__PAGE__.segment.rsc +23 -18
- package/.next/standalone/.next/server/app/index.html +1 -1
- package/.next/standalone/.next/server/app/index.rsc +29 -22
- package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +20 -15
- package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +29 -22
- package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/insights/page/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/insights/page/build-manifest.json +20 -0
- package/.next/standalone/.next/server/app/insights/page/next-font-manifest.json +11 -0
- package/.next/standalone/.next/server/app/insights/page/react-loadable-manifest.json +1 -0
- package/.next/standalone/.next/server/app/insights/page/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/insights/page.js +13 -0
- package/.next/standalone/.next/server/app/insights/page.js.map +5 -0
- package/.next/standalone/.next/server/app/insights/page.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/insights/page_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/insights.html +1 -0
- package/.next/standalone/.next/server/app/insights.meta +26 -0
- package/.next/standalone/.next/server/app/insights.rsc +35 -0
- package/.next/standalone/.next/server/app/insights.segments/_full.segment.rsc +35 -0
- package/.next/standalone/.next/server/app/insights.segments/_tree.segment.rsc +4 -0
- package/.next/standalone/.next/server/app/insights.segments/insights/__PAGE__.segment.rsc +33 -0
- package/.next/standalone/.next/server/app/launch/page.js +1 -1
- package/.next/standalone/.next/server/app/launch/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/launch/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/launch.html +2 -2
- package/.next/standalone/.next/server/app/launch.rsc +32 -24
- package/.next/standalone/.next/server/app/launch.segments/_full.segment.rsc +32 -24
- package/.next/standalone/.next/server/app/launch.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/launch.segments/launch/__PAGE__.segment.rsc +23 -18
- package/.next/standalone/.next/server/app/page.js +1 -1
- package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/paths/page.js +1 -1
- package/.next/standalone/.next/server/app/paths/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/paths/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/paths.html +1 -1
- package/.next/standalone/.next/server/app/paths.rsc +32 -24
- package/.next/standalone/.next/server/app/paths.segments/_full.segment.rsc +32 -24
- package/.next/standalone/.next/server/app/paths.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/paths.segments/paths/__PAGE__.segment.rsc +21 -18
- package/.next/standalone/.next/server/app/profile/page.js +1 -1
- package/.next/standalone/.next/server/app/profile/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/profile/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/profile.html +1 -1
- package/.next/standalone/.next/server/app/profile.rsc +32 -24
- package/.next/standalone/.next/server/app/profile.segments/_full.segment.rsc +32 -24
- package/.next/standalone/.next/server/app/profile.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/profile.segments/profile/__PAGE__.segment.rsc +23 -18
- package/.next/standalone/.next/server/app/queue/page.js +1 -1
- package/.next/standalone/.next/server/app/queue/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/queue/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/queue.html +1 -1
- package/.next/standalone/.next/server/app/queue.rsc +32 -24
- package/.next/standalone/.next/server/app/queue.segments/_full.segment.rsc +32 -24
- package/.next/standalone/.next/server/app/queue.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/queue.segments/queue/__PAGE__.segment.rsc +21 -18
- package/.next/standalone/.next/server/app/scores/page.js +1 -1
- package/.next/standalone/.next/server/app/scores/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/scores/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/scores.html +1 -1
- package/.next/standalone/.next/server/app/scores.rsc +32 -24
- package/.next/standalone/.next/server/app/scores.segments/_full.segment.rsc +32 -24
- package/.next/standalone/.next/server/app/scores.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/scores.segments/scores/__PAGE__.segment.rsc +23 -18
- package/.next/standalone/.next/server/app/settings/page.js +1 -1
- package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings.html +1 -1
- package/.next/standalone/.next/server/app/settings.rsc +32 -24
- package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +32 -24
- package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +20 -18
- package/.next/standalone/.next/server/app/setup/page.js +1 -1
- package/.next/standalone/.next/server/app/setup/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/setup.html +1 -1
- package/.next/standalone/.next/server/app/setup.rsc +32 -24
- package/.next/standalone/.next/server/app/setup.segments/_full.segment.rsc +32 -24
- package/.next/standalone/.next/server/app/setup.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +21 -18
- package/.next/standalone/.next/server/app/social/page.js +1 -1
- package/.next/standalone/.next/server/app/social/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/social/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/social.html +1 -1
- package/.next/standalone/.next/server/app/social.rsc +32 -24
- package/.next/standalone/.next/server/app/social.segments/_full.segment.rsc +32 -24
- package/.next/standalone/.next/server/app/social.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/social.segments/social/__PAGE__.segment.rsc +23 -18
- package/.next/standalone/.next/server/app-paths-manifest.json +4 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__00la_y0._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__05_3-22._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__066rab1._.js +7 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__07t47cm._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0cj5jqc._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0e0fei3._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0fooke1._.js +7 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ljnyho._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0o5-tcg._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0qrnous._.js +1 -1
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__15wc9e-._.js → [root-of-the-server]__0r-0t-9._.js} +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ra6xyg._.js +15 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__20rwfdw._.js → [root-of-the-server]__0rcpjad._.js} +6 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0t3v1a1._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0t6y79e._.js +7 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0wmexuc._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0x29muh._.js +7 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0xu34sz._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__133knx1._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__15-17hl._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__19b7mig._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1a_6x37._.js +8 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1an_8pa._.js +7 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1bbcwub._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1ducpz2._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1eris29._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1gjo_cq._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1qcm08_._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1tir0vc._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1w25q0m._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1xhyinn._.js +3 -0
- package/.next/standalone/.next/server/chunks/_072jl0y._.js +1 -1
- package/.next/standalone/.next/server/chunks/_0lw8_i0._.js +1 -1
- package/.next/standalone/.next/server/chunks/_0sqqpzb._.js +3 -0
- package/.next/standalone/.next/server/chunks/_1_fynia._.js +7 -7
- package/.next/standalone/.next/server/chunks/_1fn30_l._.js +1 -1
- package/.next/standalone/.next/server/chunks/_1itd1o_._.js +1 -1
- package/.next/standalone/.next/server/chunks/_1iwkh8t._.js +1 -1
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_data_backup_route_actions_0zoj04p.js +3 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_data_csv_route_actions_0l6m7lg.js +3 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_data_restore_route_actions_0-b05bv.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_02iz_9q._.js +4 -0
- package/.next/standalone/.next/server/chunks/lib_05agvk3._.js +4 -0
- package/.next/standalone/.next/server/chunks/lib_0v84u66._.js +4 -0
- package/.next/standalone/.next/server/chunks/lib_db-client_0_dch35.js +174 -0
- package/.next/standalone/.next/server/chunks/lib_linkedin-export_12imqxg.js +1 -1
- package/.next/standalone/.next/server/chunks/lib_rpc_00nndai.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_03ibb-x.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_03ri3ji.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_078ce48.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0a69mgr.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0c9d9ti.js +7 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0cej3t8.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0cmh4g6.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0nx2_pc.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0r79-w1.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0t552z6.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0yx8ynd.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_12p-o9-.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1466dnb.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1sryxv6.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1trn-x5.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1ygu_mv.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0egamyq._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0qd8pzm._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0qdeuyo._.js → [root-of-the-server]__1-012q1._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_04am_h8._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_06rgzfh._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_07zb7lu._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0_79idq._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0gds903._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0hb-dhy._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0klqt9z._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_14jak5s._.js +7 -0
- package/.next/standalone/.next/server/chunks/ssr/_14nxd3q._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_1cj2yog._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_1fm1ih_._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_1hdqw0-._.js +7 -0
- package/.next/standalone/.next/server/chunks/ssr/_1k2nmbw._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_1r62six._.js +7 -0
- package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_insights_page_actions_0-0tf75.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/app_141w189._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_components_0uuff77._.js +25 -2
- package/.next/standalone/.next/server/chunks/ssr/app_components_1j3q-h5._.js +25 -2
- package/.next/standalone/.next/server/chunks/ssr/app_components_CompanyScores_1g0mytz.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_components_settings_SectorPicker_1c-29qw.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_components_ui_0pdmz2z.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/app_import_page_1fmu6_l.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_insights_page_1d_chja.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/app_launch_page_19t0dyd.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_page_1fazqbf.js +26 -14
- package/.next/standalone/.next/server/chunks/ssr/app_paths_page_1ol90m7.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/app_profile_page_0u3-l5y.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_queue_page_0c6znd6.js +11 -11
- package/.next/standalone/.next/server/chunks/ssr/app_settings_page_1f8mjj_.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_setup_page_1-282zx.js +12 -13
- package/.next/standalone/.next/server/chunks/ssr/app_social_page_0h7zxda.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{lib_1c4ieuw._.js → lib_csv_1ttiu_h.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/lib_galaxy-lab_108_lu-.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/lib_separation_1305zsx.js +3 -0
- package/.next/standalone/.next/server/edge/chunks/[root-of-the-server]__0pco7a6._.js +1 -1
- package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
- package/.next/standalone/.next/server/middleware-manifest.json +5 -5
- package/.next/standalone/.next/server/next-font-manifest.js +1 -1
- package/.next/standalone/.next/server/next-font-manifest.json +4 -0
- package/.next/standalone/.next/server/pages/404.html +1 -1
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/prefetch-hints.json +14 -0
- package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/static/chunks/02wnf8dkxegxg.js +34 -0
- package/.next/standalone/.next/static/chunks/03-_esd2x_yk6.js +1 -0
- package/.next/standalone/.next/static/chunks/03-demj2iy-0p.js +44 -0
- package/.next/standalone/.next/static/chunks/0838_s6w-i_ik.js +1 -0
- package/.next/standalone/.next/static/chunks/0_1r-3csplxnj.js +1 -0
- package/.next/standalone/.next/static/chunks/0ka4prpk3w9wn.js +34 -0
- package/.next/standalone/.next/static/chunks/0kscsqnvfq3-r.js +1 -0
- package/.next/standalone/.next/static/chunks/0s_xxwp7z88vv.js +1 -0
- package/.next/standalone/.next/static/chunks/1-nnl8amfm4yh.js +57 -0
- package/.next/standalone/.next/static/chunks/112mv-com-mqa.js +21 -0
- package/.next/standalone/.next/static/chunks/1bkt_hhjzvbh8.js +1 -0
- package/.next/standalone/.next/static/chunks/1cmphb3kh2ers.css +3 -0
- package/.next/standalone/.next/static/chunks/1d8yv3k_atka7.js +1 -0
- package/.next/standalone/.next/static/chunks/{0ws7zy0w57ufi.js → 1eyajb9ntzlrl.js} +1 -1
- package/.next/standalone/.next/static/chunks/1z9lb-dbcg4aa.js +1 -0
- package/.next/standalone/.next/static/chunks/23hc51oa4vkhc.js +5 -0
- package/.next/standalone/.next/static/chunks/27n8k9wxlz5-7.js +1 -0
- package/.next/standalone/.next/static/chunks/2q9i7pcxcnph1.js +7 -0
- package/.next/standalone/.next/static/chunks/2w-y83mjlpnse.js +1 -0
- package/.next/standalone/.next/static/chunks/2ws1xf293j-tm.js +5 -0
- package/.next/standalone/.next/static/chunks/2z1-q0_vunbql.js +2 -0
- package/.next/standalone/.next/static/chunks/34g73qhayuevu.js +1 -0
- package/.next/standalone/.next/static/chunks/3cqn-r-y5rrw1.js +5 -0
- package/.next/standalone/.next/static/chunks/3opgg1efrx8q6.js +1 -0
- package/.next/standalone/.next/static/chunks/3p51fpxxi4d5y.js +34 -0
- package/.next/standalone/.next/static/chunks/3y40z6of3r9py.js +1 -0
- package/.next/standalone/.next/static/chunks/403dpflln8ah5.js +1 -0
- package/.next/standalone/.next/static/chunks/43pg2sursiypz.js +1 -0
- package/.next/standalone/CHANGELOG.md +203 -0
- package/.next/standalone/README.md +96 -50
- package/.next/standalone/SECURITY.md +25 -11
- package/.next/standalone/app/api/data/backup/route.js +25 -0
- package/.next/standalone/app/api/data/csv/route.js +74 -0
- package/.next/standalone/app/api/data/export/route.js +1 -1
- package/.next/standalone/app/api/data/restore/route.js +48 -0
- package/.next/standalone/app/api/data/reveal/route.js +19 -6
- package/.next/standalone/app/api/data/route.js +15 -4
- package/.next/standalone/app/api/ingest/route.js +1 -1
- package/.next/standalone/app/api/outreach/route.js +13 -73
- package/.next/standalone/app/api/queue/route.js +1 -1
- package/.next/standalone/app/api/scraper/route.js +217 -36
- package/.next/standalone/app/api/social/crm/route.js +2 -1
- package/.next/standalone/app/components/AppHeader.js +41 -21
- package/.next/standalone/app/components/AppTabs.js +12 -8
- package/.next/standalone/app/components/AutoConnect.js +286 -0
- package/.next/standalone/app/components/AutoScanButton.js +2 -2
- package/.next/standalone/app/components/Avatar.js +1 -1
- package/.next/standalone/app/components/ChainView.js +258 -113
- package/.next/standalone/app/components/CirclePanel.js +16 -16
- package/.next/standalone/app/components/ClusterSpinner.js +64 -0
- package/.next/standalone/app/components/CompanyScores.js +20 -20
- package/.next/standalone/app/components/EmptyState.js +39 -18
- package/.next/standalone/app/components/FieldStep.js +15 -13
- package/.next/standalone/app/components/FilterPanel.js +25 -18
- package/.next/standalone/app/components/ForceGraph.js +49 -14
- package/.next/standalone/app/components/GalaxyLab.js +33 -33
- package/.next/standalone/app/components/GridView.js +18 -18
- package/.next/standalone/app/components/LegacyScoresCard.js +10 -11
- package/.next/standalone/app/components/LinkedInLimits.js +57 -27
- package/.next/standalone/app/components/LiquidGlass.js +99 -0
- package/.next/standalone/app/components/ListView.js +20 -20
- package/.next/standalone/app/components/MapControls.js +5 -5
- package/.next/standalone/app/components/MappingProgress.js +16 -16
- package/.next/standalone/app/components/NoteDetail.js +13 -13
- package/.next/standalone/app/components/OnboardingGate.js +4 -4
- package/.next/standalone/app/components/OutlinkQuest.js +56 -35
- package/.next/standalone/app/components/PathsAnalyzer.js +37 -36
- package/.next/standalone/app/components/PeopleMap.js +21 -21
- package/.next/standalone/app/components/RingsView.js +11 -11
- package/.next/standalone/app/components/ScanRadar.js +84 -39
- package/.next/standalone/app/components/ScanStatusBar.js +40 -21
- package/.next/standalone/app/components/ScanTrail.js +21 -8
- package/.next/standalone/app/components/SeparationView.js +172 -124
- package/.next/standalone/app/components/Sidebar.js +308 -199
- package/.next/standalone/app/components/StaleServerBanner.js +4 -4
- package/.next/standalone/app/components/TheirCircle.js +26 -26
- package/.next/standalone/app/components/ThemeDefs.js +42 -0
- package/.next/standalone/app/components/ThemeLoader.js +20 -1
- package/.next/standalone/app/components/UpdatePanel.js +22 -22
- package/.next/standalone/app/components/UserProvider.js +22 -15
- package/.next/standalone/app/components/insights/Boards.js +275 -0
- package/.next/standalone/app/components/insights/PeopleView.js +266 -0
- package/.next/standalone/app/components/insights/Rail.js +156 -0
- package/.next/standalone/app/components/insights/Report.js +382 -0
- package/.next/standalone/app/components/insights/parts.js +239 -0
- package/.next/standalone/app/components/settings/AppearanceSection.js +47 -24
- package/.next/standalone/app/components/settings/DataSection.js +276 -109
- package/.next/standalone/app/components/settings/NetworkHealthSection.js +13 -13
- package/.next/standalone/app/components/settings/SectorPicker.js +12 -12
- package/.next/standalone/app/components/settings/SectorSection.js +13 -14
- package/.next/standalone/app/components/settings/TierSection.js +9 -9
- package/.next/standalone/app/components/settings/TitleSection.js +11 -11
- package/.next/standalone/app/components/settings/UsageSection.js +360 -0
- package/.next/standalone/app/components/ui.js +8 -8
- package/.next/standalone/app/globals.css +161 -5
- package/.next/standalone/app/import/page.js +94 -38
- package/.next/standalone/app/insights/page.js +220 -0
- package/.next/standalone/app/launch/page.js +5 -5
- package/.next/standalone/app/layout.js +6 -2
- package/.next/standalone/app/page.js +53 -53
- package/.next/standalone/app/paths/page.js +63 -63
- package/.next/standalone/app/profile/page.js +58 -58
- package/.next/standalone/app/queue/page.js +84 -72
- package/.next/standalone/app/scores/page.js +2 -2
- package/.next/standalone/app/settings/page.js +16 -13
- package/.next/standalone/app/setup/page.js +236 -133
- package/.next/standalone/app/social/Crm.js +63 -62
- package/.next/standalone/app/social/SocialHub.js +22 -22
- package/.next/standalone/app/social/Thread.js +7 -7
- package/.next/standalone/app/social/page.js +2 -2
- package/.next/standalone/lib/auto-connect.js +145 -0
- package/.next/standalone/lib/backups.js +458 -0
- package/.next/standalone/lib/chain-layout.js +32 -0
- package/.next/standalone/lib/companies.js +1 -1
- package/.next/standalone/lib/csv-store.js +131 -0
- package/.next/standalone/lib/csv.js +137 -39
- package/.next/standalone/lib/data-folder.js +19 -3
- package/.next/standalone/lib/data-import.js +5 -2
- package/.next/standalone/lib/db-client.js +78 -20
- package/.next/standalone/lib/demo.js +5 -4
- package/.next/standalone/lib/galaxy-export.js +9 -2
- package/.next/standalone/lib/galaxy-lab.js +19 -5
- package/.next/standalone/lib/galaxy-layouts.js +43 -0
- package/.next/standalone/lib/gate.js +10 -4
- package/.next/standalone/lib/in-progress.js +46 -0
- package/.next/standalone/lib/ingest.js +1 -1
- package/.next/standalone/lib/insights-board.js +613 -0
- package/.next/standalone/lib/linkedin-limits.js +240 -14
- package/.next/standalone/lib/liquid-glass.js +59 -0
- package/.next/standalone/lib/notifications.js +13 -0
- package/.next/standalone/lib/requests-client.js +10 -0
- package/.next/standalone/lib/requests.js +124 -0
- package/.next/standalone/lib/scan-pace.js +11 -0
- package/.next/standalone/lib/scan-progress.js +20 -0
- package/.next/standalone/lib/scan-risk.js +44 -0
- package/.next/standalone/lib/scan-state.js +1 -0
- package/.next/standalone/lib/scanner-setup.js +97 -15
- package/.next/standalone/lib/scraper-client.js +35 -8
- package/.next/standalone/lib/search-risk.js +7 -3
- package/.next/standalone/lib/settings-client.js +5 -3
- package/.next/standalone/lib/settings.js +13 -0
- package/.next/standalone/lib/social-store.js +3 -2
- package/.next/standalone/lib/synced-setting.js +46 -0
- package/.next/standalone/lib/theme-store.js +42 -10
- package/.next/standalone/lib/themes.js +111 -21
- package/.next/standalone/lib/usage.js +200 -0
- package/.next/standalone/package-lock.json +2 -2
- package/.next/standalone/package.json +1 -1
- package/.next/standalone/scripts/scrape.py +595 -11
- package/.next/static/chunks/02wnf8dkxegxg.js +34 -0
- package/.next/static/chunks/03-_esd2x_yk6.js +1 -0
- package/.next/static/chunks/03-demj2iy-0p.js +44 -0
- package/.next/static/chunks/0838_s6w-i_ik.js +1 -0
- package/.next/static/chunks/0_1r-3csplxnj.js +1 -0
- package/.next/static/chunks/0ka4prpk3w9wn.js +34 -0
- package/.next/static/chunks/0kscsqnvfq3-r.js +1 -0
- package/.next/static/chunks/0s_xxwp7z88vv.js +1 -0
- package/.next/static/chunks/1-nnl8amfm4yh.js +57 -0
- package/.next/static/chunks/112mv-com-mqa.js +21 -0
- package/.next/static/chunks/1bkt_hhjzvbh8.js +1 -0
- package/.next/static/chunks/1cmphb3kh2ers.css +3 -0
- package/.next/static/chunks/1d8yv3k_atka7.js +1 -0
- package/.next/static/chunks/{0ws7zy0w57ufi.js → 1eyajb9ntzlrl.js} +1 -1
- package/.next/static/chunks/1z9lb-dbcg4aa.js +1 -0
- package/.next/static/chunks/23hc51oa4vkhc.js +5 -0
- package/.next/static/chunks/27n8k9wxlz5-7.js +1 -0
- package/.next/static/chunks/2q9i7pcxcnph1.js +7 -0
- package/.next/static/chunks/2w-y83mjlpnse.js +1 -0
- package/.next/static/chunks/2ws1xf293j-tm.js +5 -0
- package/.next/static/chunks/2z1-q0_vunbql.js +2 -0
- package/.next/static/chunks/34g73qhayuevu.js +1 -0
- package/.next/static/chunks/3cqn-r-y5rrw1.js +5 -0
- package/.next/static/chunks/3opgg1efrx8q6.js +1 -0
- package/.next/static/chunks/3p51fpxxi4d5y.js +34 -0
- package/.next/static/chunks/3y40z6of3r9py.js +1 -0
- package/.next/static/chunks/403dpflln8ah5.js +1 -0
- package/.next/static/chunks/43pg2sursiypz.js +1 -0
- package/CHANGELOG.md +203 -0
- package/README.md +96 -50
- package/SECURITY.md +25 -11
- package/lib/auto-connect.js +145 -0
- package/lib/backups.js +458 -0
- package/lib/chain-layout.js +32 -0
- package/lib/companies.js +1 -1
- package/lib/csv-store.js +131 -0
- package/lib/csv.js +137 -39
- package/lib/data-folder.js +19 -3
- package/lib/data-import.js +5 -2
- package/lib/db-client.js +78 -20
- package/lib/demo.js +5 -4
- package/lib/galaxy-export.js +9 -2
- package/lib/galaxy-lab.js +19 -5
- package/lib/galaxy-layouts.js +43 -0
- package/lib/gate.js +10 -4
- package/lib/in-progress.js +46 -0
- package/lib/ingest.js +1 -1
- package/lib/insights-board.js +613 -0
- package/lib/linkedin-limits.js +240 -14
- package/lib/liquid-glass.js +59 -0
- package/lib/notifications.js +13 -0
- package/lib/requests-client.js +10 -0
- package/lib/requests.js +124 -0
- package/lib/scan-pace.js +11 -0
- package/lib/scan-progress.js +20 -0
- package/lib/scan-risk.js +44 -0
- package/lib/scan-state.js +1 -0
- package/lib/scanner-setup.js +97 -15
- package/lib/scraper-client.js +35 -8
- package/lib/search-risk.js +7 -3
- package/lib/settings-client.js +5 -3
- package/lib/settings.js +13 -0
- package/lib/social-store.js +3 -2
- package/lib/synced-setting.js +46 -0
- package/lib/theme-store.js +42 -10
- package/lib/themes.js +111 -21
- package/lib/usage.js +200 -0
- package/package.json +1 -1
- package/scripts/scrape.py +595 -11
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0-rnla2._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__13dx4sd._.js +0 -8
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__14ou7j5._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__16iu0hv._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1kbl21f._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1rphsdk._.js +0 -3
- package/.next/standalone/.next/server/chunks/_02twlca._.js +0 -10
- package/.next/standalone/.next/server/chunks/lib_0851sk0._.js +0 -8
- package/.next/standalone/.next/server/chunks/lib_1q7p2ro._.js +0 -8
- package/.next/standalone/.next/server/chunks/lib_1r6l86l._.js +0 -8
- package/.next/standalone/.next/server/chunks/lib_db-client_15le7cw.js +0 -174
- package/.next/standalone/.next/server/chunks/lib_rpc_04s8mzr.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_053z7as.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_0b_-2te.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_0dhbxdm.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_0dxlk31.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_0f8b-qc.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_0pzie7_.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_0r76fq_.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_0ut7pjp.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_15zyqaz.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_18zpjtq.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_1a8xkiz.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_1e_55xo.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_1oxfd1_.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_1s0lod0.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__08oxiqh._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_03l7vge._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_08g31gm._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0gk_ofx._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0nwsf93._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0vho1lb._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_1-658fq._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_1bc46kz._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_1f_n00p._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_2105jz8._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/app_components_0t908t-._.js +0 -3
- package/.next/standalone/.next/static/chunks/02pq76u7y4v9-.js +0 -22
- package/.next/standalone/.next/static/chunks/0cmq0exd4d0h9.js +0 -1
- package/.next/standalone/.next/static/chunks/0i02yxppzds1o.js +0 -1
- package/.next/standalone/.next/static/chunks/0m_p4k-q2qh--.js +0 -1
- package/.next/standalone/.next/static/chunks/0oyslj62jkubd.js +0 -1
- package/.next/standalone/.next/static/chunks/0vo-l8hxneba6.css +0 -3
- package/.next/standalone/.next/static/chunks/0yh8z2tbrc5i_.js +0 -1
- package/.next/standalone/.next/static/chunks/17-rhp8sg4m1b.js +0 -44
- package/.next/standalone/.next/static/chunks/172e10mi-tpo_.js +0 -34
- package/.next/standalone/.next/static/chunks/1ei5vbe2uw6fl.js +0 -1
- package/.next/standalone/.next/static/chunks/1f7_pl_wq7lh3.js +0 -11
- package/.next/standalone/.next/static/chunks/1jzbe7zdx9vbj.js +0 -2
- package/.next/standalone/.next/static/chunks/1m3017gp790pw.js +0 -45
- package/.next/standalone/.next/static/chunks/1t20e8u0st7ep.js +0 -1
- package/.next/standalone/.next/static/chunks/2-ch9rm27eril.js +0 -11
- package/.next/standalone/.next/static/chunks/2ldv-v3s9yaif.js +0 -1
- package/.next/standalone/.next/static/chunks/3bp284gjf7dyq.js +0 -1
- package/.next/standalone/.next/static/chunks/3k1f6clbn3gj3.js +0 -7
- package/.next/standalone/.next/static/chunks/3l4t8je6iguzc.js +0 -1
- package/.next/standalone/.next/static/chunks/3tplzuc9jk-tl.js +0 -1
- package/.next/standalone/.next/static/chunks/42m0bqr8pbovz.js +0 -11
- package/.next/static/chunks/02pq76u7y4v9-.js +0 -22
- package/.next/static/chunks/0cmq0exd4d0h9.js +0 -1
- package/.next/static/chunks/0i02yxppzds1o.js +0 -1
- package/.next/static/chunks/0m_p4k-q2qh--.js +0 -1
- package/.next/static/chunks/0oyslj62jkubd.js +0 -1
- package/.next/static/chunks/0vo-l8hxneba6.css +0 -3
- package/.next/static/chunks/0yh8z2tbrc5i_.js +0 -1
- package/.next/static/chunks/17-rhp8sg4m1b.js +0 -44
- package/.next/static/chunks/172e10mi-tpo_.js +0 -34
- package/.next/static/chunks/1ei5vbe2uw6fl.js +0 -1
- package/.next/static/chunks/1f7_pl_wq7lh3.js +0 -11
- package/.next/static/chunks/1jzbe7zdx9vbj.js +0 -2
- package/.next/static/chunks/1m3017gp790pw.js +0 -45
- package/.next/static/chunks/1t20e8u0st7ep.js +0 -1
- package/.next/static/chunks/2-ch9rm27eril.js +0 -11
- package/.next/static/chunks/2ldv-v3s9yaif.js +0 -1
- package/.next/static/chunks/3bp284gjf7dyq.js +0 -1
- package/.next/static/chunks/3k1f6clbn3gj3.js +0 -7
- package/.next/static/chunks/3l4t8je6iguzc.js +0 -1
- package/.next/static/chunks/3tplzuc9jk-tl.js +0 -1
- package/.next/static/chunks/42m0bqr8pbovz.js +0 -11
- /package/.next/standalone/.next/static/{dQUvvVSXqbkEFC3-CNcwT → 3NCyJyAPDCEYsYTwF1Ieu}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{dQUvvVSXqbkEFC3-CNcwT → 3NCyJyAPDCEYsYTwF1Ieu}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/.next/static/{dQUvvVSXqbkEFC3-CNcwT → 3NCyJyAPDCEYsYTwF1Ieu}/_ssgManifest.js +0 -0
- /package/.next/static/{dQUvvVSXqbkEFC3-CNcwT → 3NCyJyAPDCEYsYTwF1Ieu}/_buildManifest.js +0 -0
- /package/.next/static/{dQUvvVSXqbkEFC3-CNcwT → 3NCyJyAPDCEYsYTwF1Ieu}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{dQUvvVSXqbkEFC3-CNcwT → 3NCyJyAPDCEYsYTwF1Ieu}/_ssgManifest.js +0 -0
|
@@ -98,6 +98,9 @@ export default function SeparationView({ connections = [], degree2 = [], fullDeg
|
|
|
98
98
|
// The slider, 0 (rarest ways in first) to 100 (easiest first); 50 is power alone.
|
|
99
99
|
// The list follows a deferred copy, so the thumb never waits for a sort.
|
|
100
100
|
const [at, setAt] = useState(SLIDER_MIDDLE);
|
|
101
|
+
// The map's zoom: null fits the whole map in the window (Blake, 2026-10-03: "hard
|
|
102
|
+
// to see the whole graph on the single screen ... at least have a plus and minus").
|
|
103
|
+
const [zoom, setZoom] = useState(null);
|
|
101
104
|
const atSlow = useDeferredValue(at);
|
|
102
105
|
const [tier, setTier] = useState('all');
|
|
103
106
|
// Rarity beside the tier (lib/rarity.js): any bands switched on; none is everyone.
|
|
@@ -244,9 +247,22 @@ export default function SeparationView({ connections = [], degree2 = [], fullDeg
|
|
|
244
247
|
: summitLayout(top, cw || 800, isMobile, { cards })),
|
|
245
248
|
[single, target, top, cw, isMobile, cards, rarityBy],
|
|
246
249
|
);
|
|
247
|
-
const captionH = isMobile ? 58 :
|
|
250
|
+
const captionH = isMobile ? 58 : 36; // fixed, so HEAD is arithmetic; the phone legend takes two lines, a computer's is the tooltip and the zoom
|
|
248
251
|
const NEXT_H = nextUp.length ? 38 : 0;
|
|
249
|
-
|
|
252
|
+
// Fit: as big as it can be with all of it in the window, never bigger than
|
|
253
|
+
// life. A phone scrolls instead, unless you zoom.
|
|
254
|
+
const fitZoom = isMobile ? 1 : Math.max(ZOOM_MIN, Math.min(1, (box.h - captionH - 22 - (single ? NEXT_H : 0)) / Math.max(1, layout.height)));
|
|
255
|
+
// Dynamic (Blake, 2026-10-03: "it should be dynamic"): what the map shows
|
|
256
|
+
// changes — the slider moves, you aim at someone else — and it fits again,
|
|
257
|
+
// whatever zoom you'd set. A new window size re-fits on its own.
|
|
258
|
+
const viewKey = single ? `aim:${target?.key ?? ''}` : `top:${top.map((t) => t.key).join(',')}`;
|
|
259
|
+
const [zoomFor, setZoomFor] = useState(viewKey);
|
|
260
|
+
if (zoomFor !== viewKey) {
|
|
261
|
+
setZoomFor(viewKey);
|
|
262
|
+
if (zoom != null) setZoom(null);
|
|
263
|
+
}
|
|
264
|
+
const scale = zoom ?? fitZoom;
|
|
265
|
+
const mapH = single ? (target ? Math.round(layout.height * scale) + NEXT_H : 0) : Math.round(layout.height * scale);
|
|
250
266
|
const mapBlockH = mapH ? captionH + mapH + 12 : 0;
|
|
251
267
|
const titleH = isMobile ? 0 : TITLE_ROW;
|
|
252
268
|
const HEAD = mapBlockH + titleH + LABEL_ROW;
|
|
@@ -330,16 +346,16 @@ export default function SeparationView({ connections = [], degree2 = [], fullDeg
|
|
|
330
346
|
aria-label="Search people, companies, or who knows them"
|
|
331
347
|
style={{
|
|
332
348
|
width: isMobile ? '100%' : 300, flexShrink: 0, minWidth: 0, height: isMobile ? 44 : 32, boxSizing: 'border-box',
|
|
333
|
-
padding: '0 12px', borderRadius: 8, outline: 'none', color: '#fff',
|
|
349
|
+
padding: '0 12px', borderRadius: 8, outline: 'none', color: 'var(--sd-fg-1, #fff)',
|
|
334
350
|
fontSize: isMobile ? 16 : 13, // under 16px, iOS zooms the page on focus
|
|
335
|
-
border: '1px solid rgba(255,255,255,0.12)', background: 'rgba(255,255,255,0.05)',
|
|
351
|
+
border: '1px solid rgba(var(--sd-ink, 255, 255, 255), 0.12)', background: 'rgba(var(--sd-ink, 255, 255, 255), 0.05)',
|
|
336
352
|
}}
|
|
337
353
|
/>
|
|
338
354
|
);
|
|
339
355
|
// "Only show": the rarity chips, beside the tiers on a computer, on their own row on a phone.
|
|
340
356
|
const rarityChips = (
|
|
341
357
|
<>
|
|
342
|
-
<span title={RARITY_NOTE} style={{ fontSize: 10, color: '#666', whiteSpace: 'nowrap', flexShrink: 0, textTransform: 'uppercase', letterSpacing: 0.5, cursor: 'help' }}>Only show</span>
|
|
358
|
+
<span title={RARITY_NOTE} style={{ fontSize: 10, color: 'var(--sd-fg-4, #666)', whiteSpace: 'nowrap', flexShrink: 0, textTransform: 'uppercase', letterSpacing: 0.5, cursor: 'help' }}>Only show</span>
|
|
343
359
|
{RARITY.map((r) => {
|
|
344
360
|
const on = rarities.has(r.key);
|
|
345
361
|
return (
|
|
@@ -347,12 +363,12 @@ export default function SeparationView({ connections = [], degree2 = [], fullDeg
|
|
|
347
363
|
title={`${r.label}: ${r.range} mutual connection${r.range === '1' ? '' : 's'}. ${RARITY_NOTE}`} style={{
|
|
348
364
|
height: isMobile ? 40 : 28, padding: isMobile ? '0 10px' : '0 8px', borderRadius: 14, cursor: 'pointer', flexShrink: 0,
|
|
349
365
|
fontSize: 11.5, fontWeight: 700, whiteSpace: 'nowrap',
|
|
350
|
-
border: `1px solid ${on ? r.color : 'rgba(255,255,255,0.1)'}`,
|
|
351
|
-
background: on ? `${r.color}22` : 'rgba(255,255,255,0.03)',
|
|
352
|
-
color: on ? r.color : '#999',
|
|
366
|
+
border: `1px solid ${on ? r.color : 'rgba(var(--sd-ink, 255, 255, 255), 0.1)'}`,
|
|
367
|
+
background: on ? `${r.color}22` : 'rgba(var(--sd-ink, 255, 255, 255), 0.03)',
|
|
368
|
+
color: on ? r.color : 'var(--sd-fg-3, #999)',
|
|
353
369
|
}}>
|
|
354
370
|
{r.label}
|
|
355
|
-
<span style={{ marginLeft: 5, fontWeight: 500, color: on ? r.color : '#666', opacity: 0.85 }}>{fmt(byRarity[r.key])}</span>
|
|
371
|
+
<span style={{ marginLeft: 5, fontWeight: 500, color: on ? r.color : 'var(--sd-fg-4, #666)', opacity: 0.85 }}>{fmt(byRarity[r.key])}</span>
|
|
356
372
|
</button>
|
|
357
373
|
);
|
|
358
374
|
})}
|
|
@@ -362,36 +378,21 @@ export default function SeparationView({ connections = [], degree2 = [], fullDeg
|
|
|
362
378
|
return (
|
|
363
379
|
<div style={{
|
|
364
380
|
flex: 1, minWidth: 0, display: 'flex', flexDirection: 'column',
|
|
365
|
-
background: 'var(--sd-page)', color: '#fff', overflow: 'hidden',
|
|
381
|
+
background: 'var(--sd-page)', color: 'var(--sd-fg-1, #fff)', overflow: 'hidden',
|
|
366
382
|
}}>
|
|
367
|
-
{/* ──
|
|
383
|
+
{/* ── Top: the search box, and on a phone what it ranks ── */}
|
|
368
384
|
<div style={{ padding: `${notch ? 48 : 14}px ${SIDE}px 8px`, flexShrink: 0 }}>
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
}}>Separation</h2>
|
|
375
|
-
<span style={{ fontSize: 12, color: '#aaa', ...(isMobile ? {} : { flex: 1, minWidth: 0, whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' }) }}>
|
|
376
|
-
{isMobile
|
|
377
|
-
? `${plural(summary.people, 'person', 'people')} · ${fmt(summary.byTier.S)} S · ${fmt(summary.multi)} with 2+ ways`
|
|
378
|
-
: `${plural(summary.people, 'person', 'people')} two steps away · ${fmt(summary.byTier.S)} S-tier · ${fmt(summary.multi)} reachable 2+ ways · through ${fmt(summary.bridges)} of your connections`}
|
|
379
|
-
</span>
|
|
380
|
-
{!isMobile && searchBox}
|
|
381
|
-
</div>
|
|
382
|
-
{/* The whole population at a glance: one segment per tier, to scale. */}
|
|
383
|
-
<div aria-hidden="true" style={{ display: 'flex', gap: 1, height: 6, borderRadius: 3, overflow: 'hidden', margin: '8px 0 6px', background: 'rgba(255,255,255,0.04)' }}>
|
|
384
|
-
{TIERS.filter((t) => summary.byTier[t] > 0).map((t) => (
|
|
385
|
-
<div key={t} style={{ flex: summary.byTier[t], background: tierColors[t] || '#555' }} />
|
|
386
|
-
))}
|
|
387
|
-
</div>
|
|
388
|
-
{/* On a computer the line says it on its own; what it ranks is the title's tooltip (RANK_NOTE). */}
|
|
385
|
+
{/* Blake, 2026-10-03: no title, count line or tier strip up here ("remove this
|
|
386
|
+
line of text … and the actual line of visual of the tiers"); the map and the
|
|
387
|
+
slider say it. The search box keeps the row. */}
|
|
388
|
+
{!isMobile && <div style={{ display: 'flex', justifyContent: 'flex-end' }}>{searchBox}</div>}
|
|
389
|
+
{/* What it ranks, on a phone, where there's room under the search box. */}
|
|
389
390
|
{isMobile && (
|
|
390
|
-
<div style={{ fontSize: 11, color: '#777', lineHeight: 1.4 }}>Ranks reachability, not people · lists scanned so far</div>
|
|
391
|
+
<div style={{ fontSize: 11, color: 'var(--sd-fg-4, #777)', lineHeight: 1.4 }}>Ranks reachability, not people · lists scanned so far</div>
|
|
391
392
|
)}
|
|
392
393
|
{summary.peopleOnlyUnresolved > 0 && (
|
|
393
394
|
<div style={{
|
|
394
|
-
marginTop: 8, padding: '8px 10px', borderRadius: 8, fontSize: 11.5, lineHeight: 1.5, color: '#e8d9a0',
|
|
395
|
+
marginTop: 8, padding: '8px 10px', borderRadius: 8, fontSize: 11.5, lineHeight: 1.5, color: 'var(--sd-fg-2, #e8d9a0)',
|
|
395
396
|
background: 'rgba(255,215,0,0.06)', border: '1px solid rgba(255,215,0,0.25)',
|
|
396
397
|
}}>
|
|
397
398
|
{/* Worded without a cause on purpose: the one time this happened, the
|
|
@@ -406,12 +407,12 @@ export default function SeparationView({ connections = [], degree2 = [], fullDeg
|
|
|
406
407
|
</div>
|
|
407
408
|
|
|
408
409
|
{/* ── Controls: search, then the slider with their tier and rarity ── */}
|
|
409
|
-
<div style={{ padding: `0 ${SIDE}px 10px`, flexShrink: 0, borderBottom: '1px solid rgba(255,255,255,0.06)' }}>
|
|
410
|
+
<div style={{ padding: `0 ${SIDE}px 10px`, flexShrink: 0, borderBottom: '1px solid rgba(var(--sd-ink, 255, 255, 255), 0.06)' }}>
|
|
410
411
|
<style>{SLIDER_CSS}</style>
|
|
411
412
|
{isMobile && searchBox}
|
|
412
413
|
<div style={{
|
|
413
414
|
marginTop: isMobile ? 8 : 2, padding: isMobile ? '8px 10px' : '8px 14px', borderRadius: 12, position: 'relative',
|
|
414
|
-
border: '1px solid rgba(255,255,255,0.08)', background: 'rgba(255,255,255,0.025)',
|
|
415
|
+
border: '1px solid rgba(var(--sd-ink, 255, 255, 255), 0.08)', background: 'rgba(var(--sd-ink, 255, 255, 255), 0.025)',
|
|
415
416
|
}}>
|
|
416
417
|
{pathOpen && (
|
|
417
418
|
<PathPicker facets={facets} text={pathText} onText={setPathText} isMobile={isMobile}
|
|
@@ -420,21 +421,21 @@ export default function SeparationView({ connections = [], degree2 = [], fullDeg
|
|
|
420
421
|
<div style={{ display: 'flex', alignItems: 'center', gap: isMobile ? 8 : 6, flexWrap: isMobile ? 'nowrap' : 'wrap', minWidth: 0,
|
|
421
422
|
// A phone scrolls this strip sideways, so the page itself never does.
|
|
422
423
|
overflowX: isMobile ? 'auto' : 'visible', scrollbarWidth: 'thin' }}>
|
|
423
|
-
<span style={{ fontSize: 10, color: '#666', whiteSpace: 'nowrap', flexShrink: 0, textTransform: 'uppercase', letterSpacing: 0.5 }}>Their tier</span>
|
|
424
|
+
<span style={{ fontSize: 10, color: 'var(--sd-fg-4, #666)', whiteSpace: 'nowrap', flexShrink: 0, textTransform: 'uppercase', letterSpacing: 0.5 }}>Their tier</span>
|
|
424
425
|
{['all', ...TIERS].map((t) => {
|
|
425
426
|
const on = tier === t;
|
|
426
|
-
const c = t === 'all' ? '#fff' : tierColors[t] || '#888';
|
|
427
|
+
const c = t === 'all' ? 'var(--sd-fg-1, #fff)' : tierColors[t] || '#888';
|
|
427
428
|
const n = t === 'all' ? summary.people : summary.byTier[t];
|
|
428
429
|
return (
|
|
429
430
|
<button key={t} type="button" aria-pressed={on} onClick={() => changeTier(t)} style={{
|
|
430
431
|
height: isMobile ? 40 : 28, padding: isMobile ? '0 10px' : '0 8px', borderRadius: 14, cursor: 'pointer', flexShrink: 0,
|
|
431
432
|
fontSize: 12, fontWeight: 700, whiteSpace: 'nowrap',
|
|
432
|
-
border: `1px solid ${on ? c : 'rgba(255,255,255,0.1)'}`,
|
|
433
|
-
background: on ?
|
|
434
|
-
color: on ? c : '#999',
|
|
433
|
+
border: `1px solid ${on ? c : 'rgba(var(--sd-ink, 255, 255, 255), 0.1)'}`,
|
|
434
|
+
background: on ? (t === 'all' ? 'rgba(var(--sd-ink, 255, 255, 255), 0.13)' : `${c}22`) : 'rgba(var(--sd-ink, 255, 255, 255), 0.03)',
|
|
435
|
+
color: on ? c : 'var(--sd-fg-3, #999)',
|
|
435
436
|
}}>
|
|
436
437
|
{t === 'all' ? 'All' : t}
|
|
437
|
-
<span style={{ marginLeft: 5, fontWeight: 500, color: on ? c : '#666', opacity: 0.85 }}>{fmt(n)}</span>
|
|
438
|
+
<span style={{ marginLeft: 5, fontWeight: 500, color: on ? c : 'var(--sd-fg-4, #666)', opacity: 0.85 }}>{fmt(n)}</span>
|
|
438
439
|
</button>
|
|
439
440
|
);
|
|
440
441
|
})}
|
|
@@ -446,7 +447,7 @@ export default function SeparationView({ connections = [], degree2 = [], fullDeg
|
|
|
446
447
|
padding: path ? '0 6px 0 12px' : '0 12px', border: 'none', background: 'none', cursor: 'pointer',
|
|
447
448
|
fontSize: 12, fontWeight: 700, whiteSpace: 'nowrap', color: PATH, maxWidth: isMobile ? 200 : 300, overflow: 'hidden', textOverflow: 'ellipsis',
|
|
448
449
|
}}>
|
|
449
|
-
{path ? <>Path<span style={{ fontWeight: 500, color: '#cfe' }}> · {path.label}</span></> : 'Path ▾'}
|
|
450
|
+
{path ? <>Path<span style={{ fontWeight: 500, color: 'var(--sd-fg-1, #cfe)' }}> · {path.label}</span></> : 'Path ▾'}
|
|
450
451
|
</button>
|
|
451
452
|
{path && (
|
|
452
453
|
<button type="button" aria-label={`Clear the path: ${path.label}`} onClick={() => pickPath(null)} style={{
|
|
@@ -455,7 +456,7 @@ export default function SeparationView({ connections = [], degree2 = [], fullDeg
|
|
|
455
456
|
)}
|
|
456
457
|
</span>
|
|
457
458
|
{!isMobile && <>
|
|
458
|
-
<span aria-hidden="true" style={{ width: 1, height: 18, background: 'rgba(255,255,255,0.12)', margin: '0 2px' }} />
|
|
459
|
+
<span aria-hidden="true" style={{ width: 1, height: 18, background: 'rgba(var(--sd-ink, 255, 255, 255), 0.12)', margin: '0 2px' }} />
|
|
459
460
|
{rarityChips}
|
|
460
461
|
</>}
|
|
461
462
|
{isMobile && pillEl}
|
|
@@ -464,9 +465,9 @@ export default function SeparationView({ connections = [], degree2 = [], fullDeg
|
|
|
464
465
|
{/* The slider: the rarest ways in at one end, the easiest at the other, power alone in the middle */}
|
|
465
466
|
{/* On a computer the pill saying where the slider is sits over its middle, in place of "Power" */}
|
|
466
467
|
<div style={{ display: 'flex', justifyContent: 'space-between', alignItems: isMobile ? 'baseline' : 'center', marginTop: 8, fontSize: 10.5, fontWeight: 800, letterSpacing: 0.5, textTransform: 'uppercase' }}>
|
|
467
|
-
<span style={{ color:
|
|
468
|
-
{isMobile ? <span style={{ color: '#FFD700' }}>Power</span> : pillEl}
|
|
469
|
-
<span style={{ color:
|
|
468
|
+
<span style={{ color: 'var(--sd-cyan, #00E5FF)', flex: isMobile ? undefined : 1 }}>Rare{isMobile ? '' : ' · one way in'}</span>
|
|
469
|
+
{isMobile ? <span style={{ color: 'var(--sd-gold, #FFD700)' }}>Power</span> : pillEl}
|
|
470
|
+
<span style={{ color: 'var(--sd-coral, #FF7043)', flex: isMobile ? undefined : 1, textAlign: 'right' }}>Easy{isMobile ? '' : ' · many mutual connections'}</span>
|
|
470
471
|
</div>
|
|
471
472
|
<input
|
|
472
473
|
className="sepslide" type="range" min={0} max={100} step={1} value={at}
|
|
@@ -480,13 +481,13 @@ export default function SeparationView({ connections = [], degree2 = [], fullDeg
|
|
|
480
481
|
{[[0, 'Rarest'], [25, ''], [SLIDER_MIDDLE, 'By power'], [75, ''], [100, 'Easiest']].map(([v, name]) => (
|
|
481
482
|
<button key={v} type="button" onClick={() => changeAt(v)} aria-label={`Set the slider to ${v}${name ? `: ${name}` : ''}`} style={{
|
|
482
483
|
padding: '2px 4px', border: 'none', background: 'none', cursor: 'pointer', fontSize: 10,
|
|
483
|
-
color: at === v ? '#fff' : '#667', fontWeight: at === v ? 700 : 500, fontVariantNumeric: 'tabular-nums',
|
|
484
|
+
color: at === v ? 'var(--sd-fg-1, #fff)' : 'var(--sd-fg-4, #667)', fontWeight: at === v ? 700 : 500, fontVariantNumeric: 'tabular-nums',
|
|
484
485
|
}}>{v}{name && !isMobile ? ` · ${name}` : ''}</button>
|
|
485
486
|
))}
|
|
486
487
|
</div>
|
|
487
488
|
{/* On a phone: the sentence, and the rarity chips on a row of their own */}
|
|
488
489
|
{isMobile && <>
|
|
489
|
-
<div style={{ marginTop: 4, fontSize: 11.5, lineHeight: 1.45, color: '#bbb' }}>
|
|
490
|
+
<div style={{ marginTop: 4, fontSize: 11.5, lineHeight: 1.45, color: 'var(--sd-fg-2, #bbb)' }}>
|
|
490
491
|
<span style={{ color: slideColor, fontWeight: 700 }}>{slide.name}.</span>{' '}{slide.detail}
|
|
491
492
|
</div>
|
|
492
493
|
<div style={{ display: 'flex', alignItems: 'center', gap: 8, marginTop: 8, minWidth: 0, flexWrap: 'nowrap',
|
|
@@ -505,25 +506,30 @@ export default function SeparationView({ connections = [], degree2 = [], fullDeg
|
|
|
505
506
|
>
|
|
506
507
|
<div style={{ position: 'relative', maxWidth: 980, margin: '0 auto', height: total }}>
|
|
507
508
|
{mapBlockH > 0 && (
|
|
508
|
-
<div style={{ height: mapBlockH, boxSizing: 'border-box', paddingTop: 10 }}>
|
|
509
|
-
<div style={{ height: captionH - 10, overflow: 'hidden' }}>
|
|
509
|
+
<div className="sepblock" style={{ height: mapBlockH, boxSizing: 'border-box', paddingTop: 10 }}>
|
|
510
|
+
<div style={{ height: captionH - 10, overflow: 'hidden', display: isMobile ? 'block' : 'flex', alignItems: 'flex-start', gap: 10 }}>
|
|
510
511
|
<div title={isMobile ? undefined : `${!single && askedShown > 0 ? `${fmt(askedShown)} asked or connected, so it moved on. ` : ''}Solid orange: the top-scored bridge. Dashed: other routes.${single ? ' Pick anyone in the list to aim at them instead.' : cards ? ' A lit pill is someone’s best way in.' : ' Dot size: ways in.'}`}
|
|
511
|
-
style={{ fontSize: 12, fontWeight: 700, color: '#ddd', whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' }}>
|
|
512
|
+
style={{ flex: 1, minWidth: 0, fontSize: 12, fontWeight: 700, color: 'var(--sd-fg-1, #ddd)', whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' }}>
|
|
512
513
|
{single
|
|
513
514
|
? <>Aiming at {target.person.name} · {layout.unscanned
|
|
514
515
|
? `${fmt(target.waysIn + layout.unscanned)} mutual connections: ${fmt(target.waysIn)} drawn, ${fmt(layout.unscanned)} in circles not scanned yet`
|
|
515
516
|
: target.waysIn === 1 ? 'the one connection of yours who leads to them' : `all ${fmt(target.waysIn)} connections of yours who lead to them`}</>
|
|
516
517
|
: <>Top {fmt(top.length)} you haven’t asked, of {fmt(visible.length)}{filtered ? ' shown' : ''}{at !== SLIDER_MIDDLE ? ` · ${slide.name.toLowerCase()}` : ''} · every way in drawn</>}
|
|
517
518
|
</div>
|
|
518
|
-
{isMobile && <
|
|
519
|
-
|
|
520
|
-
|
|
519
|
+
{!isMobile && <ZoomControl scale={scale} fitted={zoom == null}
|
|
520
|
+
onOut={() => setZoom(Math.max(ZOOM_MIN, Math.round((scale - 0.1) * 10) / 10))}
|
|
521
|
+
onFit={() => setZoom(null)}
|
|
522
|
+
onIn={() => setZoom(Math.min(ZOOM_MAX, Math.round((scale + 0.1) * 10) / 10))} />}
|
|
523
|
+
{isMobile && <div style={{ fontSize: 10, color: 'var(--sd-fg-4, #777)', marginTop: 2, whiteSpace: 'normal', overflow: 'hidden', textOverflow: 'ellipsis', lineHeight: 1.35 }}>
|
|
524
|
+
{!single && askedShown > 0 && <span style={{ color: 'var(--sd-gold, #FFD700)' }}>{fmt(askedShown)} asked or connected, so it moved on · </span>}
|
|
525
|
+
<span style={{ color: 'var(--sd-orange, #FF6B35)' }}>solid orange</span> = top-scored bridge · dashed = other routes
|
|
521
526
|
{single ? ' · pick anyone in the list to aim at them instead' : cards ? ' · a lit pill is someone’s best way in' : ' · dot size = ways in'}
|
|
522
527
|
</div>}
|
|
523
528
|
</div>
|
|
524
529
|
{cw > 0 && (
|
|
525
530
|
<SummitMap
|
|
526
531
|
layout={layout}
|
|
532
|
+
scale={scale}
|
|
527
533
|
selectedKey={selectedKey}
|
|
528
534
|
tierColors={tierColors}
|
|
529
535
|
youLabel={youLabel}
|
|
@@ -540,17 +546,17 @@ export default function SeparationView({ connections = [], degree2 = [], fullDeg
|
|
|
540
546
|
<>
|
|
541
547
|
{nextUp.length > 0 && (
|
|
542
548
|
<div style={{ height: NEXT_H, display: 'flex', alignItems: 'center', gap: 6, overflow: 'hidden' }}>
|
|
543
|
-
<span style={{ fontSize: 10, color: '#666', textTransform: 'uppercase', letterSpacing: 0.5, flexShrink: 0 }}>Next</span>
|
|
549
|
+
<span style={{ fontSize: 10, color: 'var(--sd-fg-4, #666)', textTransform: 'uppercase', letterSpacing: 0.5, flexShrink: 0 }}>Next</span>
|
|
544
550
|
{nextUp.map((p) => (
|
|
545
551
|
<button key={p.key} type="button" onClick={() => onPick(p)} title={`Aim at ${p.person.name}`} style={{
|
|
546
552
|
height: 26, padding: '0 10px', borderRadius: 13, cursor: 'pointer', flexShrink: 1, minWidth: 0,
|
|
547
553
|
fontSize: 11, fontWeight: 600, whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis',
|
|
548
|
-
border: `1px solid ${(tierColors[p.tier] || '#888')}55`, background: 'rgba(255,255,255,0.03)', color: '#ccc',
|
|
554
|
+
border: `1px solid ${(tierColors[p.tier] || '#888')}55`, background: 'rgba(var(--sd-ink, 255, 255, 255), 0.03)', color: 'var(--sd-fg-2, #ccc)',
|
|
549
555
|
}}>
|
|
550
556
|
{shortName(p.person.name)}
|
|
551
557
|
<span style={{ marginLeft: 5, color: tierColors[p.tier] || '#888', fontWeight: 700 }}>{p.score.toFixed(1)}</span>
|
|
552
558
|
{/* The count they're ordered by: every mutual, scanned or not */}
|
|
553
|
-
<span style={{ marginLeft: 5, color: '#667', fontWeight: 500 }}>
|
|
559
|
+
<span style={{ marginLeft: 5, color: 'var(--sd-fg-4, #667)', fontWeight: 500 }}>
|
|
554
560
|
{(() => { const n = Math.max(rarityBy.get(p.key)?.count || 0, p.waysIn); return n === 1 ? '1 mutual' : `${fmt(n)} mutuals`; })()}
|
|
555
561
|
</span>
|
|
556
562
|
</button>
|
|
@@ -565,13 +571,13 @@ export default function SeparationView({ connections = [], degree2 = [], fullDeg
|
|
|
565
571
|
{visible.length > 0 && !isMobile && (
|
|
566
572
|
<div style={{
|
|
567
573
|
height: TITLE_ROW, display: 'flex', alignItems: 'center', gap: 10, padding: '0 12px 0 15px', boxSizing: 'border-box',
|
|
568
|
-
borderTop: '1px solid rgba(255,255,255,0.06)',
|
|
574
|
+
borderTop: '1px solid rgba(var(--sd-ink, 255, 255, 255), 0.06)',
|
|
569
575
|
}}>
|
|
570
576
|
<span style={{ fontSize: 15, fontWeight: 800 }}>Ranked by reach</span>
|
|
571
577
|
<span style={{ fontSize: 11, fontWeight: 800, color: '#000', background: '#FFD700', borderRadius: 10, padding: '2px 8px' }}>
|
|
572
578
|
{fmt(visible.length)}{filtered ? ` of ${fmt(summary.people)}` : ''}
|
|
573
579
|
</span>
|
|
574
|
-
<span style={{ marginLeft: 'auto', fontSize: 11, color: '#777' }}>
|
|
580
|
+
<span style={{ marginLeft: 'auto', fontSize: 11, color: 'var(--sd-fg-4, #777)' }}>
|
|
575
581
|
order follows the slider · <span style={{ color: slideColor }}>{slide.name.toLowerCase()}</span>
|
|
576
582
|
</span>
|
|
577
583
|
</div>
|
|
@@ -580,8 +586,8 @@ export default function SeparationView({ connections = [], degree2 = [], fullDeg
|
|
|
580
586
|
<div style={{
|
|
581
587
|
height: LABEL_ROW, display: 'grid', alignItems: 'center', gap: 10, padding: '0 12px 0 15px',
|
|
582
588
|
gridTemplateColumns: isMobile ? '44px 36px 1fr 44px' : COLUMNS,
|
|
583
|
-
fontSize: 9, fontWeight: 700, color: '#555', textTransform: 'uppercase', letterSpacing: 0.5,
|
|
584
|
-
borderBottom: '1px solid rgba(255,255,255,0.08)', boxSizing: 'border-box',
|
|
589
|
+
fontSize: 9, fontWeight: 700, color: 'var(--sd-fg-5, #555)', textTransform: 'uppercase', letterSpacing: 0.5,
|
|
590
|
+
borderBottom: '1px solid rgba(var(--sd-ink, 255, 255, 255), 0.08)', boxSizing: 'border-box',
|
|
585
591
|
}}>
|
|
586
592
|
<span title="Rank by score, then ways in. = means tied">#</span>
|
|
587
593
|
<span />
|
|
@@ -607,14 +613,14 @@ export default function SeparationView({ connections = [], degree2 = [], fullDeg
|
|
|
607
613
|
))}
|
|
608
614
|
|
|
609
615
|
{visible.length === 0 && (
|
|
610
|
-
<div style={{ position: 'absolute', top: 40, left: 0, right: 0, textAlign: 'center', color: '#888', fontSize: 13, padding: '0 16px' }}>
|
|
616
|
+
<div style={{ position: 'absolute', top: 40, left: 0, right: 0, textAlign: 'center', color: 'var(--sd-fg-3, #888)', fontSize: 13, padding: '0 16px' }}>
|
|
611
617
|
{q
|
|
612
618
|
? <>No one matches ‘{query.trim()}’. Search covers names, headlines, companies and who knows them.</>
|
|
613
619
|
: <>No one here with those filters.</>}
|
|
614
620
|
<div style={{ marginTop: 12 }}>
|
|
615
621
|
<button type="button" onClick={clearAll} style={{
|
|
616
622
|
padding: '8px 16px', borderRadius: 8, cursor: 'pointer', fontSize: 12, fontWeight: 700,
|
|
617
|
-
border: '1px solid rgba(255,255,255,0.15)', background: 'rgba(255,255,255,0.06)', color: '#fff',
|
|
623
|
+
border: '1px solid rgba(var(--sd-ink, 255, 255, 255), 0.15)', background: 'rgba(var(--sd-ink, 255, 255, 255), 0.06)', color: 'var(--sd-fg-1, #fff)',
|
|
618
624
|
}}>Clear</button>
|
|
619
625
|
</div>
|
|
620
626
|
</div>
|
|
@@ -625,6 +631,41 @@ export default function SeparationView({ connections = [], degree2 = [], fullDeg
|
|
|
625
631
|
);
|
|
626
632
|
}
|
|
627
633
|
|
|
634
|
+
// ── Zoom ───────────────────────────────────────────────────────────────────
|
|
635
|
+
// Low enough that even aiming at someone with dozens of ways in fits the window
|
|
636
|
+
// whole: the layout stays as it is, only smaller (Blake, 2026-10-03: "it should
|
|
637
|
+
// just be more zoomed out").
|
|
638
|
+
const ZOOM_MIN = 0.15;
|
|
639
|
+
const ZOOM_MAX = 1.5;
|
|
640
|
+
|
|
641
|
+
/** − | Fit | +, one segmented control as a Mac draws one. The middle says the zoom once you've changed it. */
|
|
642
|
+
function ZoomControl({ scale, fitted, onOut, onFit, onIn }) {
|
|
643
|
+
const seg = (extra = {}) => ({
|
|
644
|
+
height: 22, minWidth: 26, padding: '0 7px', border: 'none', background: 'none', color: 'var(--sd-fg-2, #c9cdd6)',
|
|
645
|
+
fontSize: 12, fontWeight: 600, lineHeight: 1, cursor: 'pointer', display: 'flex', alignItems: 'center', justifyContent: 'center',
|
|
646
|
+
...extra,
|
|
647
|
+
});
|
|
648
|
+
const line = { width: 1, alignSelf: 'stretch', margin: '4px 0', background: 'rgba(var(--sd-ink, 255, 255, 255), 0.14)' };
|
|
649
|
+
return (
|
|
650
|
+
<div role="group" aria-label="Zoom the map" style={{
|
|
651
|
+
display: 'inline-flex', alignItems: 'center', flexShrink: 0, borderRadius: 7, overflow: 'hidden',
|
|
652
|
+
background: 'rgba(var(--sd-ink, 255, 255, 255), 0.07)', border: '1px solid rgba(var(--sd-ink, 255, 255, 255), 0.13)',
|
|
653
|
+
boxShadow: '0 1px 0 rgba(var(--sd-ink, 255, 255, 255), 0.05) inset, 0 1px 2px rgba(0,0,0,0.35)',
|
|
654
|
+
}}>
|
|
655
|
+
<button type="button" onClick={onOut} disabled={scale <= ZOOM_MIN + 0.001} title="Zoom out" aria-label="Zoom out"
|
|
656
|
+
style={seg({ fontSize: 15, opacity: scale <= ZOOM_MIN + 0.001 ? 0.35 : 1 })}>−</button>
|
|
657
|
+
<span style={line} />
|
|
658
|
+
<button type="button" onClick={onFit} title={fitted ? 'The whole map fits the window' : 'Fit the whole map in the window'}
|
|
659
|
+
style={seg({ minWidth: 44, fontSize: 11, fontVariantNumeric: 'tabular-nums', color: fitted ? 'var(--sd-fg-3, #8f96a3)' : 'var(--sd-fg-1, #e6e9ef)' })}>
|
|
660
|
+
{fitted ? 'Fit' : `${Math.round(scale * 100)}%`}
|
|
661
|
+
</button>
|
|
662
|
+
<span style={line} />
|
|
663
|
+
<button type="button" onClick={onIn} disabled={scale >= ZOOM_MAX - 0.001} title="Zoom in" aria-label="Zoom in"
|
|
664
|
+
style={seg({ fontSize: 15, opacity: scale >= ZOOM_MAX - 0.001 ? 0.35 : 1 })}>+</button>
|
|
665
|
+
</div>
|
|
666
|
+
);
|
|
667
|
+
}
|
|
668
|
+
|
|
628
669
|
// ── The summit map ─────────────────────────────────────────────────────────
|
|
629
670
|
// A plain React <svg>: no d3, no canvas, no zoom — at most about 150 elements
|
|
630
671
|
// whatever the network's size. Hover is pure CSS from the scoped <style>, so a
|
|
@@ -644,13 +685,16 @@ const MAP_CSS = `
|
|
|
644
685
|
.sepmap .mv { transition: transform ${MOVE}; }
|
|
645
686
|
.sepmap .rt, .sepmap .spk { transition: d ${MOVE}, stroke-opacity .12s; }
|
|
646
687
|
.sepmap .in { animation: sepIn .3s ease-out both; }
|
|
688
|
+
/* The zoom glides too, and the list under the map with it. */
|
|
689
|
+
.sepmap { transition: width ${MOVE}, height ${MOVE}; }
|
|
690
|
+
.sepblock { transition: height ${MOVE}; }
|
|
691
|
+
.seprow { transition: top ${MOVE}; }
|
|
647
692
|
@keyframes sepIn { from { opacity: 0; } to { opacity: 1; } }
|
|
648
693
|
@media (prefers-reduced-motion: reduce) {
|
|
649
|
-
.sepmap .mv, .sepmap .rt, .sepmap .spk { transition: none; }
|
|
694
|
+
.sepmap .mv, .sepmap .rt, .sepmap .spk, .sepmap, .sepblock, .seprow { transition: none; }
|
|
650
695
|
.sepmap .in { animation: none; }
|
|
651
696
|
}
|
|
652
697
|
`;
|
|
653
|
-
const RANK_NOTE = 'Ranked by each person’s own score (title, company, headline). It ranks reachability, not people. From the lists scanned so far.';
|
|
654
698
|
const HALO = { paintOrder: 'stroke', stroke: 'var(--sd-bg)', strokeWidth: 3, strokeLinejoin: 'round' };
|
|
655
699
|
const at = (x, y) => ({ transform: `translate(${x}px, ${y}px)` });
|
|
656
700
|
|
|
@@ -666,7 +710,7 @@ function waysTag(p, mutuals) {
|
|
|
666
710
|
return p.waysIn === 1 ? { text: 'only way in', rare: true, more: 0 } : { text: `${fmt(p.waysIn)} ways in`, rare: false, more: 0 };
|
|
667
711
|
}
|
|
668
712
|
|
|
669
|
-
const SummitMap = memo(function SummitMap({ layout, selectedKey, tierColors, youLabel, isMobile, onPick, onPickBridge, mutualsBy, doors = false, cards = false }) {
|
|
713
|
+
const SummitMap = memo(function SummitMap({ layout, scale = 1, selectedKey, tierColors, youLabel, isMobile, onPick, onPickBridge, mutualsBy, doors = false, cards = false }) {
|
|
670
714
|
const { width, height, you, people, bridges, links, spokes, ghosts = [], unscanned = 0, ghostLabel = null, drawn = 1 } = layout;
|
|
671
715
|
const linksBy = useMemo(() => {
|
|
672
716
|
const m = new Map();
|
|
@@ -677,7 +721,10 @@ const SummitMap = memo(function SummitMap({ layout, selectedKey, tierColors, you
|
|
|
677
721
|
const fs = isMobile ? 12 : 11;
|
|
678
722
|
|
|
679
723
|
return (
|
|
680
|
-
|
|
724
|
+
// Drawn at its own size and scaled whole by the viewBox, so zooming never
|
|
725
|
+
// lays it out again and everything stays sharp.
|
|
726
|
+
<svg className="sepmap" width={Math.round(width * scale)} height={Math.round(height * scale)} viewBox={`0 0 ${width} ${height}`} aria-hidden="true"
|
|
727
|
+
style={{ display: 'block', overflow: 'visible', margin: '0 auto', width: Math.round(width * scale), height: Math.round(height * scale) }}>
|
|
681
728
|
<style>{MAP_CSS}</style>
|
|
682
729
|
<defs>
|
|
683
730
|
<linearGradient id="sepYouGrad" x1="0" y1="0" x2="1" y2="1">
|
|
@@ -709,7 +756,7 @@ const SummitMap = memo(function SummitMap({ layout, selectedKey, tierColors, you
|
|
|
709
756
|
})}
|
|
710
757
|
{ghosts.map((g, i) => <circle key={`gd-${i}`} cx={g.x} cy={g.y} r={3.3} fill="#4a4f68" stroke="#6b7090" strokeWidth={0.6} strokeOpacity={0.6} />)}
|
|
711
758
|
{ghostLabel && (
|
|
712
|
-
<text x={ghostLabel.x} y={ghostLabel.y} fontSize={10.5} fontWeight={700} fill="#8a8fa8" style={HALO}>
|
|
759
|
+
<text x={ghostLabel.x} y={ghostLabel.y} fontSize={10.5} fontWeight={700} fill="var(--sd-fg-3, #8a8fa8)" style={HALO}>
|
|
713
760
|
{`+${fmt(unscanned)} more mutual${unscanned === 1 ? '' : 's'}, in circles not scanned yet`}
|
|
714
761
|
{unscanned > ghosts.length ? ` (${fmt(ghosts.length)} shown)` : ''}
|
|
715
762
|
</text>
|
|
@@ -771,12 +818,12 @@ const SummitMap = memo(function SummitMap({ layout, selectedKey, tierColors, you
|
|
|
771
818
|
<>
|
|
772
819
|
<circle r={pp.r} fill="var(--sd-bg)" stroke={c} strokeWidth={3} strokeOpacity={0.35 + 0.65 * drawn} />
|
|
773
820
|
<text dy="0.35em" textAnchor="middle" fontSize={11} fontWeight={800} fill={c}>{initialsFor(p.person.name)}</text>
|
|
774
|
-
<text x={lx} y={-20} fontSize={fs + 3} fontWeight={800} fill="#fff" style={HALO}>{clip(p.person.name)}</text>
|
|
775
|
-
<text x={lx} y={-4} fontSize={fs} fill="#aaa" style={HALO}>{clip(subline(p.person))}</text>
|
|
821
|
+
<text x={lx} y={-20} fontSize={fs + 3} fontWeight={800} fill="var(--sd-fg-1, #fff)" style={HALO}>{clip(p.person.name)}</text>
|
|
822
|
+
<text x={lx} y={-4} fontSize={fs} fill="var(--sd-fg-3, #aaa)" style={HALO}>{clip(subline(p.person))}</text>
|
|
776
823
|
<text x={lx} y={13} fontSize={fs} fontWeight={700} fill={c} style={HALO}>
|
|
777
824
|
#{p.rank}{p.tied ? '=' : ''} · {p.tier}-tier · {p.score.toFixed(1)}
|
|
778
825
|
</text>
|
|
779
|
-
<text x={lx} y={29} fontSize={fs} fill="#ccc" style={HALO}>
|
|
826
|
+
<text x={lx} y={29} fontSize={fs} fill="var(--sd-fg-2, #ccc)" style={HALO}>
|
|
780
827
|
{clip(tag.more
|
|
781
828
|
? `${fmt(tag.more)} mutual connections · ${fmt(p.waysIn)} drawn here`
|
|
782
829
|
: p.waysIn === 1 ? '1 mutual connection: the only way in' : `${fmt(p.waysIn)} mutual connections, all drawn`)}
|
|
@@ -790,13 +837,13 @@ const SummitMap = memo(function SummitMap({ layout, selectedKey, tierColors, you
|
|
|
790
837
|
) : (
|
|
791
838
|
<>
|
|
792
839
|
{sel && <circle r={pp.r + 3.5} fill="none" stroke="#fff" strokeWidth={1.5} />}
|
|
793
|
-
<circle r={pp.r} fill={c} />
|
|
794
|
-
<text x={14} dy="0.35em" fontSize={fs} fill="#ddd" style={HALO}>
|
|
840
|
+
<circle className="sd-dot" r={pp.r} fill={c} />
|
|
841
|
+
<text x={14} dy="0.35em" fontSize={fs} fill="var(--sd-fg-1, #ddd)" style={HALO}>
|
|
795
842
|
{pp.label}
|
|
796
843
|
<tspan dx={6} fill={c} fontWeight={700}>{p.score.toFixed(1)}</tspan>
|
|
797
844
|
{/* How many mutual connections lead to them: one is the rare kind */}
|
|
798
845
|
{doors && (
|
|
799
|
-
<tspan dx={8} fontSize={fs - 2} fontWeight={700} fill={tag.rare ?
|
|
846
|
+
<tspan dx={8} fontSize={fs - 2} fontWeight={700} fill={tag.rare ? 'var(--sd-cyan, #00E5FF)' : 'var(--sd-fg-4, #778)'}>{tag.text}</tspan>
|
|
800
847
|
)}
|
|
801
848
|
</text>
|
|
802
849
|
</>
|
|
@@ -820,10 +867,10 @@ const SummitMap = memo(function SummitMap({ layout, selectedKey, tierColors, you
|
|
|
820
867
|
: `${b.bridge.name} · ${b.bridge.tier}-tier${b.count > 1 ? ` · a way in to ${b.count} of these` : ''} · click to open`}</title>
|
|
821
868
|
<g className="mv in" style={at(b.x, b.y)}>
|
|
822
869
|
{cards ? <Pill b={b} c={c} big={people.length === 1 && people[0].big} /> : (<>
|
|
823
|
-
<circle
|
|
870
|
+
<circle className="sd-dot"
|
|
824
871
|
r={b.r}
|
|
825
872
|
fill={b.unresolved ? 'none' : c}
|
|
826
|
-
stroke={b.unresolved ? '#777' : 'var(--sd-bg)'}
|
|
873
|
+
stroke={b.unresolved ? 'var(--sd-fg-4, #777)' : 'var(--sd-bg)'}
|
|
827
874
|
strokeWidth={b.unresolved ? 1 : 1.5}
|
|
828
875
|
strokeDasharray={b.unresolved ? '2 2' : undefined}
|
|
829
876
|
/>
|
|
@@ -860,8 +907,8 @@ function Pill({ b, c, big }) {
|
|
|
860
907
|
if (b.unresolved) {
|
|
861
908
|
return (
|
|
862
909
|
<g>
|
|
863
|
-
<rect x={-PILL_W} y={-14} width={PILL_W} height={28} rx={14} fill="#11132a" stroke="#555" strokeDasharray="3 3" />
|
|
864
|
-
<text x={-PILL_W + 14} dy="0.35em" fontSize={11.5} fontStyle="italic" fill="#888">{clipText(b.label, 30)}</text>
|
|
910
|
+
<rect x={-PILL_W} y={-14} width={PILL_W} height={28} rx={14} fill="var(--sd-card, #11132a)" stroke="#555" strokeDasharray="3 3" />
|
|
911
|
+
<text x={-PILL_W + 14} dy="0.35em" fontSize={11.5} fontStyle="italic" fill="var(--sd-fg-3, #888)">{clipText(b.label, 30)}</text>
|
|
865
912
|
</g>
|
|
866
913
|
);
|
|
867
914
|
}
|
|
@@ -874,11 +921,11 @@ function Pill({ b, c, big }) {
|
|
|
874
921
|
const tw = chipW(tag);
|
|
875
922
|
return (
|
|
876
923
|
<g>
|
|
877
|
-
<rect x={-PILL_W} y={-14} width={PILL_W} height={28} rx={14} fill="#14172e"
|
|
878
|
-
stroke={hot ? 'rgba(255,215,0,0.55)' : 'rgba(255,255,255,0.09)'} strokeWidth={hot ? 1.3 : 1} />
|
|
879
|
-
<circle cx={-PILL_W + 15} r={10} fill={c} />
|
|
924
|
+
<rect x={-PILL_W} y={-14} width={PILL_W} height={28} rx={14} fill="var(--sd-card, #14172e)"
|
|
925
|
+
stroke={hot ? 'rgba(255,215,0,0.55)' : 'rgba(var(--sd-ink, 255, 255, 255), 0.09)'} strokeWidth={hot ? 1.3 : 1} />
|
|
926
|
+
<circle className="sd-dot" cx={-PILL_W + 15} r={10} fill={c} />
|
|
880
927
|
<text x={-PILL_W + 15} dy="0.35em" textAnchor="middle" fontSize={8} fontWeight={800} fill="#000">{initialsFor(b.bridge.name)}</text>
|
|
881
|
-
<text x={-PILL_W + 31} dy="0.35em" fontSize={12} fontWeight={600} fill="#e8e8f0">
|
|
928
|
+
<text x={-PILL_W + 31} dy="0.35em" fontSize={12} fontWeight={600} fill="var(--sd-fg-1, #e8e8f0)">
|
|
882
929
|
{clipText(b.bridge.name, Math.max(6, Math.floor((PILL_W - 31 - tw - 10) / 6.4)))}
|
|
883
930
|
</text>
|
|
884
931
|
<rect x={-tw - 7} y={-9} width={tw} height={18} rx={9} fill={`${c}22`} />
|
|
@@ -892,14 +939,14 @@ function SmallCard({ p, c, tag, width, sel }) {
|
|
|
892
939
|
const tw = chipW(tag.text);
|
|
893
940
|
return (
|
|
894
941
|
<g>
|
|
895
|
-
<rect x={0} y={-20} width={width} height={40} rx={10} fill="#151830" stroke={sel ? '#fff' : 'rgba(255,255,255,0.09)'} strokeWidth={sel ? 1.5 : 1} />
|
|
896
|
-
<text x={12} dy="0.35em" fontSize={11} fontWeight={800} fill="#FFD700">#{p.rank}{p.tied ? '=' : ''}</text>
|
|
897
|
-
<text x={60} y={-3} fontSize={13} fontWeight={700} fill="#fff">{clipText(p.person.name, Math.floor((width - 60 - 70) / 7))}</text>
|
|
898
|
-
<text x={60} y={12} fontSize={10.5} fill="#8a8fa8">{clipText(subline(p.person), Math.floor((width - 60 - tw - 20) / 5.6))}</text>
|
|
942
|
+
<rect x={0} y={-20} width={width} height={40} rx={10} fill="var(--sd-card, #151830)" stroke={sel ? 'var(--sd-fg-1, #fff)' : 'rgba(var(--sd-ink, 255, 255, 255), 0.09)'} strokeWidth={sel ? 1.5 : 1} />
|
|
943
|
+
<text x={12} dy="0.35em" fontSize={11} fontWeight={800} fill="var(--sd-gold, #FFD700)">#{p.rank}{p.tied ? '=' : ''}</text>
|
|
944
|
+
<text x={60} y={-3} fontSize={13} fontWeight={700} fill="var(--sd-fg-1, #fff)">{clipText(p.person.name, Math.floor((width - 60 - 70) / 7))}</text>
|
|
945
|
+
<text x={60} y={12} fontSize={10.5} fill="var(--sd-fg-3, #8a8fa8)">{clipText(subline(p.person), Math.floor((width - 60 - tw - 20) / 5.6))}</text>
|
|
899
946
|
<text x={width - 12} y={-2} textAnchor="end" fontSize={14} fontWeight={800} fill={c}>{p.score.toFixed(1)}</text>
|
|
900
947
|
<rect x={width - 12 - tw} y={4} width={tw} height={14} rx={7}
|
|
901
|
-
fill={tag.rare ? 'rgba(0,229,255,0.1)' : 'rgba(255,255,255,0.06)'} stroke={tag.rare ? 'rgba(0,229,255,0.35)' : 'rgba(255,255,255,0.14)'} />
|
|
902
|
-
<text x={width - 12 - tw / 2} y={11} dy="0.35em" textAnchor="middle" fontSize={9.5} fontWeight={800} fill={tag.rare ?
|
|
948
|
+
fill={tag.rare ? 'rgba(0,229,255,0.1)' : 'rgba(var(--sd-ink, 255, 255, 255), 0.06)'} stroke={tag.rare ? 'rgba(0,229,255,0.35)' : 'rgba(var(--sd-ink, 255, 255, 255), 0.14)'} />
|
|
949
|
+
<text x={width - 12 - tw / 2} y={11} dy="0.35em" textAnchor="middle" fontSize={9.5} fontWeight={800} fill={tag.rare ? 'var(--sd-cyan, #00E5FF)' : 'var(--sd-fg-2, #cfd3e6)'}>{tag.text}</text>
|
|
903
950
|
</g>
|
|
904
951
|
);
|
|
905
952
|
}
|
|
@@ -915,16 +962,16 @@ function BigCard({ p, c, tag, width, fs }) {
|
|
|
915
962
|
const room = Math.floor((width - tx - 14) / 6.6);
|
|
916
963
|
return (
|
|
917
964
|
<g>
|
|
918
|
-
<rect x={0} y={-76} width={width} height={152} rx={16} fill="#151830" stroke="rgba(255,215,0,0.45)" />
|
|
965
|
+
<rect x={0} y={-76} width={width} height={152} rx={16} fill="var(--sd-card, #151830)" stroke="rgba(255,215,0,0.45)" />
|
|
919
966
|
<circle cx={48} r={32} fill="var(--sd-bg)" stroke={c} strokeWidth={3} />
|
|
920
967
|
<text x={48} dy="0.35em" textAnchor="middle" fontSize={18} fontWeight={800} fill={c}>{initialsFor(p.person.name)}</text>
|
|
921
|
-
<text x={tx} y={-40} fontSize={11} fontWeight={800} fill="#FFD700">#{p.rank}{p.tied ? '=' : ''} · {p.tier}-tier · {p.score.toFixed(1)}</text>
|
|
922
|
-
<text x={tx} y={-17} fontSize={fs + 8} fontWeight={800} fill="#fff">{clipText(p.person.name, Math.floor(room * 0.72))}</text>
|
|
923
|
-
<text x={tx} y={1} fontSize={12} fill="#8a8fa8">{clipText(subline(p.person), room)}</text>
|
|
968
|
+
<text x={tx} y={-40} fontSize={11} fontWeight={800} fill="var(--sd-gold, #FFD700)">#{p.rank}{p.tied ? '=' : ''} · {p.tier}-tier · {p.score.toFixed(1)}</text>
|
|
969
|
+
<text x={tx} y={-17} fontSize={fs + 8} fontWeight={800} fill="var(--sd-fg-1, #fff)">{clipText(p.person.name, Math.floor(room * 0.72))}</text>
|
|
970
|
+
<text x={tx} y={1} fontSize={12} fill="var(--sd-fg-3, #8a8fa8)">{clipText(subline(p.person), room)}</text>
|
|
924
971
|
<rect x={tx} y={12} width={w1} height={20} rx={10} fill="rgba(255,112,67,0.12)" stroke="rgba(255,112,67,0.4)" />
|
|
925
972
|
<text x={tx + w1 / 2} y={22} dy="0.35em" textAnchor="middle" fontSize={10.5} fontWeight={800} fill={EASY}>{first}</text>
|
|
926
|
-
<rect x={tx + w1 + 6} y={12} width={w2} height={20} rx={10} fill="rgba(255,255,255,0.06)" stroke="rgba(255,255,255,0.14)" />
|
|
927
|
-
<text x={tx + w1 + 6 + w2 / 2} y={22} dy="0.35em" textAnchor="middle" fontSize={10.5} fontWeight={800} fill="#cfd3e6">{second}</text>
|
|
973
|
+
<rect x={tx + w1 + 6} y={12} width={w2} height={20} rx={10} fill="rgba(var(--sd-ink, 255, 255, 255), 0.06)" stroke="rgba(var(--sd-ink, 255, 255, 255), 0.14)" />
|
|
974
|
+
<text x={tx + w1 + 6 + w2 / 2} y={22} dy="0.35em" textAnchor="middle" fontSize={10.5} fontWeight={800} fill="var(--sd-fg-2, #cfd3e6)">{second}</text>
|
|
928
975
|
<text x={tx} y={50} fontSize={10.5} fill="#6b7090">
|
|
929
976
|
{tag.more ? `The ${fmt(tag.more)} is LinkedIn’s count. The other ${fmt(tag.more - p.waysIn)}` : named === 1 ? 'Only one of your connections knows them.' : `${fmt(named)} of your connections know them.`}
|
|
930
977
|
</text>
|
|
@@ -944,19 +991,19 @@ const ellipsis = { overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'no
|
|
|
944
991
|
function Via({ p, route, tierColors, compact }) {
|
|
945
992
|
if (!compact) return <WayIn p={p} route={route} tierColors={tierColors} />;
|
|
946
993
|
if (!route?.bridge) {
|
|
947
|
-
return <span style={{ ...ellipsis, color: '#777', fontStyle: 'italic', fontSize: compact ? 11 : 12 }}>via {CANT_NAME}</span>;
|
|
994
|
+
return <span style={{ ...ellipsis, color: 'var(--sd-fg-4, #777)', fontStyle: 'italic', fontSize: compact ? 11 : 12 }}>via {CANT_NAME}</span>;
|
|
948
995
|
}
|
|
949
996
|
const b = route.bridge;
|
|
950
997
|
const extra = p.waysIn - 1;
|
|
951
998
|
return (
|
|
952
999
|
<span style={{ display: 'flex', alignItems: 'center', gap: 5, minWidth: 0, fontSize: compact ? 11 : 12 }}>
|
|
953
|
-
<span style={{ color: '#666', flexShrink: 0 }}>via</span>
|
|
1000
|
+
<span style={{ color: 'var(--sd-fg-4, #666)', flexShrink: 0 }}>via</span>
|
|
954
1001
|
{!compact && <Avatar person={b} size={16} tierColors={tierColors} />}
|
|
955
1002
|
<span style={{ ...ellipsis, color: tierColors[b.tier] || '#aaa', fontWeight: 600, minWidth: 0 }}>{compact ? shortName(b.name) : b.name}</span>
|
|
956
1003
|
{extra > 0 && (
|
|
957
1004
|
<span title={`Every way in:\n${everyRoute(p)}`} style={{
|
|
958
1005
|
flexShrink: 0, padding: '1px 6px', borderRadius: 8, fontSize: 10, fontWeight: 800,
|
|
959
|
-
color:
|
|
1006
|
+
color: 'var(--sd-orange, #FF6B35)', background: 'rgba(255,107,53,0.15)',
|
|
960
1007
|
}}>+{extra}</span>
|
|
961
1008
|
)}
|
|
962
1009
|
</span>
|
|
@@ -971,10 +1018,10 @@ function WayIn({ p, route, tierColors }) {
|
|
|
971
1018
|
<span style={{ display: 'flex', alignItems: 'center', gap: 8, minWidth: 0 }} title={`Every way in:\n${everyRoute(p)}`}>
|
|
972
1019
|
{b ? <Avatar person={b} size={26} tierColors={tierColors} /> : <span style={{ width: 26, height: 26, borderRadius: '50%', border: '1px dashed #666', flexShrink: 0 }} />}
|
|
973
1020
|
<span style={{ minWidth: 0, display: 'flex', flexDirection: 'column' }}>
|
|
974
|
-
<span style={{ ...ellipsis, fontSize: 13, fontWeight: 700, color: b ? tierColors[b.tier] || '#ddd' : '#777', fontStyle: b ? 'normal' : 'italic' }}>
|
|
1021
|
+
<span style={{ ...ellipsis, fontSize: 13, fontWeight: 700, color: b ? tierColors[b.tier] || 'var(--sd-fg-1, #ddd)' : 'var(--sd-fg-4, #777)', fontStyle: b ? 'normal' : 'italic' }}>
|
|
975
1022
|
{b ? b.name : CANT_NAME}
|
|
976
1023
|
</span>
|
|
977
|
-
<span style={{ ...ellipsis, fontSize: 10.5, marginTop: 1, color: extra > 0 ? '#99a' : RARE, fontWeight: extra > 0 ? 500 : 700 }}>
|
|
1024
|
+
<span style={{ ...ellipsis, fontSize: 10.5, marginTop: 1, color: extra > 0 ? 'var(--sd-fg-3, #99a)' : RARE, fontWeight: extra > 0 ? 500 : 700 }}>
|
|
978
1025
|
{extra > 0 ? `+${extra} more way${extra > 1 ? 's' : ''} in` : 'only way in'}
|
|
979
1026
|
</span>
|
|
980
1027
|
</span>
|
|
@@ -991,7 +1038,7 @@ function RarityBar({ p, rarity }) {
|
|
|
991
1038
|
return (
|
|
992
1039
|
<span style={{ display: 'flex', flexDirection: 'column', gap: 5, minWidth: 0 }}
|
|
993
1040
|
title={`${rarity.count} mutual connection${rarity.count === 1 ? '' : 's'}${rarity.from === 'scans' ? ' (from your scans, so it can only go up)' : ' (LinkedIn’s count)'}. ${RARITY_NOTE}`}>
|
|
994
|
-
<span style={{ height: 6, borderRadius: 3, background: 'rgba(255,255,255,0.07)', overflow: 'hidden' }}>
|
|
1041
|
+
<span style={{ height: 6, borderRadius: 3, background: 'rgba(var(--sd-ink, 255, 255, 255), 0.07)', overflow: 'hidden' }}>
|
|
995
1042
|
<span style={{ display: 'block', height: '100%', width: `${fill * 100}%`, borderRadius: 3, background: info.color }} />
|
|
996
1043
|
</span>
|
|
997
1044
|
<span style={{ ...ellipsis, fontSize: 10.5, fontWeight: 700, color: info.color }}>
|
|
@@ -1008,12 +1055,12 @@ function Tags({ status, rarity }) {
|
|
|
1008
1055
|
<>
|
|
1009
1056
|
{status === 'asked' && (
|
|
1010
1057
|
<span title="You sent a request. It shows everywhere in the app." style={{
|
|
1011
|
-
flexShrink: 0, fontSize: 9, fontWeight: 800, color: '#FFD700', border: '1px dashed rgba(255,215,0,0.6)', borderRadius: 4, padding: '0 4px',
|
|
1058
|
+
flexShrink: 0, fontSize: 9, fontWeight: 800, color: 'var(--sd-gold, #FFD700)', border: '1px dashed rgba(255,215,0,0.6)', borderRadius: 4, padding: '0 4px',
|
|
1012
1059
|
}}>Request sent</span>
|
|
1013
1060
|
)}
|
|
1014
1061
|
{status === 'connected' && (
|
|
1015
1062
|
<span title="Already one of your connections" style={{
|
|
1016
|
-
flexShrink: 0, fontSize: 9, fontWeight: 800, color: '#00ff88', border: '1px solid rgba(0,255,136,0.5)', borderRadius: 4, padding: '0 4px',
|
|
1063
|
+
flexShrink: 0, fontSize: 9, fontWeight: 800, color: 'var(--sd-green, #00ff88)', border: '1px solid rgba(0,255,136,0.5)', borderRadius: 4, padding: '0 4px',
|
|
1017
1064
|
}}>Connected</span>
|
|
1018
1065
|
)}
|
|
1019
1066
|
{info && status !== 'connected' && (
|
|
@@ -1039,21 +1086,21 @@ function PathPicker({ facets, text, onText, onPick, onClose, isMobile }) {
|
|
|
1039
1086
|
else if (companies.length === 1 && !sectors.length) onPick({ kind: 'company', key: companies[0].name, label: companies[0].name });
|
|
1040
1087
|
}
|
|
1041
1088
|
};
|
|
1042
|
-
const sub = { fontSize: 9, fontWeight: 700, color: '#667', letterSpacing: 1, textTransform: 'uppercase', margin: '10px 0 6px' };
|
|
1089
|
+
const sub = { fontSize: 9, fontWeight: 700, color: 'var(--sd-fg-4, #667)', letterSpacing: 1, textTransform: 'uppercase', margin: '10px 0 6px' };
|
|
1043
1090
|
return (
|
|
1044
1091
|
<>
|
|
1045
1092
|
<div onClick={onClose} style={{ position: 'fixed', inset: 0, zIndex: 40 }} />
|
|
1046
1093
|
<div role="dialog" aria-label="Pick a sector or a company" style={{
|
|
1047
1094
|
position: 'absolute', zIndex: 41, top: isMobile ? 52 : 44, left: isMobile ? 6 : 14, width: isMobile ? 'calc(100% - 12px)' : 'min(560px, calc(100% - 28px))',
|
|
1048
1095
|
maxHeight: 340, overflowY: 'auto', boxSizing: 'border-box', padding: 12, borderRadius: 12,
|
|
1049
|
-
background: '#0c101e', border: `1px solid ${PATH}55`, boxShadow: '0 12px 40px rgba(0,0,0,0.6)',
|
|
1096
|
+
background: 'var(--sd-surface, #0c101e)', border: `1px solid ${PATH}55`, boxShadow: '0 12px 40px rgba(0,0,0,0.6)',
|
|
1050
1097
|
}}>
|
|
1051
1098
|
<input
|
|
1052
1099
|
autoFocus type="search" value={text} onChange={(e) => onText(e.target.value)} onKeyDown={onKey}
|
|
1053
1100
|
placeholder="Type a sector or a company" aria-label="Type a sector or a company"
|
|
1054
1101
|
style={{
|
|
1055
1102
|
width: '100%', height: isMobile ? 44 : 34, boxSizing: 'border-box', padding: '0 12px', borderRadius: 8, outline: 'none',
|
|
1056
|
-
color: '#fff', fontSize: isMobile ? 16 : 13, border: '1px solid rgba(255,255,255,0.14)', background: 'rgba(255,255,255,0.06)',
|
|
1103
|
+
color: 'var(--sd-fg-1, #fff)', fontSize: isMobile ? 16 : 13, border: '1px solid rgba(var(--sd-ink, 255, 255, 255), 0.14)', background: 'rgba(var(--sd-ink, 255, 255, 255), 0.06)',
|
|
1057
1104
|
}}
|
|
1058
1105
|
/>
|
|
1059
1106
|
{sectors.length > 0 && <div style={sub}>Sectors · inferred from company names and headlines</div>}
|
|
@@ -1061,11 +1108,11 @@ function PathPicker({ facets, text, onText, onPick, onClose, isMobile }) {
|
|
|
1061
1108
|
{sectors.map((i) => (
|
|
1062
1109
|
<button key={i.key} type="button" onClick={() => onPick({ kind: 'sector', key: i.key, label: i.label, color: i.color })} style={{
|
|
1063
1110
|
height: 28, padding: '0 10px', borderRadius: 14, cursor: 'pointer', fontSize: 11.5, fontWeight: 700, whiteSpace: 'nowrap',
|
|
1064
|
-
border: `1px solid ${i.color}66`, background: `${i.color}14`, color: '#ddd', display: 'inline-flex', alignItems: 'center', gap: 6,
|
|
1111
|
+
border: `1px solid ${i.color}66`, background: `${i.color}14`, color: 'var(--sd-fg-1, #ddd)', display: 'inline-flex', alignItems: 'center', gap: 6,
|
|
1065
1112
|
}}>
|
|
1066
1113
|
<span style={{ width: 7, height: 7, borderRadius: '50%', background: i.color }} />
|
|
1067
1114
|
{i.label}
|
|
1068
|
-
<span style={{ fontWeight: 500, color: '#889' }}>{fmt(i.count)}</span>
|
|
1115
|
+
<span style={{ fontWeight: 500, color: 'var(--sd-fg-3, #889)' }}>{fmt(i.count)}</span>
|
|
1069
1116
|
</button>
|
|
1070
1117
|
))}
|
|
1071
1118
|
</div>
|
|
@@ -1074,15 +1121,15 @@ function PathPicker({ facets, text, onText, onPick, onClose, isMobile }) {
|
|
|
1074
1121
|
{companies.map((c) => (
|
|
1075
1122
|
<button key={c.name} type="button" onClick={() => onPick({ kind: 'company', key: c.name, label: c.name })} style={{
|
|
1076
1123
|
height: 28, padding: '0 10px', borderRadius: 14, cursor: 'pointer', fontSize: 11.5, fontWeight: 600, whiteSpace: 'nowrap',
|
|
1077
|
-
border: '1px solid rgba(255,255,255,0.12)', background: 'rgba(255,255,255,0.04)', color: '#ccc',
|
|
1124
|
+
border: '1px solid rgba(var(--sd-ink, 255, 255, 255), 0.12)', background: 'rgba(var(--sd-ink, 255, 255, 255), 0.04)', color: 'var(--sd-fg-2, #ccc)',
|
|
1078
1125
|
}}>
|
|
1079
1126
|
{c.name}
|
|
1080
|
-
<span style={{ marginLeft: 6, fontWeight: 500, color: '#889' }}>{fmt(c.count)}</span>
|
|
1127
|
+
<span style={{ marginLeft: 6, fontWeight: 500, color: 'var(--sd-fg-3, #889)' }}>{fmt(c.count)}</span>
|
|
1081
1128
|
</button>
|
|
1082
1129
|
))}
|
|
1083
1130
|
</div>
|
|
1084
1131
|
{!sectors.length && !companies.length && (
|
|
1085
|
-
<div style={{ fontSize: 12, color: '#888', padding: '12px 2px 4px' }}>
|
|
1132
|
+
<div style={{ fontSize: 12, color: 'var(--sd-fg-3, #888)', padding: '12px 2px 4px' }}>
|
|
1086
1133
|
{facets ? `Nothing matches ‘${text.trim()}’.` : 'Reading where everyone works…'}
|
|
1087
1134
|
</div>
|
|
1088
1135
|
)}
|
|
@@ -1098,10 +1145,10 @@ const EASY = '#FF7043';
|
|
|
1098
1145
|
const SLIDER_CSS = `
|
|
1099
1146
|
.sepslide { -webkit-appearance: none; appearance: none; display: block; width: 100%; height: 24px; margin: 4px 0 0; background: transparent; cursor: pointer; }
|
|
1100
1147
|
.sepslide::-webkit-slider-runnable-track { height: 6px; border-radius: 3px; background: linear-gradient(90deg, ${RARE} 0%, #FFD700 50%, ${EASY} 100%); }
|
|
1101
|
-
.sepslide::-webkit-slider-thumb { -webkit-appearance: none; width: 20px; height: 20px; margin-top: -7px; border-radius: 50%; background: var(--sd-bg); border: 3px solid #fff; box-shadow: 0 0 10px rgba(255,255,255,0.45); }
|
|
1148
|
+
.sepslide::-webkit-slider-thumb { -webkit-appearance: none; width: 20px; height: 20px; margin-top: -7px; border-radius: 50%; background: var(--sd-bg); border: 3px solid #fff; box-shadow: 0 0 10px rgba(var(--sd-ink, 255, 255, 255), 0.45); }
|
|
1102
1149
|
.sepslide::-moz-range-track { height: 6px; border-radius: 3px; background: linear-gradient(90deg, ${RARE} 0%, #FFD700 50%, ${EASY} 100%); }
|
|
1103
|
-
.sepslide::-moz-range-thumb { width: 14px; height: 14px; border-radius: 50%; background: var(--sd-bg); border: 3px solid #fff; box-shadow: 0 0 10px rgba(255,255,255,0.45); }
|
|
1104
|
-
.sepslide:focus-visible { outline: 2px solid rgba(255,255,255,0.7); outline-offset: 3px; border-radius: 6px; }
|
|
1150
|
+
.sepslide::-moz-range-thumb { width: 14px; height: 14px; border-radius: 50%; background: var(--sd-bg); border: 3px solid #fff; box-shadow: 0 0 10px rgba(var(--sd-ink, 255, 255, 255), 0.45); }
|
|
1151
|
+
.sepslide:focus-visible { outline: 2px solid rgba(var(--sd-ink, 255, 255, 255), 0.7); outline-offset: 3px; border-radius: 6px; }
|
|
1105
1152
|
`;
|
|
1106
1153
|
const RARITY_NOTE = 'Rarity is how many mutual connections lead to them: few is a rare way in, many is warm (likely to accept). It never changes a score or a tier.';
|
|
1107
1154
|
|
|
@@ -1126,47 +1173,48 @@ const Row = memo(function Row({ p, top, height, isMobile, selected, tierColors,
|
|
|
1126
1173
|
aria-pressed={selected}
|
|
1127
1174
|
onClick={() => onPick(p)}
|
|
1128
1175
|
onKeyDown={(e) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); onPick(p); } }}
|
|
1129
|
-
onMouseEnter={(e) => { if (!selected) e.currentTarget.style.background = 'rgba(255,255,255,0.04)'; }}
|
|
1176
|
+
onMouseEnter={(e) => { if (!selected) e.currentTarget.style.background = 'rgba(var(--sd-ink, 255, 255, 255), 0.04)'; }}
|
|
1130
1177
|
onMouseLeave={(e) => { e.currentTarget.style.background = base; }}
|
|
1178
|
+
className="seprow"
|
|
1131
1179
|
style={{
|
|
1132
1180
|
position: 'absolute', top, left: 0, right: 0, height, boxSizing: 'border-box',
|
|
1133
1181
|
display: 'grid', alignItems: 'center', gap: 10, padding: '0 12px',
|
|
1134
1182
|
gridTemplateColumns: isMobile ? '44px 36px 1fr 44px' : COLUMNS,
|
|
1135
1183
|
borderLeft: `3px solid ${selected ? ORANGE : 'transparent'}`,
|
|
1136
|
-
borderBottom: '1px solid rgba(255,255,255,0.04)',
|
|
1184
|
+
borderBottom: '1px solid rgba(var(--sd-ink, 255, 255, 255), 0.04)',
|
|
1137
1185
|
background: base, cursor: 'pointer',
|
|
1138
1186
|
}}
|
|
1139
1187
|
>
|
|
1140
|
-
<span style={{ fontSize: isMobile ? 11 : 12, fontWeight: 800, color: podium ? c : '#555', whiteSpace: 'nowrap' }}>{rank}</span>
|
|
1188
|
+
<span style={{ fontSize: isMobile ? 11 : 12, fontWeight: 800, color: podium ? c : 'var(--sd-fg-5, #555)', whiteSpace: 'nowrap' }}>{rank}</span>
|
|
1141
1189
|
<Avatar person={person} size={32} tierColors={tierColors} />
|
|
1142
1190
|
|
|
1143
1191
|
{isMobile ? (
|
|
1144
1192
|
<div style={{ minWidth: 0, display: 'flex', flexDirection: 'column', gap: 2 }}>
|
|
1145
1193
|
<span style={{ display: 'flex', alignItems: 'center', gap: 4, minWidth: 0 }}>
|
|
1146
|
-
<span style={{ ...ellipsis, fontSize: 13, fontWeight: 600, color: member ? '#888' : '#fff', minWidth: 0 }}>
|
|
1147
|
-
{person.name}{member && <span style={{ fontSize: 10, color: '#666', fontWeight: 400 }}> · out of network</span>}
|
|
1194
|
+
<span style={{ ...ellipsis, fontSize: 13, fontWeight: 600, color: member ? 'var(--sd-fg-3, #888)' : 'var(--sd-fg-1, #fff)', minWidth: 0 }}>
|
|
1195
|
+
{person.name}{member && <span style={{ fontSize: 10, color: 'var(--sd-fg-4, #666)', fontWeight: 400 }}> · out of network</span>}
|
|
1148
1196
|
</span>
|
|
1149
1197
|
<Tags status={status} rarity={rarity} />
|
|
1150
1198
|
</span>
|
|
1151
1199
|
<Via p={p} route={route} tierColors={tierColors} compact />
|
|
1152
|
-
<span style={{ ...ellipsis, fontSize: 10, color: '#666' }}>{subline(person)}</span>
|
|
1200
|
+
<span style={{ ...ellipsis, fontSize: 10, color: 'var(--sd-fg-4, #666)' }}>{subline(person)}</span>
|
|
1153
1201
|
</div>
|
|
1154
1202
|
) : (
|
|
1155
1203
|
<>
|
|
1156
1204
|
<div style={{ minWidth: 0 }}>
|
|
1157
1205
|
<div style={{ display: 'flex', alignItems: 'center', gap: 6, minWidth: 0 }}>
|
|
1158
|
-
<span style={{ ...ellipsis, fontSize: 13, fontWeight: 600, color: member ? '#888' : '#fff' }}>{person.name}</span>
|
|
1206
|
+
<span style={{ ...ellipsis, fontSize: 13, fontWeight: 600, color: member ? 'var(--sd-fg-3, #888)' : 'var(--sd-fg-1, #fff)' }}>{person.name}</span>
|
|
1159
1207
|
<span style={{ flexShrink: 0, fontSize: 9, fontWeight: 800, color: c, border: `1px solid ${c}55`, borderRadius: 4, padding: '0 4px' }}>{p.tier}</span>
|
|
1160
1208
|
{/* The rarity has its own column here */}
|
|
1161
1209
|
<Tags status={status} rarity={null} />
|
|
1162
|
-
{member && <span style={{ flexShrink: 0, fontSize: 10, color: '#666' }}>out of network</span>}
|
|
1210
|
+
{member && <span style={{ flexShrink: 0, fontSize: 10, color: 'var(--sd-fg-4, #666)' }}>out of network</span>}
|
|
1163
1211
|
</div>
|
|
1164
|
-
<div style={{ ...ellipsis, fontSize: 10, color: '#777', marginTop: 2 }}>{subline(person)}</div>
|
|
1212
|
+
<div style={{ ...ellipsis, fontSize: 10, color: 'var(--sd-fg-4, #777)', marginTop: 2 }}>{subline(person)}</div>
|
|
1165
1213
|
</div>
|
|
1166
1214
|
<Via p={p} route={route} tierColors={tierColors} />
|
|
1167
1215
|
<RarityBar p={p} rarity={rarity} />
|
|
1168
1216
|
<div style={{ display: 'flex', alignItems: 'center', gap: 10 }}>
|
|
1169
|
-
<div style={{ flex: 1, height: 6, background: 'rgba(255,255,255,0.06)', borderRadius: 3 }}>
|
|
1217
|
+
<div style={{ flex: 1, height: 6, background: 'rgba(var(--sd-ink, 255, 255, 255), 0.06)', borderRadius: 3 }}>
|
|
1170
1218
|
<div style={{ height: '100%', borderRadius: 3, background: c, width: `${Math.max(0, Math.min(1, p.score / 10)) * 100}%` }} />
|
|
1171
1219
|
</div>
|
|
1172
1220
|
<span style={{ fontSize: 15, fontWeight: 800, color: c, width: 30, textAlign: 'right' }}>{p.score.toFixed(1)}</span>
|
|
@@ -1177,7 +1225,7 @@ const Row = memo(function Row({ p, top, height, isMobile, selected, tierColors,
|
|
|
1177
1225
|
{isMobile && (
|
|
1178
1226
|
<div style={{ textAlign: 'right' }}>
|
|
1179
1227
|
<div style={{ fontSize: 13, fontWeight: 800, color: c }}>{p.score.toFixed(1)}</div>
|
|
1180
|
-
<div style={{ fontSize: 9, color: '#666', fontWeight: 700 }}>{p.tier}</div>
|
|
1228
|
+
<div style={{ fontSize: 9, color: 'var(--sd-fg-4, #666)', fontWeight: 700 }}>{p.tier}</div>
|
|
1181
1229
|
</div>
|
|
1182
1230
|
)}
|
|
1183
1231
|
</div>
|