six-degrees 0.6.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/app-path-routes-manifest.json +3 -0
- package/.next/standalone/.next/build-manifest.json +3 -3
- package/.next/standalone/.next/prerender-manifest.json +14 -14
- package/.next/standalone/.next/routes-manifest.json +18 -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 +2 -2
- 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 +4 -2
- 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/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 +20 -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 +3 -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]__15wc9e-._.js → [root-of-the-server]__063s0x7._.js} +2 -2
- 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]__13dx4sd._.js → [root-of-the-server]__0_4y8z7._.js} +3 -3
- 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]__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/[root-of-the-server]__20rwfdw._.js +1 -1
- package/.next/standalone/.next/server/chunks/_02twlca._.js +1 -1
- 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_005abye.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0b17r6v.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0c9d9ti.js +7 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0doq0t-.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0fd2rlw.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0is4qoc.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0jnfp2e.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0nef_n7.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0plrzra.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_13a4m0c.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1if17c-.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1j-zw7v.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1sngt-q.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1v2sgme.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1vh-tgx.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1zaubz7.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/_01o3i5y._.js +7 -0
- package/.next/standalone/.next/server/chunks/ssr/_02sband._.js +7 -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/_0gy11ar._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0hb-dhy._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_14nxd3q._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_189g8lg._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_1f_n00p._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_1fm1ih_._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_1k2nmbw._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_1k9qfsk._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/app_141w189._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_components_0t908t-._.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_import_page_1fmu6_l.js +1 -1
- 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 +25 -13
- 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/pages/404.html +1 -1
- package/.next/standalone/.next/server/pages/500.html +1 -1
- 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/03-_esd2x_yk6.js +1 -0
- package/.next/standalone/.next/static/chunks/03-demj2iy-0p.js +44 -0
- package/.next/standalone/.next/static/chunks/0_1r-3csplxnj.js +1 -0
- package/.next/standalone/.next/static/chunks/0an_b6zi1r_qq.js +5 -0
- package/.next/standalone/.next/static/chunks/0e3g0sil79cus.js +21 -0
- package/.next/standalone/.next/static/chunks/0kscsqnvfq3-r.js +1 -0
- package/.next/standalone/.next/static/chunks/0p3g5tfostsep.js +7 -0
- package/.next/standalone/.next/static/chunks/0zd0t7e60bn4z.js +1 -0
- package/.next/standalone/.next/static/chunks/163b-20vwa06i.js +34 -0
- package/.next/standalone/.next/static/chunks/{0ws7zy0w57ufi.js → 1eyajb9ntzlrl.js} +1 -1
- package/.next/standalone/.next/static/chunks/1pa-2v1ajvrko.js +1 -0
- package/.next/standalone/.next/static/chunks/1qbjermbf68xj.js +1 -0
- package/.next/standalone/.next/static/chunks/1z9lb-dbcg4aa.js +1 -0
- package/.next/standalone/.next/static/chunks/23_1z47al92nz.js +57 -0
- package/.next/standalone/.next/static/chunks/260bomtr214m8.js +34 -0
- package/.next/standalone/.next/static/chunks/2eo9pqq9gay3r.js +34 -0
- package/.next/standalone/.next/static/chunks/2xk2ra4piiuod.js +34 -0
- package/.next/standalone/.next/static/chunks/2z1-q0_vunbql.js +2 -0
- package/.next/standalone/.next/static/chunks/2zf4jmz9l3li2.js +1 -0
- package/.next/standalone/.next/static/chunks/34g73qhayuevu.js +1 -0
- package/.next/standalone/.next/static/chunks/3b0-14cxqsprt.js +1 -0
- package/.next/standalone/.next/static/chunks/3jarus1_38s2z.js +1 -0
- package/.next/standalone/.next/static/chunks/3ssu341hav_sq.css +3 -0
- package/.next/standalone/.next/static/chunks/3v1qd3sqhqn0d.js +1 -0
- package/.next/standalone/.next/static/chunks/43pg2sursiypz.js +1 -0
- package/.next/standalone/.next/static/chunks/44yn0tcd9dfk3.js +1 -0
- package/.next/standalone/CHANGELOG.md +143 -0
- package/.next/standalone/README.md +71 -49
- package/.next/standalone/SECURITY.md +17 -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/queue/route.js +1 -1
- package/.next/standalone/app/api/scraper/route.js +120 -32
- package/.next/standalone/app/api/social/crm/route.js +2 -1
- package/.next/standalone/app/components/AppHeader.js +20 -16
- package/.next/standalone/app/components/AppTabs.js +8 -8
- 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 +184 -112
- 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 +17 -17
- 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 +24 -19
- 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 +25 -25
- 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 +22 -18
- package/.next/standalone/app/components/ScanTrail.js +8 -5
- package/.next/standalone/app/components/SeparationView.js +168 -104
- package/.next/standalone/app/components/Sidebar.js +161 -161
- 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/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 +313 -0
- package/.next/standalone/app/components/ui.js +8 -8
- package/.next/standalone/app/globals.css +159 -2
- package/.next/standalone/app/import/page.js +94 -38
- package/.next/standalone/app/launch/page.js +5 -5
- package/.next/standalone/app/layout.js +6 -2
- package/.next/standalone/app/page.js +53 -37
- 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 +54 -54
- 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 +221 -125
- 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/backups.js +458 -0
- package/.next/standalone/lib/chain-layout.js +32 -0
- 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/ingest.js +1 -1
- package/.next/standalone/lib/linkedin-limits.js +212 -11
- package/.next/standalone/lib/liquid-glass.js +59 -0
- package/.next/standalone/lib/notifications.js +13 -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/scanner-setup.js +97 -15
- package/.next/standalone/lib/scraper-client.js +17 -3
- package/.next/standalone/lib/search-risk.js +7 -3
- package/.next/standalone/lib/settings-client.js +5 -3
- package/.next/standalone/lib/settings.js +10 -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 +195 -0
- package/.next/standalone/package-lock.json +2 -2
- package/.next/standalone/package.json +1 -1
- package/.next/standalone/scripts/scrape.py +26 -2
- package/.next/static/chunks/03-_esd2x_yk6.js +1 -0
- package/.next/static/chunks/03-demj2iy-0p.js +44 -0
- package/.next/static/chunks/0_1r-3csplxnj.js +1 -0
- package/.next/static/chunks/0an_b6zi1r_qq.js +5 -0
- package/.next/static/chunks/0e3g0sil79cus.js +21 -0
- package/.next/static/chunks/0kscsqnvfq3-r.js +1 -0
- package/.next/static/chunks/0p3g5tfostsep.js +7 -0
- package/.next/static/chunks/0zd0t7e60bn4z.js +1 -0
- package/.next/static/chunks/163b-20vwa06i.js +34 -0
- package/.next/static/chunks/{0ws7zy0w57ufi.js → 1eyajb9ntzlrl.js} +1 -1
- package/.next/static/chunks/1pa-2v1ajvrko.js +1 -0
- package/.next/static/chunks/1qbjermbf68xj.js +1 -0
- package/.next/static/chunks/1z9lb-dbcg4aa.js +1 -0
- package/.next/static/chunks/23_1z47al92nz.js +57 -0
- package/.next/static/chunks/260bomtr214m8.js +34 -0
- package/.next/static/chunks/2eo9pqq9gay3r.js +34 -0
- package/.next/static/chunks/2xk2ra4piiuod.js +34 -0
- package/.next/static/chunks/2z1-q0_vunbql.js +2 -0
- package/.next/static/chunks/2zf4jmz9l3li2.js +1 -0
- package/.next/static/chunks/34g73qhayuevu.js +1 -0
- package/.next/static/chunks/3b0-14cxqsprt.js +1 -0
- package/.next/static/chunks/3jarus1_38s2z.js +1 -0
- package/.next/static/chunks/3ssu341hav_sq.css +3 -0
- package/.next/static/chunks/3v1qd3sqhqn0d.js +1 -0
- package/.next/static/chunks/43pg2sursiypz.js +1 -0
- package/.next/static/chunks/44yn0tcd9dfk3.js +1 -0
- package/CHANGELOG.md +143 -0
- package/README.md +71 -49
- package/SECURITY.md +17 -11
- package/lib/backups.js +458 -0
- package/lib/chain-layout.js +32 -0
- 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/ingest.js +1 -1
- package/lib/linkedin-limits.js +212 -11
- package/lib/liquid-glass.js +59 -0
- package/lib/notifications.js +13 -0
- package/lib/scan-pace.js +11 -0
- package/lib/scan-progress.js +20 -0
- package/lib/scan-risk.js +44 -0
- package/lib/scanner-setup.js +97 -15
- package/lib/scraper-client.js +17 -3
- package/lib/search-risk.js +7 -3
- package/lib/settings-client.js +5 -3
- package/lib/settings.js +10 -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 +195 -0
- package/package.json +1 -1
- package/scripts/scrape.py +26 -2
- 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]__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/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/_2105jz8._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/app_components_settings_SectorPicker_1c-29qw.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 → ZVpLBK-2vpllv2HxOFs2d}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{dQUvvVSXqbkEFC3-CNcwT → ZVpLBK-2vpllv2HxOFs2d}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/.next/static/{dQUvvVSXqbkEFC3-CNcwT → ZVpLBK-2vpllv2HxOFs2d}/_ssgManifest.js +0 -0
- /package/.next/static/{dQUvvVSXqbkEFC3-CNcwT → ZVpLBK-2vpllv2HxOFs2d}/_buildManifest.js +0 -0
- /package/.next/static/{dQUvvVSXqbkEFC3-CNcwT → ZVpLBK-2vpllv2HxOFs2d}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{dQUvvVSXqbkEFC3-CNcwT → ZVpLBK-2vpllv2HxOFs2d}/_ssgManifest.js +0 -0
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
// (UpdatePanel uses them). The Scan page still keeps its own private copies;
|
|
5
5
|
// new screens should use these rather than adding another.
|
|
6
6
|
|
|
7
|
-
export const LINE = '1px solid rgba(255,255,255,0.1)';
|
|
7
|
+
export const LINE = '1px solid rgba(var(--sd-ink, 255, 255, 255), 0.1)';
|
|
8
8
|
// The theme's font (lib/themes.js), Standard's until one is applied.
|
|
9
9
|
export const FONT = 'var(--sd-font)';
|
|
10
10
|
|
|
@@ -21,7 +21,7 @@ export function Section({ id, title, intro, children }) {
|
|
|
21
21
|
|
|
22
22
|
export function Body({ children, style }) {
|
|
23
23
|
return (
|
|
24
|
-
<div style={{ fontSize: 13.5, color: '#8b9a9a', lineHeight: 1.6, marginTop: 4, ...style }}>
|
|
24
|
+
<div style={{ fontSize: 13.5, color: 'var(--sd-fg-3, #8b9a9a)', lineHeight: 1.6, marginTop: 4, ...style }}>
|
|
25
25
|
{children}
|
|
26
26
|
</div>
|
|
27
27
|
);
|
|
@@ -29,7 +29,7 @@ export function Body({ children, style }) {
|
|
|
29
29
|
|
|
30
30
|
export function Mono({ children }) {
|
|
31
31
|
return (
|
|
32
|
-
<code style={{ background: 'rgba(255,255,255,0.08)', padding: '1px 5px', borderRadius: 4, wordBreak: 'break-all' }}>
|
|
32
|
+
<code style={{ background: 'rgba(var(--sd-ink, 255, 255, 255), 0.08)', padding: '1px 5px', borderRadius: 4, wordBreak: 'break-all' }}>
|
|
33
33
|
{children}
|
|
34
34
|
</code>
|
|
35
35
|
);
|
|
@@ -38,8 +38,8 @@ export function Mono({ children }) {
|
|
|
38
38
|
/** The answer to an action, where it can't be missed. tone: 'ok' | 'bad' | undefined. */
|
|
39
39
|
export function Status({ children, tone }) {
|
|
40
40
|
const color = tone === 'ok' ? '#00ff88' : tone === 'bad' ? '#ff7676' : '#e8e8ee';
|
|
41
|
-
const bg = tone === 'ok' ? 'rgba(0,255,136,0.08)' : tone === 'bad' ? 'rgba(255,80,80,0.08)' : 'rgba(255,255,255,0.05)';
|
|
42
|
-
const border = tone === 'ok' ? 'rgba(0,255,136,0.3)' : tone === 'bad' ? 'rgba(255,80,80,0.3)' : 'rgba(255,255,255,0.12)';
|
|
41
|
+
const bg = tone === 'ok' ? 'rgba(0,255,136,0.08)' : tone === 'bad' ? 'rgba(255,80,80,0.08)' : 'rgba(var(--sd-ink, 255, 255, 255), 0.05)';
|
|
42
|
+
const border = tone === 'ok' ? 'rgba(0,255,136,0.3)' : tone === 'bad' ? 'rgba(255,80,80,0.3)' : 'rgba(var(--sd-ink, 255, 255, 255), 0.12)';
|
|
43
43
|
return (
|
|
44
44
|
<div role="status" style={{
|
|
45
45
|
marginTop: 10, padding: '10px 14px', borderRadius: 8, fontSize: 13.5, lineHeight: 1.6,
|
|
@@ -51,12 +51,12 @@ export function Status({ children, tone }) {
|
|
|
51
51
|
export function Btn({ children, onClick, disabled, primary, tone, type = 'button' }) {
|
|
52
52
|
const bg = tone === 'bad' ? 'rgba(255,80,80,0.15)'
|
|
53
53
|
: primary ? 'linear-gradient(135deg, #9B59B6, #3498DB)'
|
|
54
|
-
: 'rgba(255,255,255,0.08)';
|
|
54
|
+
: 'rgba(var(--sd-ink, 255, 255, 255), 0.08)';
|
|
55
55
|
return (
|
|
56
56
|
<button type={type} onClick={onClick} disabled={disabled} style={{
|
|
57
57
|
padding: '9px 18px', borderRadius: 7, fontSize: 13.5, fontWeight: 650,
|
|
58
|
-
color: disabled ? '#667' : '#fff', border: LINE,
|
|
59
|
-
background: disabled ? 'rgba(255,255,255,0.05)' : bg,
|
|
58
|
+
color: disabled ? 'var(--sd-fg-4, #667)' : 'var(--sd-fg-1, #fff)', border: LINE,
|
|
59
|
+
background: disabled ? 'rgba(var(--sd-ink, 255, 255, 255), 0.05)' : bg,
|
|
60
60
|
cursor: disabled ? 'not-allowed' : 'pointer',
|
|
61
61
|
}}>{children}</button>
|
|
62
62
|
);
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
|
|
22
22
|
body {
|
|
23
23
|
background: var(--sd-bg);
|
|
24
|
-
color: #fff;
|
|
24
|
+
color: var(--sd-fg-1, #fff);
|
|
25
25
|
font-family: var(--sd-font);
|
|
26
26
|
}
|
|
27
27
|
|
|
@@ -103,7 +103,7 @@ html:has([data-field-question]) {
|
|
|
103
103
|
}
|
|
104
104
|
|
|
105
105
|
::-webkit-scrollbar-thumb {
|
|
106
|
-
background: rgba(255, 255, 255, 0.15);
|
|
106
|
+
background: rgba(var(--sd-ink, 255, 255, 255), 0.15);
|
|
107
107
|
border-radius: 3px;
|
|
108
108
|
}
|
|
109
109
|
|
|
@@ -125,3 +125,160 @@ html:has([data-field-question]) {
|
|
|
125
125
|
.crm-grid { grid-template-columns: minmax(0, 1fr); }
|
|
126
126
|
.crm-board { grid-template-columns: minmax(0, 1fr); }
|
|
127
127
|
}
|
|
128
|
+
|
|
129
|
+
/* ---- How a look draws its buttons (lib/themes.js BUTTONS; html[data-buttons]) ----
|
|
130
|
+
Buttons carry their own colours inline, so a look adds what they don't set:
|
|
131
|
+
shadow, frost, glow, outline, and the corner where a look has its own shape.
|
|
132
|
+
Round buttons (50%) stay round. The tab row's links count as buttons. */
|
|
133
|
+
/* Flat: Obsidian, Paper. No depth, a quiet hover. */
|
|
134
|
+
html[data-buttons="flat"] :is(button, #main-tabs > a) { box-shadow: none !important; text-shadow: none !important; }
|
|
135
|
+
html[data-buttons="flat"] :is(button, #main-tabs > a):not(:disabled):hover { filter: brightness(1.12); }
|
|
136
|
+
html[data-buttons="flat"] :is(button, select, input[type="search"], input[type="text"], #main-tabs > a):not([style*="border-radius: 50%"]) { border-radius: 5px !important; }
|
|
137
|
+
|
|
138
|
+
/* Square: Analyst. Crisp corners, hairline borders, no depth. */
|
|
139
|
+
html[data-buttons="square"] :is(button, select, input[type="search"], input[type="text"], #main-tabs, #main-tabs > a):not([style*="border-radius: 50%"]) { border-radius: 2px !important; }
|
|
140
|
+
html[data-buttons="square"] :is(button, #main-tabs > a) { box-shadow: none !important; letter-spacing: 0.02em; }
|
|
141
|
+
html[data-buttons="square"] :is(button, #main-tabs > a):not(:disabled):hover { outline: 1px solid color-mix(in srgb, var(--sd-accent) 70%, transparent); outline-offset: -1px; }
|
|
142
|
+
|
|
143
|
+
/* Frosted: Glass, as Apple's Liquid Glass (WWDC25 "Meet Liquid Glass"; HIG →
|
|
144
|
+
Materials). Not a frosted blur: glass that bends light at its edges (the
|
|
145
|
+
lensing comes from app/components/LiquidGlass.js, as --lg-lens), with a
|
|
146
|
+
specular rim lit from the top left, a bright top edge, and a soft shadow
|
|
147
|
+
under it. Panels full of words use the "regular" glass: a dark tint under
|
|
148
|
+
the blur so the words read (lib/themes.js --sd-panel). Controls are capsules
|
|
149
|
+
of clearer glass; the tab bar is one capsule with plain segments in it,
|
|
150
|
+
never glass on glass. */
|
|
151
|
+
html[data-buttons="frosted"] [data-glass-panel] {
|
|
152
|
+
position: relative;
|
|
153
|
+
isolation: isolate;
|
|
154
|
+
-webkit-backdrop-filter: var(--sd-panel-blur) var(--lg-lens, ) !important;
|
|
155
|
+
backdrop-filter: var(--sd-panel-blur) var(--lg-lens, ) !important;
|
|
156
|
+
background-image: linear-gradient(180deg, rgba(255, 255, 255, 0.09), rgba(255, 255, 255, 0.02) 40%, rgba(255, 255, 255, 0)) !important;
|
|
157
|
+
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.24), inset 0 -1px 0 rgba(255, 255, 255, 0.05), 0 24px 60px rgba(0, 0, 0, 0.42), 0 1px 2px rgba(0, 0, 0, 0.25) !important;
|
|
158
|
+
}
|
|
159
|
+
html[data-buttons="frosted"] [data-glass-panel="bar"] { border-radius: 999px !important; }
|
|
160
|
+
html[data-buttons="frosted"] .glass-rim, html[data-buttons="frosted"] [data-glass-panel]::before,
|
|
161
|
+
html[data-buttons="frosted"] :is(button, #main-tabs > a):not(.radar-go):not(#main-tabs *)::before {
|
|
162
|
+
content: "";
|
|
163
|
+
position: absolute;
|
|
164
|
+
inset: 0;
|
|
165
|
+
border-radius: inherit;
|
|
166
|
+
padding: 1px;
|
|
167
|
+
pointer-events: none;
|
|
168
|
+
background: linear-gradient(135deg, rgba(255, 255, 255, 0.55), rgba(255, 255, 255, 0.1) 30%, rgba(255, 255, 255, 0) 55%, rgba(255, 255, 255, 0.22));
|
|
169
|
+
-webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
|
|
170
|
+
-webkit-mask-composite: xor;
|
|
171
|
+
mask-composite: exclude;
|
|
172
|
+
}
|
|
173
|
+
/* Controls: capsules of clear glass that spring when pressed. */
|
|
174
|
+
html[data-buttons="frosted"] :is(button):not(.radar-go):not(#main-tabs *) {
|
|
175
|
+
position: relative;
|
|
176
|
+
isolation: isolate;
|
|
177
|
+
-webkit-backdrop-filter: blur(4px) saturate(170%);
|
|
178
|
+
backdrop-filter: blur(4px) saturate(170%);
|
|
179
|
+
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.3), inset 0 0 0 0.5px rgba(255, 255, 255, 0.14), 0 4px 14px rgba(0, 0, 0, 0.24) !important;
|
|
180
|
+
}
|
|
181
|
+
html[data-buttons="frosted"] :is(button, select, input[type="search"], input[type="text"]):not([style*="border-radius: 50%"]):not(.radar-go):not(#main-tabs *) { border-radius: 14px !important; }
|
|
182
|
+
html[data-buttons="frosted"] :is(button):not(:disabled):not(#main-tabs *):hover { filter: brightness(1.14); }
|
|
183
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
184
|
+
html[data-buttons="frosted"] :is(button):not(#main-tabs *) { transition: transform 0.25s cubic-bezier(0.3, 1.4, 0.5, 1), filter 0.2s; }
|
|
185
|
+
html[data-buttons="frosted"] :is(button):not(:disabled):not(#main-tabs *):active { transform: scale(1.04); }
|
|
186
|
+
}
|
|
187
|
+
/* The tab bar's segments: the picked one is a lit thumb inside the glass. */
|
|
188
|
+
html[data-buttons="frosted"] #main-tabs > :is(a, button) { border-radius: 999px !important; }
|
|
189
|
+
html[data-buttons="frosted"] #main-tabs > :is(a, button)[aria-current="page"],
|
|
190
|
+
html[data-buttons="frosted"] #main-tabs > button[style*="background: rgb(255, 255, 255)"] {
|
|
191
|
+
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.4), inset 0 0 0 0.5px rgba(255, 255, 255, 0.25), 0 2px 8px rgba(0, 0, 0, 0.25) !important;
|
|
192
|
+
}
|
|
193
|
+
/* Reduce Transparency: solid panels, no lensing. More contrast: a darker tint and a plain rim. */
|
|
194
|
+
@media (prefers-reduced-transparency: reduce) {
|
|
195
|
+
html[data-buttons="frosted"] [data-glass-panel] { -webkit-backdrop-filter: none !important; backdrop-filter: none !important; background: rgba(28, 28, 36, 0.97) !important; }
|
|
196
|
+
}
|
|
197
|
+
@media (prefers-contrast: more) {
|
|
198
|
+
html[data-buttons="frosted"] [data-glass-panel] { background-color: rgba(10, 10, 14, 0.85) !important; }
|
|
199
|
+
html[data-buttons="frosted"] [data-glass-panel]::before { background: rgba(255, 255, 255, 0.6); }
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/* Neon: Synthwave. A glow in the accent, brighter on hover. */
|
|
203
|
+
html[data-buttons="neon"] :is(button, #main-tabs > a):not(:disabled) {
|
|
204
|
+
box-shadow: 0 0 0 1px color-mix(in srgb, var(--sd-accent) 55%, transparent), 0 0 12px color-mix(in srgb, var(--sd-accent) 26%, transparent) !important;
|
|
205
|
+
text-shadow: 0 0 8px color-mix(in srgb, var(--sd-accent) 45%, transparent);
|
|
206
|
+
}
|
|
207
|
+
html[data-buttons="neon"] :is(button, #main-tabs > a):not(:disabled):hover {
|
|
208
|
+
box-shadow: 0 0 0 1px var(--sd-accent), 0 0 20px color-mix(in srgb, var(--sd-accent) 50%, transparent) !important;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/* Bold: High contrast. A clear outline on every control, and a thick focus ring. */
|
|
212
|
+
html[data-buttons="bold"] :is(button, select, input[type="search"], input[type="text"], #main-tabs > a) { outline: 1.5px solid rgba(var(--sd-ink, 255, 255, 255), 0.55); outline-offset: -1.5px; font-weight: 700; }
|
|
213
|
+
html[data-buttons="bold"] :is(button, a, select, input):focus-visible { outline: 3px solid var(--sd-accent) !important; outline-offset: 2px; }
|
|
214
|
+
|
|
215
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
216
|
+
html:not([data-buttons="soft"]) :is(button, #main-tabs > a) { transition: box-shadow 0.15s, filter 0.15s, outline-color 0.15s; }
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/* ---- Analyst: nothing decorative (lib/themes.js) ----
|
|
220
|
+
An analysis tool's restraint: no gradients, glows or shadows anywhere, the
|
|
221
|
+
name in plain ink, the picked tab and the main buttons a flat accent, and
|
|
222
|
+
every number in even columns. Only in this look; the colours inline stay
|
|
223
|
+
the same in every other. */
|
|
224
|
+
html[data-theme="analyst"] body { font-variant-numeric: tabular-nums; }
|
|
225
|
+
html[data-theme="analyst"] [style*="box-shadow"] { box-shadow: none !important; }
|
|
226
|
+
html[data-theme="analyst"] [style*="text-shadow"] { text-shadow: none !important; }
|
|
227
|
+
html[data-theme="analyst"] header h1, html[data-theme="analyst"] header :is(span, a) > h1, html[data-theme="analyst"] [style*="-webkit-text-fill-color"] {
|
|
228
|
+
background: none !important; -webkit-text-fill-color: currentColor !important; color: var(--sd-fg-1, #111) !important;
|
|
229
|
+
}
|
|
230
|
+
html[data-theme="analyst"] :is(button, a)[style*="gradient"] { background: var(--sd-accent) !important; color: #fff !important; border-color: transparent !important; }
|
|
231
|
+
html[data-theme="analyst"] div[style*="radial-gradient"], html[data-theme="analyst"] div[style*="linear-gradient(1"] { background-image: none !important; }
|
|
232
|
+
html[data-theme="analyst"] [style*="backdrop-filter"] { -webkit-backdrop-filter: none !important; backdrop-filter: none !important; }
|
|
233
|
+
html[data-theme="analyst"] :is(.galaxy-ring-pulse, .cluster-hub, .seed) { animation: none !important; }
|
|
234
|
+
|
|
235
|
+
/* ---- A look's dots, on every map (Blake, 2026-10-03: "liquid glass for even
|
|
236
|
+
path dots etc all things of nature … the same for the others") ----
|
|
237
|
+
The Galaxy paints its own (app/components/ForceGraph.js); everywhere else a
|
|
238
|
+
dot is .sd-dot (SVG) or .sd-dot-html, and takes its look's style here, with
|
|
239
|
+
app/components/ThemeDefs.js's filters: Degrees' bridges, clusters and hover
|
|
240
|
+
previews, Separation, Paths' bubbles, the Scan cluster, circle previews, the
|
|
241
|
+
header's scan dots, Check for new's spinner, legends, tier dots, avatars. */
|
|
242
|
+
html[data-dots="droplet"] :is(.sd-dot, .pv-d3, .pv-d4) { filter: url(#sd-droplet); }
|
|
243
|
+
html[data-dots="glow"] :is(.sd-dot, .pv-d3, .pv-d4) { filter: url(#sd-glow); }
|
|
244
|
+
html[data-dots="plain"] .sd-dot:is(:not([stroke]), [stroke="none"]) { stroke: #2b2b2b; stroke-width: 0.8px; stroke-opacity: 0.75; }
|
|
245
|
+
html[data-dots="droplet"] .sd-dot-html {
|
|
246
|
+
background-image: radial-gradient(circle at 34% 30%, rgba(255, 255, 255, 0.95), rgba(255, 255, 255, 0.35) 22%, rgba(255, 255, 255, 0) 55%) !important;
|
|
247
|
+
box-shadow: inset 0 0 0 0.5px rgba(255, 255, 255, 0.55), 0 1px 3px rgba(0, 0, 0, 0.35) !important;
|
|
248
|
+
}
|
|
249
|
+
html[data-dots="glow"] .sd-dot-html { filter: saturate(1.25) brightness(1.08) drop-shadow(0 0 3px rgba(255, 255, 255, 0.35)); }
|
|
250
|
+
html[data-dots="plain"] .sd-dot-html { box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.6) !important; }
|
|
251
|
+
|
|
252
|
+
/* ---- Each look's panels, tab bar, notch and the map's tooltips ----
|
|
253
|
+
[data-glass-panel] marks the side panels, the tab bar and the notch; the
|
|
254
|
+
tooltips are the Galaxy's .graph-tooltip. Glass's are above. */
|
|
255
|
+
/* Obsidian: graphite panels with fine borders, no depth, square-ish tooltips */
|
|
256
|
+
html[data-theme="obsidian"] [data-glass-panel] { box-shadow: none !important; border-color: #363636 !important; }
|
|
257
|
+
html[data-theme="obsidian"] [data-glass-panel="side"] { border-right: 1px solid #363636 !important; border-left: 1px solid #363636 !important; }
|
|
258
|
+
html[data-theme="obsidian"] #main-tabs { background: #262626 !important; box-shadow: inset 0 0 0 1px #363636; }
|
|
259
|
+
html[data-theme="obsidian"] .graph-tooltip { background: #262626 !important; border: 1px solid #3f3f3f !important; border-radius: 4px !important; color: #dcddde !important; box-shadow: 0 4px 14px rgba(0, 0, 0, 0.4); }
|
|
260
|
+
/* Synthwave: neon edges in the accent */
|
|
261
|
+
html[data-theme="synthwave"] [data-glass-panel] { box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--sd-accent) 45%, transparent), 0 0 26px color-mix(in srgb, var(--sd-accent) 16%, transparent) !important; }
|
|
262
|
+
html[data-theme="synthwave"] #main-tabs { box-shadow: 0 0 0 1px color-mix(in srgb, var(--sd-accent) 55%, transparent), 0 0 18px color-mix(in srgb, var(--sd-accent) 22%, transparent); }
|
|
263
|
+
html[data-theme="synthwave"] .graph-tooltip { background: rgba(36, 16, 63, 0.94) !important; border: 1px solid var(--sd-accent) !important; box-shadow: 0 0 16px color-mix(in srgb, var(--sd-accent) 35%, transparent); color: #fff5ff !important; }
|
|
264
|
+
/* Space: deep panels with a cool rim of starlight */
|
|
265
|
+
html[data-theme="space"] [data-glass-panel] { box-shadow: inset 0 1px 0 rgba(205, 218, 255, 0.14), inset 0 0 0 1px rgba(150, 170, 255, 0.1), 0 18px 50px rgba(0, 0, 0, 0.5) !important; }
|
|
266
|
+
html[data-theme="space"] .graph-tooltip { background: rgba(8, 10, 28, 0.94) !important; border: 1px solid rgba(150, 170, 255, 0.28) !important; color: #eef2ff !important; }
|
|
267
|
+
/* High contrast: hard outlines everywhere */
|
|
268
|
+
html[data-theme="contrast"] [data-glass-panel] { box-shadow: inset 0 0 0 1.5px #ffffff !important; }
|
|
269
|
+
html[data-theme="contrast"] .graph-tooltip { background: #000 !important; border: 1.5px solid #fff !important; color: #fff !important; }
|
|
270
|
+
/* Daylight: white panels with soft, layered shadows, as light Mac apps draw them */
|
|
271
|
+
html[data-theme="daylight"] [data-glass-panel] { box-shadow: 0 0 0 1px rgba(18, 22, 40, 0.07), 0 1px 2px rgba(18, 22, 40, 0.06), 0 10px 30px rgba(18, 22, 40, 0.08) !important; }
|
|
272
|
+
html[data-theme="daylight"] #main-tabs { background: #ffffff !important; }
|
|
273
|
+
/* Paper: ruled, flat, warm */
|
|
274
|
+
html[data-theme="paper"] [data-glass-panel] { box-shadow: inset 0 0 0 1px #d8cdb8 !important; }
|
|
275
|
+
html[data-theme="paper"] #main-tabs { background: #efe7d6 !important; }
|
|
276
|
+
/* Analyst: grey, flat, hairlines */
|
|
277
|
+
html[data-theme="analyst"] [data-glass-panel] { box-shadow: inset 0 0 0 1px #d0d0d0 !important; }
|
|
278
|
+
html[data-theme="analyst"] #main-tabs { background: #ececec !important; }
|
|
279
|
+
/* Light looks: the map's tooltip is a light card with ink words */
|
|
280
|
+
html[data-mode="light"] .graph-tooltip { background: rgba(255, 255, 255, 0.98) !important; color: #11141c !important; border: 1px solid rgba(18, 22, 40, 0.12) !important; box-shadow: 0 6px 20px rgba(18, 22, 40, 0.14); }
|
|
281
|
+
html[data-theme="paper"] .graph-tooltip { background: #fbf8f1 !important; border-color: #d8cdb8 !important; font-family: var(--sd-font); }
|
|
282
|
+
html[data-theme="analyst"] .graph-tooltip { border-radius: 2px !important; box-shadow: none; }
|
|
283
|
+
/* Glass: the tooltip is a pane of glass too */
|
|
284
|
+
html[data-buttons="frosted"] .graph-tooltip { background: rgba(18, 18, 30, 0.45) !important; -webkit-backdrop-filter: blur(16px) saturate(1.8); backdrop-filter: blur(16px) saturate(1.8); border: 1px solid rgba(255, 255, 255, 0.18) !important; border-radius: 12px !important; box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.22), 0 10px 30px rgba(0, 0, 0, 0.35); }
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import { useState, useRef } from 'react';
|
|
4
|
-
import {
|
|
3
|
+
import { useState, useRef, useEffect } from 'react';
|
|
4
|
+
import {
|
|
5
|
+
parseConnectionsCsv, saveCsvNetwork, ConnectionsCsvError, CSV_USER, keptBehindScan, closeCsvNetwork, REMOVE_CSV_QUESTION,
|
|
6
|
+
} from '../../lib/csv';
|
|
5
7
|
import { setUser } from '../../lib/user';
|
|
6
8
|
import Link from 'next/link';
|
|
7
9
|
import { TIER_COLORS } from '../../lib/themes';
|
|
8
10
|
|
|
9
11
|
|
|
10
12
|
const card = {
|
|
11
|
-
background: 'rgba(255,255,255,0.03)',
|
|
12
|
-
border: '1px solid rgba(255,255,255,0.08)',
|
|
13
|
+
background: 'rgba(var(--sd-ink, 255, 255, 255), 0.03)',
|
|
14
|
+
border: '1px solid rgba(var(--sd-ink, 255, 255, 255), 0.08)',
|
|
13
15
|
borderRadius: 16,
|
|
14
16
|
padding: 24,
|
|
15
17
|
};
|
|
@@ -19,20 +21,36 @@ export default function ImportPage() {
|
|
|
19
21
|
const [error, setError] = useState('');
|
|
20
22
|
const [result, setResult] = useState(null);
|
|
21
23
|
const [busy, setBusy] = useState(false);
|
|
24
|
+
// A CSV kept here that the map doesn't show, because you have scanned your
|
|
25
|
+
// own connections (lib/csv.js openNetworkSource).
|
|
26
|
+
const [behindScan, setBehindScan] = useState(null);
|
|
22
27
|
const inputRef = useRef(null);
|
|
23
28
|
|
|
24
|
-
|
|
29
|
+
useEffect(() => {
|
|
30
|
+
let off = false;
|
|
31
|
+
keptBehindScan().then((k) => { if (!off) setBehindScan(k); });
|
|
32
|
+
return () => { off = true; };
|
|
33
|
+
}, []);
|
|
34
|
+
|
|
35
|
+
async function handleText(text) {
|
|
25
36
|
setBusy(true);
|
|
26
37
|
setError('');
|
|
27
38
|
try {
|
|
28
39
|
const { connections, skipped } = parseConnectionsCsv(text);
|
|
29
|
-
|
|
30
|
-
|
|
40
|
+
// Kept in the data folder (lib/csv-store.js), so it's still here after
|
|
41
|
+
// the window closes. If it can't be kept, nothing opens: a map that
|
|
42
|
+
// vanished on the next start would look kept when it wasn't.
|
|
43
|
+
const saved = await saveCsvNetwork(connections);
|
|
44
|
+
if (!saved.ok) {
|
|
45
|
+
setError(saved.error);
|
|
31
46
|
setBusy(false);
|
|
32
47
|
return;
|
|
33
48
|
}
|
|
34
|
-
|
|
35
|
-
|
|
49
|
+
const behind = await keptBehindScan();
|
|
50
|
+
setBehindScan(behind);
|
|
51
|
+
// Local-only identity so the app opens without creating an account,
|
|
52
|
+
// unless the map opens on your scanned network instead.
|
|
53
|
+
if (!behind) setUser(CSV_USER.id, CSV_USER.name);
|
|
36
54
|
const tiers = {};
|
|
37
55
|
connections.forEach((c) => { tiers[c.tier] = (tiers[c.tier] || 0) + 1; });
|
|
38
56
|
setResult({ count: connections.length, skipped, tiers });
|
|
@@ -58,32 +76,36 @@ export default function ImportPage() {
|
|
|
58
76
|
<h1 style={{ fontSize: 38, fontWeight: 800, margin: '0 0 8px' }}>
|
|
59
77
|
{result.count.toLocaleString()} connections mapped
|
|
60
78
|
</h1>
|
|
61
|
-
<p style={{ color: 'rgba(255,255,255,0.45)', margin: '0 0 28px', lineHeight: 1.6 }}>
|
|
79
|
+
<p style={{ color: 'rgba(var(--sd-ink, 255, 255, 255), 0.45)', margin: '0 0 28px', lineHeight: 1.6 }}>
|
|
62
80
|
Scored on seniority and company, sorted into tiers.
|
|
63
81
|
{result.skipped > 0 && ` ${result.skipped} row${result.skipped === 1 ? '' : 's'} skipped (blank or duplicate).`}
|
|
64
82
|
</p>
|
|
65
83
|
|
|
66
84
|
<div style={{ ...card, marginBottom: 20 }}>
|
|
67
|
-
<div style={{ fontSize: 11, fontWeight: 700, color: '#666', letterSpacing: 2, marginBottom: 14 }}>YOUR TIERS</div>
|
|
85
|
+
<div style={{ fontSize: 11, fontWeight: 700, color: 'var(--sd-fg-4, #666)', letterSpacing: 2, marginBottom: 14 }}>YOUR TIERS</div>
|
|
68
86
|
{['S', 'A', 'B', 'C', 'D'].map((t) => {
|
|
69
87
|
const n = result.tiers[t] || 0;
|
|
70
88
|
const pct = result.count ? (n / result.count) * 100 : 0;
|
|
71
89
|
return (
|
|
72
90
|
<div key={t} style={{ display: 'flex', alignItems: 'center', gap: 12, marginBottom: 8 }}>
|
|
73
91
|
<span style={{ width: 16, color: TIER_COLORS[t], fontWeight: 800 }}>{t}</span>
|
|
74
|
-
<div style={{ flex: 1, height: 8, borderRadius: 4, background: 'rgba(255,255,255,0.05)', overflow: 'hidden' }}>
|
|
92
|
+
<div style={{ flex: 1, height: 8, borderRadius: 4, background: 'rgba(var(--sd-ink, 255, 255, 255), 0.05)', overflow: 'hidden' }}>
|
|
75
93
|
<div style={{ width: `${pct}%`, height: '100%', background: TIER_COLORS[t], borderRadius: 4 }} />
|
|
76
94
|
</div>
|
|
77
|
-
<span style={{ width: 46, textAlign: 'right', color: 'rgba(255,255,255,0.6)', fontSize: 13 }}>{n}</span>
|
|
95
|
+
<span style={{ width: 46, textAlign: 'right', color: 'rgba(var(--sd-ink, 255, 255, 255), 0.6)', fontSize: 13 }}>{n}</span>
|
|
78
96
|
</div>
|
|
79
97
|
);
|
|
80
98
|
})}
|
|
81
99
|
</div>
|
|
82
100
|
|
|
101
|
+
{behindScan && <BehindScan onRemoved={() => { setBehindScan(null); setResult(null); }} />}
|
|
83
102
|
<Link href="/" style={primaryBtn}>See your galaxy →</Link>
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
103
|
+
{!behindScan && (
|
|
104
|
+
<p style={{ color: 'var(--sd-fg-5, #555)', fontSize: 12, marginTop: 18, lineHeight: 1.6 }}>
|
|
105
|
+
Kept on this computer, in your data folder, so it’s still here after you close the window. Nothing was
|
|
106
|
+
sent anywhere. To remove it, click × next to Your CSV at the top of the map.
|
|
107
|
+
</p>
|
|
108
|
+
)}
|
|
87
109
|
</div>
|
|
88
110
|
</div>
|
|
89
111
|
);
|
|
@@ -95,11 +117,13 @@ export default function ImportPage() {
|
|
|
95
117
|
<h1 style={{ fontSize: 40, fontWeight: 800, margin: '0 0 10px', letterSpacing: -1 }}>
|
|
96
118
|
Map <span style={{ background: 'linear-gradient(135deg,#FFD700,#9B59B6,#3498DB)', WebkitBackgroundClip: 'text', WebkitTextFillColor: 'transparent' }}>your</span> network
|
|
97
119
|
</h1>
|
|
98
|
-
<p style={{ color: 'rgba(255,255,255,0.45)', margin: '0 0 30px', lineHeight: 1.6, fontSize: 16 }}>
|
|
99
|
-
Drop LinkedIn’s official <code style={code}>Connections.csv</code> below. It is read
|
|
100
|
-
scored,
|
|
120
|
+
<p style={{ color: 'rgba(var(--sd-ink, 255, 255, 255), 0.45)', margin: '0 0 30px', lineHeight: 1.6, fontSize: 16 }}>
|
|
121
|
+
Drop LinkedIn’s official <code style={code}>Connections.csv</code> below. It is read on this computer,
|
|
122
|
+
scored, drawn as a galaxy, and kept in your data folder. No account, and nothing leaves this computer.
|
|
101
123
|
</p>
|
|
102
124
|
|
|
125
|
+
{behindScan && <BehindScan onRemoved={() => setBehindScan(null)} />}
|
|
126
|
+
|
|
103
127
|
<div
|
|
104
128
|
onDragOver={(e) => { e.preventDefault(); setDragging(true); }}
|
|
105
129
|
onDragLeave={() => setDragging(false)}
|
|
@@ -109,7 +133,7 @@ export default function ImportPage() {
|
|
|
109
133
|
...card,
|
|
110
134
|
padding: '48px 24px', textAlign: 'center', cursor: 'pointer', marginBottom: 16,
|
|
111
135
|
borderStyle: 'dashed',
|
|
112
|
-
borderColor: dragging ? '#FFD700' : 'rgba(255,255,255,0.12)',
|
|
136
|
+
borderColor: dragging ? '#FFD700' : 'rgba(var(--sd-ink, 255, 255, 255), 0.12)',
|
|
113
137
|
background: dragging ? 'rgba(255,215,0,0.05)' : card.background,
|
|
114
138
|
transition: 'all 0.15s ease',
|
|
115
139
|
}}
|
|
@@ -118,7 +142,7 @@ export default function ImportPage() {
|
|
|
118
142
|
<div style={{ fontWeight: 700, fontSize: 17, marginBottom: 6 }}>
|
|
119
143
|
{busy ? 'Reading…' : 'Drop Connections.csv here'}
|
|
120
144
|
</div>
|
|
121
|
-
<div style={{ color: '#666', fontSize: 13 }}>or click to choose the file</div>
|
|
145
|
+
<div style={{ color: 'var(--sd-fg-4, #666)', fontSize: 13 }}>or click to choose the file</div>
|
|
122
146
|
<input
|
|
123
147
|
ref={inputRef} type="file" accept=".csv,text/csv" style={{ display: 'none' }}
|
|
124
148
|
onChange={(e) => handleFile(e.target.files?.[0])}
|
|
@@ -132,10 +156,10 @@ export default function ImportPage() {
|
|
|
132
156
|
)}
|
|
133
157
|
|
|
134
158
|
<div style={{ ...card, marginBottom: 16 }}>
|
|
135
|
-
<div style={{ fontSize: 11, fontWeight: 700, color: '#666', letterSpacing: 2, marginBottom: 14 }}>HOW TO GET THE FILE</div>
|
|
136
|
-
<ol style={{ margin: 0, paddingLeft: 20, color: 'rgba(255,255,255,0.6)', fontSize: 14, lineHeight: 2 }}>
|
|
137
|
-
<li>LinkedIn → <strong style={{ color: '#fff' }}>Settings & Privacy → Data privacy → Get a copy of your data</strong></li>
|
|
138
|
-
<li>Pick <strong style={{ color: '#fff' }}>Connections</strong> and request the archive</li>
|
|
159
|
+
<div style={{ fontSize: 11, fontWeight: 700, color: 'var(--sd-fg-4, #666)', letterSpacing: 2, marginBottom: 14 }}>HOW TO GET THE FILE</div>
|
|
160
|
+
<ol style={{ margin: 0, paddingLeft: 20, color: 'rgba(var(--sd-ink, 255, 255, 255), 0.6)', fontSize: 14, lineHeight: 2 }}>
|
|
161
|
+
<li>LinkedIn → <strong style={{ color: 'var(--sd-fg-1, #fff)' }}>Settings & Privacy → Data privacy → Get a copy of your data</strong></li>
|
|
162
|
+
<li>Pick <strong style={{ color: 'var(--sd-fg-1, #fff)' }}>Connections</strong> and request the archive</li>
|
|
139
163
|
<li>LinkedIn emails a download link, usually within ~10 minutes</li>
|
|
140
164
|
<li>Unzip it and drop <code style={code}>Connections.csv</code> above</li>
|
|
141
165
|
</ol>
|
|
@@ -143,42 +167,74 @@ export default function ImportPage() {
|
|
|
143
167
|
|
|
144
168
|
<div style={{ ...card, marginBottom: 16 }}>
|
|
145
169
|
<div style={{ fontSize: 11, fontWeight: 700, color: '#2ecc71', letterSpacing: 2, marginBottom: 10 }}>PRIVATE BY DESIGN</div>
|
|
146
|
-
<p style={{ margin: 0, color: 'rgba(255,255,255,0.55)', fontSize: 14, lineHeight: 1.7 }}>
|
|
147
|
-
Your file never leaves this
|
|
148
|
-
|
|
170
|
+
<p style={{ margin: 0, color: 'rgba(var(--sd-ink, 255, 255, 255), 0.55)', fontSize: 14, lineHeight: 1.7 }}>
|
|
171
|
+
Your file never leaves this computer. It is read here, and only what the map needs (names, positions,
|
|
172
|
+
companies, profile links and when you connected) is kept, in your data folder, apart from any network you
|
|
173
|
+
scan. The <strong style={{ color: 'var(--sd-fg-1, #fff)' }}>Email Address column is ignored entirely</strong>.
|
|
149
174
|
</p>
|
|
150
175
|
</div>
|
|
151
176
|
|
|
152
177
|
<div style={{ ...card, borderColor: 'rgba(255,215,0,0.15)' }}>
|
|
153
|
-
<div style={{ fontSize: 11, fontWeight: 700, color: '#FFD700', letterSpacing: 2, marginBottom: 10 }}>HONEST CAVEAT</div>
|
|
154
|
-
<p style={{ margin: '0 0 12px', color: 'rgba(255,255,255,0.55)', fontSize: 14, lineHeight: 1.7 }}>
|
|
178
|
+
<div style={{ fontSize: 11, fontWeight: 700, color: 'var(--sd-gold, #FFD700)', letterSpacing: 2, marginBottom: 10 }}>HONEST CAVEAT</div>
|
|
179
|
+
<p style={{ margin: '0 0 12px', color: 'rgba(var(--sd-ink, 255, 255, 255), 0.55)', fontSize: 14, lineHeight: 1.7 }}>
|
|
155
180
|
LinkedIn’s export contains no profile photos, so everyone renders as initials on a tier-colored circle.
|
|
156
|
-
It also only covers people you are <em>already</em> connected to
|
|
157
|
-
the <strong style={{ color: '#fff' }}>Outlink queue</strong> stay empty, because those map the people you
|
|
181
|
+
It also only covers people you are <em>already</em> connected to, so <strong style={{ color: 'var(--sd-fg-1, #fff)' }}>Degrees</strong> and
|
|
182
|
+
the <strong style={{ color: 'var(--sd-fg-1, #fff)' }}>Outlink queue</strong> stay empty, because those map the people you
|
|
158
183
|
haven’t met yet.
|
|
159
184
|
</p>
|
|
160
|
-
<p style={{ margin: 0, color: '#666', fontSize: 13, lineHeight: 1.7 }}>
|
|
161
|
-
Want those? Run the local scanner
|
|
162
|
-
<Link href="/setup" style={{ color: '#3498DB', textDecoration: 'none' }}>See setup →</Link>
|
|
185
|
+
<p style={{ margin: 0, color: 'var(--sd-fg-4, #666)', fontSize: 13, lineHeight: 1.7 }}>
|
|
186
|
+
Want those? Run the local scanner: it captures 2nd-degree circles and real photos.{' '}
|
|
187
|
+
<Link href="/setup" style={{ color: 'var(--sd-blue, #3498DB)', textDecoration: 'none' }}>See setup →</Link>
|
|
163
188
|
</p>
|
|
164
189
|
</div>
|
|
165
190
|
|
|
166
191
|
<div style={{ textAlign: 'center', marginTop: 26 }}>
|
|
167
|
-
<Link href="/" style={{ color: '#555', fontSize: 13, textDecoration: 'none' }}>← Back</Link>
|
|
192
|
+
<Link href="/" style={{ color: 'var(--sd-fg-5, #555)', fontSize: 13, textDecoration: 'none' }}>← Back</Link>
|
|
168
193
|
</div>
|
|
169
194
|
</div>
|
|
170
195
|
</div>
|
|
171
196
|
);
|
|
172
197
|
}
|
|
173
198
|
|
|
199
|
+
// A CSV kept here that the map doesn't show: your scan wins (lib/csv.js
|
|
200
|
+
// openNetworkSource). The file is never deleted for you, so this says it's
|
|
201
|
+
// there and offers to remove it.
|
|
202
|
+
function BehindScan({ onRemoved }) {
|
|
203
|
+
const [busy, setBusy] = useState(false);
|
|
204
|
+
const [error, setError] = useState('');
|
|
205
|
+
async function remove() {
|
|
206
|
+
if (!window.confirm(REMOVE_CSV_QUESTION)) return;
|
|
207
|
+
setBusy(true);
|
|
208
|
+
setError('');
|
|
209
|
+
const closed = await closeCsvNetwork('csv');
|
|
210
|
+
setBusy(false);
|
|
211
|
+
if (closed.ok) onRemoved();
|
|
212
|
+
else setError(closed.error);
|
|
213
|
+
}
|
|
214
|
+
return (
|
|
215
|
+
<div style={{ ...card, padding: '14px 18px', marginBottom: 16, display: 'flex', alignItems: 'center', gap: 14, flexWrap: 'wrap' }}>
|
|
216
|
+
<span style={{ flex: '1 1 260px', color: 'rgba(var(--sd-ink, 255, 255, 255), 0.65)', fontSize: 14, lineHeight: 1.6 }}>
|
|
217
|
+
Your map shows the network you scanned. A CSV import is still kept on this computer.
|
|
218
|
+
</span>
|
|
219
|
+
<button onClick={remove} disabled={busy} style={{
|
|
220
|
+
padding: '8px 14px', borderRadius: 8, cursor: busy ? 'default' : 'pointer', font: 'inherit', fontSize: 13, fontWeight: 700,
|
|
221
|
+
border: '1px solid rgba(var(--sd-ink, 255, 255, 255), 0.2)', background: 'transparent', color: 'var(--sd-fg-1, #fff)',
|
|
222
|
+
}}>
|
|
223
|
+
{busy ? 'Removing…' : 'Remove it'}
|
|
224
|
+
</button>
|
|
225
|
+
{error && <div style={{ width: '100%', color: '#ff8080', fontSize: 13, lineHeight: 1.6 }}>{error}</div>}
|
|
226
|
+
</div>
|
|
227
|
+
);
|
|
228
|
+
}
|
|
229
|
+
|
|
174
230
|
const wrap = {
|
|
175
|
-
minHeight: '100vh', background: 'var(--sd-page)', color: '#fff', padding: '56px 24px',
|
|
231
|
+
minHeight: '100vh', background: 'var(--sd-page)', color: 'var(--sd-fg-1, #fff)', padding: '56px 24px',
|
|
176
232
|
fontFamily: 'var(--sd-font)',
|
|
177
233
|
display: 'flex', justifyContent: 'center',
|
|
178
234
|
};
|
|
179
235
|
|
|
180
236
|
const code = {
|
|
181
|
-
background: 'rgba(255,255,255,0.07)', padding: '2px 6px', borderRadius: 5,
|
|
237
|
+
background: 'rgba(var(--sd-ink, 255, 255, 255), 0.07)', padding: '2px 6px', borderRadius: 5,
|
|
182
238
|
fontSize: 13, fontFamily: 'ui-monospace, SFMono-Regular, Menlo, monospace',
|
|
183
239
|
};
|
|
184
240
|
|
|
@@ -244,7 +244,7 @@ function GalaxySection() {
|
|
|
244
244
|
</h2>
|
|
245
245
|
<p style={{ fontSize: 17, color: 'rgba(255,255,255,0.5)', lineHeight: 1.7, marginTop: 20, maxWidth: 440 }}>
|
|
246
246
|
Every connection orbits you by power tier. S-Tier innermost, D-Tier outermost.
|
|
247
|
-
A living galaxy of influence
|
|
247
|
+
A living galaxy of influence. Zoom, filter, and explore your entire professional universe.
|
|
248
248
|
</p>
|
|
249
249
|
{/* Tier legend */}
|
|
250
250
|
<div style={{ display: 'flex', gap: 12, marginTop: 32, flexWrap: 'wrap' }}>
|
|
@@ -321,7 +321,7 @@ function ChainSection() {
|
|
|
321
321
|
const [ref, inView] = useInView();
|
|
322
322
|
const degrees = [
|
|
323
323
|
// The sample's counts; it maps two degrees.
|
|
324
|
-
{ d: 1, label: 'Your Connections', desc: 'Direct network
|
|
324
|
+
{ d: 1, label: 'Your Connections', desc: 'Direct network, scored & tiered', color: '#3498DB', count: SAMPLE_STATS.degree1 },
|
|
325
325
|
{ d: 2, label: 'Bridge Connections', desc: 'Friends of your bridges', color: '#9B59B6', count: SAMPLE_STATS.degree2 },
|
|
326
326
|
{ d: 3, label: 'Extended Reach', desc: 'Bridged from promoted D2s', color: '#FFD700', count: null },
|
|
327
327
|
{ d: 4, label: 'Industry Layer', desc: 'Company & sector intelligence', color: '#FF6B35', count: null },
|
|
@@ -515,7 +515,7 @@ function FeaturesGrid() {
|
|
|
515
515
|
{
|
|
516
516
|
title: 'Bridge Clusters',
|
|
517
517
|
subtitle: 'Deep Network Mining',
|
|
518
|
-
desc: 'Select any D1 connection as a bridge. Automatically discover and score all their connections
|
|
518
|
+
desc: 'Select any D1 connection as a bridge. Automatically discover and score all their connections: your D2 layer.',
|
|
519
519
|
color: '#9B59B6',
|
|
520
520
|
icon: '🔗',
|
|
521
521
|
stat: `${SAMPLE_STATS.bridges} bridges in the sample`,
|
|
@@ -700,7 +700,7 @@ function TheorySection() {
|
|
|
700
700
|
proximity, and shared experience.
|
|
701
701
|
</p>
|
|
702
702
|
<p style={{ fontSize: 17, color: 'rgba(255,255,255,0.45)', lineHeight: 1.8, marginTop: 16, maxWidth: 560, margin: '16px auto 0' }}>
|
|
703
|
-
Six degrees of separation isn’t just a theory &
|
|
703
|
+
Six degrees of separation isn’t just a theory. It’s the architecture of human connection.
|
|
704
704
|
Every string vibrates with potential. Every bridge shortens the distance.
|
|
705
705
|
</p>
|
|
706
706
|
|
|
@@ -712,7 +712,7 @@ function TheorySection() {
|
|
|
712
712
|
opacity: inView ? 1 : 0, transition: 'opacity 1.5s ease 0.5s',
|
|
713
713
|
}}>
|
|
714
714
|
“Everyone is connected to everyone else by six degrees or fewer.
|
|
715
|
-
The question isn’t <em>if</em
|
|
715
|
+
The question isn’t <em>if</em>, it’s <em>through whom</em>.”
|
|
716
716
|
</div>
|
|
717
717
|
</div>
|
|
718
718
|
</div>
|
|
@@ -22,12 +22,14 @@ import StaleServerBanner from './components/StaleServerBanner';
|
|
|
22
22
|
import ScanStatusBar from './components/ScanStatusBar';
|
|
23
23
|
import SocialAutoSync from './components/SocialAutoSync';
|
|
24
24
|
import ThemeLoader from './components/ThemeLoader';
|
|
25
|
+
import LiquidGlass from './components/LiquidGlass';
|
|
26
|
+
import ThemeDefs from './components/ThemeDefs';
|
|
25
27
|
|
|
26
|
-
const THEME_FIRST = `try{var t=JSON.parse(localStorage.getItem('six-degrees-theme-vars')||'null');if(t&&t.vars){var r=document.documentElement;for(var k in t.vars){var v=String(t.vars[k]);if(/^--sd-[a-z0-9-]+$/.test(k)&&!/[;{}<>]/.test(v))r.style.setProperty(k,v)}var a=t.attrs||{};if(/^[a-z]+$/.test(a
|
|
28
|
+
const THEME_FIRST = `try{var t=JSON.parse(localStorage.getItem('six-degrees-theme-vars')||'null');if(t&&t.vars){var r=document.documentElement;for(var k in t.vars){var v=String(t.vars[k]);if(/^--sd-[a-z0-9-]+$/.test(k)&&!/[;{}<>]/.test(v))r.style.setProperty(k,v)}var a=t.attrs||{};['theme','backdrop','mode','buttons','dots'].forEach(function(n){if(/^[a-z]+$/.test(a[n]||''))r.dataset[n]=a[n]});r.style.colorScheme=a.mode==='light'?'light':'dark'}}catch(e){}`;
|
|
27
29
|
|
|
28
30
|
export default function RootLayout({ children }) {
|
|
29
31
|
return (
|
|
30
|
-
<html lang="en" data-backdrop="none" className={`${geistSans.variable} ${geistMono.variable}`} suppressHydrationWarning>
|
|
32
|
+
<html lang="en" data-backdrop="none" data-mode="dark" data-buttons="soft" data-dots="solid" className={`${geistSans.variable} ${geistMono.variable}`} suppressHydrationWarning>
|
|
31
33
|
<head>
|
|
32
34
|
{/* The theme (lib/theme-store.js), on the page before it paints. Only
|
|
33
35
|
--sd- variables, and only values with nothing that could end one. */}
|
|
@@ -35,6 +37,8 @@ export default function RootLayout({ children }) {
|
|
|
35
37
|
</head>
|
|
36
38
|
<body style={{ margin: 0, padding: 0, background: 'var(--sd-bg, #0a0a1a)' }}>
|
|
37
39
|
<ThemeLoader />
|
|
40
|
+
<LiquidGlass />
|
|
41
|
+
<ThemeDefs />
|
|
38
42
|
<UserProvider>
|
|
39
43
|
{children}
|
|
40
44
|
{/* Says so when the files on disk have moved past what this server
|