+
FAQs
diff --git a/src/components/brands/NetworkBackground.tsx b/src/components/brands/NetworkBackground.tsx
new file mode 100644
index 0000000..eef4f64
--- /dev/null
+++ b/src/components/brands/NetworkBackground.tsx
@@ -0,0 +1,85 @@
+"use client";
+
+import { motion, useReducedMotion } from "framer-motion";
+
+const NODES = [
+ { cx: 60, cy: 80 }, { cx: 220, cy: 40 }, { cx: 380, cy: 120 },
+ { cx: 520, cy: 60 }, { cx: 680, cy: 140 }, { cx: 140, cy: 260 },
+ { cx: 320, cy: 300 }, { cx: 480, cy: 260 }, { cx: 620, cy: 320 },
+ { cx: 80, cy: 420 }, { cx: 260, cy: 460 }, { cx: 440, cy: 420 },
+ { cx: 600, cy: 480 }, { cx: 740, cy: 400 },
+];
+
+const LINES: [number, number][] = [
+ [0, 1], [1, 2], [2, 3], [3, 4], [0, 5], [1, 6], [2, 7], [3, 8], [4, 8],
+ [5, 6], [6, 7], [7, 8], [5, 9], [6, 10], [7, 11], [8, 12], [9, 10], [10, 11], [11, 12], [12, 13], [8, 13],
+];
+
+const PARTICLES = [
+ { cx: 100, cy: 500 }, { cx: 260, cy: 80 }, { cx: 420, cy: 520 }, { cx: 580, cy: 100 },
+ { cx: 720, cy: 480 }, { cx: 40, cy: 250 }, { cx: 380, cy: 200 }, { cx: 660, cy: 260 },
+];
+
+/** Ambient network backdrop for Section 1 — nodes, routes, and drifting particles at very low opacity. Purely decorative. */
+export function NetworkBackground() {
+ const reduce = useReducedMotion();
+
+ return (
+
+
+
+
+ );
+}
diff --git a/src/components/brands/PartnershipConnector.tsx b/src/components/brands/PartnershipConnector.tsx
new file mode 100644
index 0000000..b8141e2
--- /dev/null
+++ b/src/components/brands/PartnershipConnector.tsx
@@ -0,0 +1,55 @@
+"use client";
+
+import { motion, useReducedMotion } from "framer-motion";
+
+const EASE = [0.22, 1, 0.36, 1] as [number, number, number, number];
+
+/** One-shot workflow connector for the Partnership Process — draws once on scroll into view, then a glow dot travels Step 1 → Step 4 and stops. No looping. Desktop-only (aligns to the single-row xl:grid-cols-4 layout). */
+export function PartnershipConnector({ steps }: { steps: number }) {
+ const reduce = useReducedMotion();
+ const positions = Array.from({ length: steps }, (_, i) => ((i + 0.5) / steps) * 100);
+ const start = positions[0];
+ const end = positions[positions.length - 1];
+ const lineDuration = 0.9;
+ const dotDuration = 1.1;
+
+ return (
+
+
+
+ {positions.map((left, i) => (
+
+ ))}
+
+
+
+ );
+}