+
+
+
+
+ Social Proof / Top 100 Designer Playbook
+
+
+ A meticulously nurtured audience that mirrors top-tier design momentum.
+
+
+ Every connection is the outcome of a curated conversation—carefully aligned with product intuition, growth rituals,
+ and the brand language of a top 100 designer.
+
+
+ {followerSegments.map((segment) => (
+
+
{segment.label}
+
{segment.displayValue}
+
{segment.caption}
+
+ ))}
+
-
-
-
-
-
- Audience distribution across social platforms
-
- LinkedIn {followerSegments[0].displayValue}, Facebook {followerSegments[1].displayValue}, Instagram
- {` ${followerSegments[2].value}`} followers in total {totalLabel} advocates.
-
-
- {followerSegments.map((segment, index) => {
- const startValue = accumulatedValue;
- accumulatedValue += segment.value;
- const segmentRatio = segment.value / totalValue;
- const startRatio = startValue / totalValue;
- const dashArray = `${segmentRatio * circumference} ${circumference}`;
- const dashOffset = circumference - startRatio * circumference;
+
+
+
+
+ Audience distribution across social platforms
+
+ LinkedIn {followerSegments[0].displayValue}, Facebook {followerSegments[1].displayValue}, Instagram
+ {` ${followerSegments[2].value}`} followers in total {totalLabel} advocates.
+
+
+ {followerSegments.map((segment, index) => {
+ const startValue = accumulatedValue;
+ accumulatedValue += segment.value;
+ const segmentRatio = segment.value / totalValue;
+ const startRatio = startValue / totalValue;
+ const dashArray = `${segmentRatio * circumference} ${circumference}`;
+ const dashOffset = circumference - startRatio * circumference;
- return (
-
- );
- })}
-
-
-
Network
-
{totalLabel}
-
human-first advocates
+ return (
+
+ );
+ })}
+
+
+ Network
+ {totalLabel}
+ human-first advocates
+
+
+
+
Platform reach
+
+ LinkedIn {followerSegments[0].displayValue}, Facebook {followerSegments[1].displayValue}, Instagram {followerSegments[2].value}{' '}
+ followers with 908 following.
+
-
-
-
Platform reach
-
- LinkedIn {followerSegments[0].displayValue}, Facebook {followerSegments[1].displayValue}, Instagram {followerSegments[2].value}{' '}
- followers with 908 following.
-
-
-
+
+
);
};
diff --git a/src/index.css b/src/index.css
index 4ed5f975..d531000b 100644
--- a/src/index.css
+++ b/src/index.css
@@ -75,3 +75,74 @@
outline-offset: 2px;
}
}
+
+@layer components {
+ .cursor-trail-item {
+ pointer-events: none;
+ transform-origin: center;
+ filter: drop-shadow(0 12px 24px rgba(0, 150, 136, 0.35));
+ mix-blend-mode: screen;
+ z-index: 3;
+ animation: cursor-trail-float var(--cursor-trail-duration, 900ms) ease-out forwards;
+ will-change: transform, opacity;
+ }
+
+ .cursor-trail-veil {
+ position: absolute;
+ inset: -12%;
+ pointer-events: none;
+ border-radius: inherit;
+ background: radial-gradient(circle at 20% 15%, rgba(2, 25, 22, 0.6), transparent 65%),
+ radial-gradient(circle at 82% 28%, rgba(3, 52, 45, 0.55), transparent 65%),
+ linear-gradient(135deg, rgba(1, 18, 15, 0.65), rgba(0, 42, 36, 0.55));
+ mix-blend-mode: multiply;
+ opacity: var(--cursor-trail-veil-opacity, 0.45);
+ transition: opacity 250ms ease-out;
+ z-index: 1;
+ }
+
+ .cursor-trail-reveal {
+ position: absolute;
+ left: 0;
+ top: 0;
+ pointer-events: none;
+ transform: translate(-50%, -50%);
+ border-radius: 9999px;
+ background: radial-gradient(circle at center, rgba(137, 255, 234, 0.68), rgba(137, 255, 234, 0));
+ mix-blend-mode: screen;
+ filter: saturate(1.4) brightness(1.25) blur(18px);
+ backdrop-filter: blur(10px) saturate(1.45);
+ -webkit-backdrop-filter: blur(10px) saturate(1.45);
+ z-index: 2;
+ animation: cursor-trail-reveal var(--cursor-trail-duration, 900ms) ease-out forwards;
+ will-change: transform, opacity;
+ }
+}
+
+@keyframes cursor-trail-float {
+ 0% {
+ opacity: 0.18;
+ transform: translate(-50%, -50%) scale(0.6) rotate(var(--cursor-trail-rotate, 0deg));
+ }
+ 25% {
+ opacity: 0.85;
+ }
+ 100% {
+ opacity: 0;
+ transform: translate(-50%, -80%) scale(1.2) rotate(var(--cursor-trail-rotate, 0deg));
+ }
+}
+
+@keyframes cursor-trail-reveal {
+ 0% {
+ opacity: 0;
+ transform: translate(-50%, -50%) scale(0.45);
+ }
+ 40% {
+ opacity: 0.9;
+ }
+ 100% {
+ opacity: 0;
+ transform: translate(-50%, -50%) scale(1.35);
+ }
+}
diff --git a/yarn.lock b/yarn.lock
index b0dcf781..0b5f18cd 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1783,6 +1783,7 @@ __metadata:
eslint-plugin-react-refresh: "npm:^0.4.7"
express: "npm:^4.21.2"
express-rate-limit: "npm:^8.1.0"
+ framer-motion: "npm:^12.23.24"
glob: "npm:^10.4.5"
langchain: "npm:^0.3.13"
postcss: "npm:^8.4.39"
@@ -2905,6 +2906,28 @@ __metadata:
languageName: node
linkType: hard
+"framer-motion@npm:^12.23.24":
+ version: 12.23.24
+ resolution: "framer-motion@npm:12.23.24"
+ dependencies:
+ motion-dom: "npm:^12.23.23"
+ motion-utils: "npm:^12.23.6"
+ tslib: "npm:^2.4.0"
+ peerDependencies:
+ "@emotion/is-prop-valid": "*"
+ react: ^18.0.0 || ^19.0.0
+ react-dom: ^18.0.0 || ^19.0.0
+ peerDependenciesMeta:
+ "@emotion/is-prop-valid":
+ optional: true
+ react:
+ optional: true
+ react-dom:
+ optional: true
+ checksum: 10c0/716addd9fa85dd2c1475ab848e14c4e6d3246ced041de84afc19b1d6534c897256c8f2878864cf057039116e56f5ca1b87a4cbb943f0b1cf37199ef7174c3cf8
+ languageName: node
+ linkType: hard
+
"fresh@npm:0.5.2":
version: 0.5.2
resolution: "fresh@npm:0.5.2"
@@ -3826,6 +3849,22 @@ __metadata:
languageName: node
linkType: hard
+"motion-dom@npm:^12.23.23":
+ version: 12.23.23
+ resolution: "motion-dom@npm:12.23.23"
+ dependencies:
+ motion-utils: "npm:^12.23.6"
+ checksum: 10c0/139705731085063519b88f23fcc5b1c13e15707a4ff3365da02ef9a4bf2a2d8ebed9a151c57e7f215ccd9e822365d93c16e28e619fbf25611f61dcff5ee81d75
+ languageName: node
+ linkType: hard
+
+"motion-utils@npm:^12.23.6":
+ version: 12.23.6
+ resolution: "motion-utils@npm:12.23.6"
+ checksum: 10c0/c058e8ba6423b3baa63e985bcc669877ee7d9579d938f5348b4e60c5ea1b4b33dd7f4877434436a4a5807f3cf00370d3fd4079a6fdd6309c5c87aa62b311a897
+ languageName: node
+ linkType: hard
+
"ms@npm:2.0.0":
version: 2.0.0
resolution: "ms@npm:2.0.0"
@@ -5135,6 +5174,13 @@ __metadata:
languageName: node
linkType: hard
+"tslib@npm:^2.4.0":
+ version: 2.8.1
+ resolution: "tslib@npm:2.8.1"
+ checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62
+ languageName: node
+ linkType: hard
+
"type-check@npm:^0.4.0, type-check@npm:~0.4.0":
version: 0.4.0
resolution: "type-check@npm:0.4.0"