From a94c91d1f225628a4aa11860b3f3e312cf4cbe92 Mon Sep 17 00:00:00 2001 From: Matt Vollmer Date: Mon, 2 Feb 2026 16:15:30 +0000 Subject: [PATCH 01/44] Update landing page headline to 'hello world!' --- internal/site/app/(public)/home/page.tsx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/internal/site/app/(public)/home/page.tsx b/internal/site/app/(public)/home/page.tsx index b038fa63..353288ef 100644 --- a/internal/site/app/(public)/home/page.tsx +++ b/internal/site/app/(public)/home/page.tsx @@ -689,9 +689,7 @@ export default function Home() {

- Vibe your perfect agent. -
- Then chat with it in Slack. + hello world!

Chat with Blink to turn your ideas into fully functional Slack From 56a103395dda08396de55d50bca106b028074529 Mon Sep 17 00:00:00 2001 From: Matt Vollmer Date: Mon, 2 Feb 2026 16:15:59 +0000 Subject: [PATCH 02/44] Make headline font red --- internal/site/app/(public)/home/page.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/site/app/(public)/home/page.tsx b/internal/site/app/(public)/home/page.tsx index 353288ef..04cd6773 100644 --- a/internal/site/app/(public)/home/page.tsx +++ b/internal/site/app/(public)/home/page.tsx @@ -688,7 +688,7 @@ export default function Home() { -

+

hello world!

From 2282eaac907cbdb5541b0a7a0ae65829137c5ec6 Mon Sep 17 00:00:00 2001 From: Matt Vollmer Date: Mon, 2 Feb 2026 16:16:06 +0000 Subject: [PATCH 03/44] Revert "Make headline font red" This reverts commit 281134086ec33063c4906f7cff20501162398132. --- internal/site/app/(public)/home/page.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/site/app/(public)/home/page.tsx b/internal/site/app/(public)/home/page.tsx index 04cd6773..353288ef 100644 --- a/internal/site/app/(public)/home/page.tsx +++ b/internal/site/app/(public)/home/page.tsx @@ -688,7 +688,7 @@ export default function Home() { -

+

hello world!

From bb5c60bcb2646541a4421c2ccfaeac4d9aecc03f Mon Sep 17 00:00:00 2001 From: Matt Vollmer Date: Mon, 2 Feb 2026 16:19:38 +0000 Subject: [PATCH 04/44] Replace install command menu with View Docs CTA button --- internal/site/app/(public)/home/page.tsx | 92 ++++-------------------- 1 file changed, 12 insertions(+), 80 deletions(-) diff --git a/internal/site/app/(public)/home/page.tsx b/internal/site/app/(public)/home/page.tsx index 353288ef..c6766e61 100644 --- a/internal/site/app/(public)/home/page.tsx +++ b/internal/site/app/(public)/home/page.tsx @@ -697,7 +697,7 @@ export default function Home() { — built on open source.

- {/* Click to Copy Command */} + {/* View Docs CTA */}
= 1 @@ -706,87 +706,19 @@ export default function Home() { }`} >
- {/* Main Copy Button with Expandable Menu */} -
- - - {/* Expandable Command Menu */} - {isCommandMenuOpen && ( - <> - {/* Backdrop */} -
setIsCommandMenuOpen(false)} - /> - {/* Command List */} -
- {packageManagers.map((pm, index) => ( - - ))} -
- - )} -
+ + + View Docs + + +
- {/* Documentation Link */} - - View Documentation - - {/* Animated line extending down - layered behind button */} {lineAnimated && (
From ab685808e4b544e1c1b67daa405b51bfdff10674 Mon Sep 17 00:00:00 2001 From: Matt Vollmer Date: Wed, 4 Feb 2026 13:20:34 +0000 Subject: [PATCH 05/44] Remove early access pill from masthead --- internal/site/app/(public)/home/page.tsx | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/internal/site/app/(public)/home/page.tsx b/internal/site/app/(public)/home/page.tsx index c6766e61..b5745040 100644 --- a/internal/site/app/(public)/home/page.tsx +++ b/internal/site/app/(public)/home/page.tsx @@ -675,19 +675,6 @@ export default function Home() { />
- {/* Early Access Pill */} -
- -
-

hello world!

From 7552641143fca0e811c154be6d000930aa946831 Mon Sep 17 00:00:00 2001 From: Matt Vollmer Date: Wed, 4 Feb 2026 13:21:21 +0000 Subject: [PATCH 06/44] Update all docs links to blink.coder.com/docs --- internal/site/app/(public)/home/page.tsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/internal/site/app/(public)/home/page.tsx b/internal/site/app/(public)/home/page.tsx index b5745040..0b7466dd 100644 --- a/internal/site/app/(public)/home/page.tsx +++ b/internal/site/app/(public)/home/page.tsx @@ -957,7 +957,7 @@ export default function Home() { build and launch.

Date: Wed, 4 Feb 2026 13:22:15 +0000 Subject: [PATCH 07/44] Remove 'Built by Coder' text from header --- internal/site/app/(public)/layout.tsx | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/internal/site/app/(public)/layout.tsx b/internal/site/app/(public)/layout.tsx index cdac856d..88219f7d 100644 --- a/internal/site/app/(public)/layout.tsx +++ b/internal/site/app/(public)/layout.tsx @@ -151,25 +151,6 @@ export default function Layout({ children }: { children: ReactNode }) { > - {/* Mobile: Single line */} - - {typedTextMobile} - - {/* Desktop: Two lines */} - -
{typedText.split("\n")[0] || "\u00A0"}
-
{typedText.split("\n")[1] || "\u00A0"}
-
{/* Navigation - Hidden on mobile, visible on large screens */} From 4d7805a94b07d713a4a1a0b682eae83650c4cb76 Mon Sep 17 00:00:00 2001 From: Matt Vollmer Date: Wed, 4 Feb 2026 13:24:07 +0000 Subject: [PATCH 08/44] Change radial gradient colors from orange to blue (14,28,58) --- internal/site/app/(public)/home/page.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/site/app/(public)/home/page.tsx b/internal/site/app/(public)/home/page.tsx index 0b7466dd..792e4327 100644 --- a/internal/site/app/(public)/home/page.tsx +++ b/internal/site/app/(public)/home/page.tsx @@ -670,7 +670,7 @@ export default function Home() { className="absolute inset-0 pointer-events-none" style={{ background: - "radial-gradient(ellipse 1200px 800px at 50% 100%, rgb(58 34 14 / 80%) 0%, rgba(9, 11, 11, 0) 65%)", + "radial-gradient(ellipse 1200px 800px at 50% 100%, rgba(14, 28, 58, 0.8) 0%, rgba(9, 11, 11, 0) 65%)", }} />
@@ -1655,7 +1655,7 @@ export default function Home() { className="absolute inset-0 pointer-events-none" style={{ background: - "radial-gradient(ellipse 1200px 800px at 50% 0%, rgb(58 34 14 / 40%) 0%, rgba(9, 11, 11, 0) 65%)", + "radial-gradient(ellipse 1200px 800px at 50% 0%, rgba(14, 28, 58, 0.4) 0%, rgba(9, 11, 11, 0) 65%)", }} />
@@ -1938,7 +1938,7 @@ export default function Home() { className="absolute inset-0 pointer-events-none" style={{ background: - "radial-gradient(ellipse 1200px 800px at 50% 0%, rgb(52 32 17 / 20%) 0%, rgba(9, 11, 11, 0) 65%)", + "radial-gradient(ellipse 1200px 800px at 50% 0%, rgba(14, 28, 58, 0.2) 0%, rgba(9, 11, 11, 0) 65%)", }} />
From 135e2d1e01fec916c70951f2b33331442c9f8428 Mon Sep 17 00:00:00 2001 From: Matt Vollmer Date: Wed, 4 Feb 2026 13:29:08 +0000 Subject: [PATCH 09/44] Update docs link in header to blink.coder.com/docs --- internal/site/app/(public)/layout.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/site/app/(public)/layout.tsx b/internal/site/app/(public)/layout.tsx index 88219f7d..316e52d7 100644 --- a/internal/site/app/(public)/layout.tsx +++ b/internal/site/app/(public)/layout.tsx @@ -209,7 +209,7 @@ export default function Layout({ children }: { children: ReactNode }) { Date: Wed, 4 Feb 2026 13:38:56 +0000 Subject: [PATCH 10/44] Update headline to 'Your Team's Codebase Expert, in Slack' --- internal/site/app/(public)/home/page.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/site/app/(public)/home/page.tsx b/internal/site/app/(public)/home/page.tsx index 792e4327..dee4407a 100644 --- a/internal/site/app/(public)/home/page.tsx +++ b/internal/site/app/(public)/home/page.tsx @@ -676,7 +676,7 @@ export default function Home() {

- hello world! + Your Team's Codebase Expert, in Slack

Chat with Blink to turn your ideas into fully functional Slack From abea8af18750b0d19ea8b541043efe95ff5c86c2 Mon Sep 17 00:00:00 2001 From: Matt Vollmer Date: Wed, 4 Feb 2026 13:41:58 +0000 Subject: [PATCH 11/44] Update headline and add 800px max width --- internal/site/app/(public)/home/page.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/site/app/(public)/home/page.tsx b/internal/site/app/(public)/home/page.tsx index dee4407a..c6324e06 100644 --- a/internal/site/app/(public)/home/page.tsx +++ b/internal/site/app/(public)/home/page.tsx @@ -675,8 +675,8 @@ export default function Home() { />

-

- Your Team's Codebase Expert, in Slack +

+ Your team's deep code research partner, in Slack

Chat with Blink to turn your ideas into fully functional Slack From 503e680e700fc74a7a3537f1bffedcba1e9ea6cb Mon Sep 17 00:00:00 2001 From: Matt Vollmer Date: Wed, 4 Feb 2026 13:44:17 +0000 Subject: [PATCH 12/44] Add white blink-hop icon above headline --- internal/site/app/(public)/home/page.tsx | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/internal/site/app/(public)/home/page.tsx b/internal/site/app/(public)/home/page.tsx index c6324e06..0eb90a33 100644 --- a/internal/site/app/(public)/home/page.tsx +++ b/internal/site/app/(public)/home/page.tsx @@ -675,6 +675,16 @@ export default function Home() { />

+ {/* Blink hop icon */} +
+ Blink +

Your team's deep code research partner, in Slack

From 86a929e1bca4af66b31d9aa961bab38c2618d6ed Mon Sep 17 00:00:00 2001 From: Matt Vollmer Date: Wed, 4 Feb 2026 13:44:45 +0000 Subject: [PATCH 13/44] Increase blink-hop icon size to 200x200 --- internal/site/app/(public)/home/page.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/site/app/(public)/home/page.tsx b/internal/site/app/(public)/home/page.tsx index 0eb90a33..f26fe10f 100644 --- a/internal/site/app/(public)/home/page.tsx +++ b/internal/site/app/(public)/home/page.tsx @@ -680,8 +680,8 @@ export default function Home() { Blink
From be35da58314c18f5e70ec8bd1c2cdfb7289b413a Mon Sep 17 00:00:00 2001 From: Matt Vollmer Date: Wed, 4 Feb 2026 13:45:10 +0000 Subject: [PATCH 14/44] Increase blink-hop icon to 400x400 --- internal/site/app/(public)/home/page.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/site/app/(public)/home/page.tsx b/internal/site/app/(public)/home/page.tsx index f26fe10f..f6ca595f 100644 --- a/internal/site/app/(public)/home/page.tsx +++ b/internal/site/app/(public)/home/page.tsx @@ -680,8 +680,8 @@ export default function Home() { Blink
From 0fd63b0dfa60117fa7578ccfe5c39a77bb9456f9 Mon Sep 17 00:00:00 2001 From: Matt Vollmer Date: Wed, 4 Feb 2026 13:46:28 +0000 Subject: [PATCH 15/44] Stop blink-hop animation after 4 seconds --- internal/site/app/(public)/home/page.tsx | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/internal/site/app/(public)/home/page.tsx b/internal/site/app/(public)/home/page.tsx index f6ca595f..8926f0f9 100644 --- a/internal/site/app/(public)/home/page.tsx +++ b/internal/site/app/(public)/home/page.tsx @@ -52,6 +52,7 @@ export default function Home() { const [copiedPMIndex, setCopiedPMIndex] = useState(null); const sectionRefs = useRef<(HTMLDivElement | null)[]>([]); const intervalIdsRef = useRef([]); + const [showAnimatedIcon, setShowAnimatedIcon] = useState(true); // Package manager configurations const packageManagers = [ @@ -86,6 +87,14 @@ export default function Home() { setIsMounted(true); }, []); + // Stop blink-hop animation after 4 seconds + useEffect(() => { + const timer = setTimeout(() => { + setShowAnimatedIcon(false); + }, 4000); + return () => clearTimeout(timer); + }, []); + // Load dark mode preference from localStorage on mount, or default to dark mode useEffect(() => { if (typeof window !== "undefined") { @@ -678,7 +687,7 @@ export default function Home() { {/* Blink hop icon */}
Blink Date: Wed, 4 Feb 2026 13:47:00 +0000 Subject: [PATCH 16/44] Adjust animation stop to 3800ms --- internal/site/app/(public)/home/page.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/site/app/(public)/home/page.tsx b/internal/site/app/(public)/home/page.tsx index 8926f0f9..7466e6e3 100644 --- a/internal/site/app/(public)/home/page.tsx +++ b/internal/site/app/(public)/home/page.tsx @@ -87,11 +87,11 @@ export default function Home() { setIsMounted(true); }, []); - // Stop blink-hop animation after 4 seconds + // Stop blink-hop animation after 3.8 seconds useEffect(() => { const timer = setTimeout(() => { setShowAnimatedIcon(false); - }, 4000); + }, 3800); return () => clearTimeout(timer); }, []); From 01a1fadfaf537f0c9887915f7fcb22d795a2c3a0 Mon Sep 17 00:00:00 2001 From: Matt Vollmer Date: Wed, 4 Feb 2026 13:50:40 +0000 Subject: [PATCH 17/44] Replace blink-hop icon with blink-hop-new.png --- internal/site/app/(public)/home/page.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/site/app/(public)/home/page.tsx b/internal/site/app/(public)/home/page.tsx index 7466e6e3..68238e47 100644 --- a/internal/site/app/(public)/home/page.tsx +++ b/internal/site/app/(public)/home/page.tsx @@ -687,7 +687,7 @@ export default function Home() { {/* Blink hop icon */}
Blink Date: Wed, 4 Feb 2026 13:53:01 +0000 Subject: [PATCH 18/44] Switch to blink-hop-cropped.png --- internal/site/app/(public)/home/page.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/site/app/(public)/home/page.tsx b/internal/site/app/(public)/home/page.tsx index 68238e47..40449ca0 100644 --- a/internal/site/app/(public)/home/page.tsx +++ b/internal/site/app/(public)/home/page.tsx @@ -687,7 +687,7 @@ export default function Home() { {/* Blink hop icon */}
Blink Date: Wed, 4 Feb 2026 13:58:24 +0000 Subject: [PATCH 19/44] Reduce icon size to 100x100 --- internal/site/app/(public)/home/page.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/site/app/(public)/home/page.tsx b/internal/site/app/(public)/home/page.tsx index 40449ca0..c9fb7e81 100644 --- a/internal/site/app/(public)/home/page.tsx +++ b/internal/site/app/(public)/home/page.tsx @@ -689,8 +689,8 @@ export default function Home() { Blink
From 0e56135810855f446c630769bf2f3e6b21ae5ba8 Mon Sep 17 00:00:00 2001 From: Matt Vollmer Date: Wed, 4 Feb 2026 13:58:40 +0000 Subject: [PATCH 20/44] Reduce icon size to 50x50 --- internal/site/app/(public)/home/page.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/site/app/(public)/home/page.tsx b/internal/site/app/(public)/home/page.tsx index c9fb7e81..a2d43f58 100644 --- a/internal/site/app/(public)/home/page.tsx +++ b/internal/site/app/(public)/home/page.tsx @@ -689,8 +689,8 @@ export default function Home() { Blink
From 60ef79175de042fc2874e0a3a35d40ee5714fb43 Mon Sep 17 00:00:00 2001 From: Matt Vollmer Date: Wed, 4 Feb 2026 14:01:38 +0000 Subject: [PATCH 21/44] Add slide-out animation after 8 seconds --- internal/site/app/(public)/home/page.tsx | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/internal/site/app/(public)/home/page.tsx b/internal/site/app/(public)/home/page.tsx index a2d43f58..ae5d941b 100644 --- a/internal/site/app/(public)/home/page.tsx +++ b/internal/site/app/(public)/home/page.tsx @@ -53,6 +53,7 @@ export default function Home() { const sectionRefs = useRef<(HTMLDivElement | null)[]>([]); const intervalIdsRef = useRef([]); const [showAnimatedIcon, setShowAnimatedIcon] = useState(true); + const [slideOutIcon, setSlideOutIcon] = useState(false); // Package manager configurations const packageManagers = [ @@ -95,6 +96,14 @@ export default function Home() { return () => clearTimeout(timer); }, []); + // Slide out icon after 8 seconds + useEffect(() => { + const timer = setTimeout(() => { + setSlideOutIcon(true); + }, 8000); + return () => clearTimeout(timer); + }, []); + // Load dark mode preference from localStorage on mount, or default to dark mode useEffect(() => { if (typeof window !== "undefined") { @@ -685,7 +694,7 @@ export default function Home() {
{/* Blink hop icon */} -
+
Blink Date: Wed, 4 Feb 2026 14:02:38 +0000 Subject: [PATCH 22/44] Adjust slide-out timing to 7500ms --- internal/site/app/(public)/home/page.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/site/app/(public)/home/page.tsx b/internal/site/app/(public)/home/page.tsx index ae5d941b..cb5fbbaa 100644 --- a/internal/site/app/(public)/home/page.tsx +++ b/internal/site/app/(public)/home/page.tsx @@ -96,11 +96,11 @@ export default function Home() { return () => clearTimeout(timer); }, []); - // Slide out icon after 8 seconds + // Slide out icon after 7.5 seconds useEffect(() => { const timer = setTimeout(() => { setSlideOutIcon(true); - }, 8000); + }, 7500); return () => clearTimeout(timer); }, []); From 3a099ef5557fd3c64cc3ad30906df02b9be23f58 Mon Sep 17 00:00:00 2001 From: Matt Vollmer Date: Wed, 4 Feb 2026 14:04:29 +0000 Subject: [PATCH 23/44] Add min-height to prevent layout shift on image load --- internal/site/app/(public)/home/page.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/site/app/(public)/home/page.tsx b/internal/site/app/(public)/home/page.tsx index cb5fbbaa..7bf9d8f9 100644 --- a/internal/site/app/(public)/home/page.tsx +++ b/internal/site/app/(public)/home/page.tsx @@ -694,7 +694,7 @@ export default function Home() {
{/* Blink hop icon */} -
+
Blink Date: Wed, 4 Feb 2026 14:05:19 +0000 Subject: [PATCH 24/44] Fix layout shift: use fixed height and priority load --- internal/site/app/(public)/home/page.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/internal/site/app/(public)/home/page.tsx b/internal/site/app/(public)/home/page.tsx index 7bf9d8f9..86ae33c0 100644 --- a/internal/site/app/(public)/home/page.tsx +++ b/internal/site/app/(public)/home/page.tsx @@ -694,13 +694,14 @@ export default function Home() {
{/* Blink hop icon */} -
+
Blink

From 5123a699f9aa6598fd3218dc697123f68e568c35 Mon Sep 17 00:00:00 2001 From: Matt Vollmer Date: Wed, 4 Feb 2026 14:06:12 +0000 Subject: [PATCH 25/44] Fix image distortion with object-contain --- internal/site/app/(public)/home/page.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/site/app/(public)/home/page.tsx b/internal/site/app/(public)/home/page.tsx index 86ae33c0..12231721 100644 --- a/internal/site/app/(public)/home/page.tsx +++ b/internal/site/app/(public)/home/page.tsx @@ -694,13 +694,13 @@ export default function Home() {
{/* Blink hop icon */} -
+
Blink
From ce23b31d2844c7d9f7535795af326a0fbcda210c Mon Sep 17 00:00:00 2001 From: Matt Vollmer Date: Wed, 4 Feb 2026 14:07:05 +0000 Subject: [PATCH 26/44] Increase icon size to 100x100 --- internal/site/app/(public)/home/page.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/site/app/(public)/home/page.tsx b/internal/site/app/(public)/home/page.tsx index 12231721..83845bd9 100644 --- a/internal/site/app/(public)/home/page.tsx +++ b/internal/site/app/(public)/home/page.tsx @@ -694,12 +694,12 @@ export default function Home() {
{/* Blink hop icon */} -
+
Blink From 6a44b384cce782c8353d57b3a8988f716a1d4133 Mon Sep 17 00:00:00 2001 From: Matt Vollmer Date: Wed, 4 Feb 2026 14:09:57 +0000 Subject: [PATCH 27/44] Add slide-in animation from left before slide-out to right --- internal/site/app/(public)/home/page.tsx | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/internal/site/app/(public)/home/page.tsx b/internal/site/app/(public)/home/page.tsx index 83845bd9..e9843b81 100644 --- a/internal/site/app/(public)/home/page.tsx +++ b/internal/site/app/(public)/home/page.tsx @@ -54,6 +54,7 @@ export default function Home() { const intervalIdsRef = useRef([]); const [showAnimatedIcon, setShowAnimatedIcon] = useState(true); const [slideOutIcon, setSlideOutIcon] = useState(false); + const [animateInIcon, setAnimateInIcon] = useState(false); // Package manager configurations const packageManagers = [ @@ -88,6 +89,14 @@ export default function Home() { setIsMounted(true); }, []); + // Animate icon in from left on mount + useEffect(() => { + const timer = setTimeout(() => { + setAnimateInIcon(true); + }, 100); // Small delay to ensure initial state is rendered + return () => clearTimeout(timer); + }, []); + // Stop blink-hop animation after 3.8 seconds useEffect(() => { const timer = setTimeout(() => { @@ -694,7 +703,9 @@ export default function Home() {
{/* Blink hop icon */} -
+
Blink Date: Wed, 4 Feb 2026 14:10:42 +0000 Subject: [PATCH 28/44] Adjust icon to stay for 4 seconds over headline --- internal/site/app/(public)/home/page.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/site/app/(public)/home/page.tsx b/internal/site/app/(public)/home/page.tsx index e9843b81..a2f78e61 100644 --- a/internal/site/app/(public)/home/page.tsx +++ b/internal/site/app/(public)/home/page.tsx @@ -105,11 +105,11 @@ export default function Home() { return () => clearTimeout(timer); }, []); - // Slide out icon after 7.5 seconds + // Slide out icon after 4 seconds over headline (4600ms total: 100ms delay + 500ms slide-in + 4000ms stay) useEffect(() => { const timer = setTimeout(() => { setSlideOutIcon(true); - }, 7500); + }, 4600); return () => clearTimeout(timer); }, []); From 89192aaca77f1a352b55a7d4d315436289378756 Mon Sep 17 00:00:00 2001 From: Matt Vollmer Date: Wed, 4 Feb 2026 14:11:36 +0000 Subject: [PATCH 29/44] Add blink-hop-cropped.png icon --- internal/site/public/blink-hop-cropped.png | Bin 0 -> 47484 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 internal/site/public/blink-hop-cropped.png diff --git a/internal/site/public/blink-hop-cropped.png b/internal/site/public/blink-hop-cropped.png new file mode 100644 index 0000000000000000000000000000000000000000..361dea783a47f2363181e3ea6312caac5337ac4b GIT binary patch literal 47484 zcmeFX1zR0K^XPeScM{y)-JRg>5)#~9g1fs02oNkdBuH>~2=4BZ03kTRZRfm!|Gso-E!8#M6RDykje>}e2m*mnWMw4OfU^}KSMX54Cmm~)0C0jgGSN@~ z&f0*0p!}wXflrW%f`%lx{Qn>Se+~S9wFYWf|3(1pPao8j)IkuCP|z^2aPSC-NXRIt zXy_Q2SlF*#*^tM~4`zJZ~Uv5BdfxrL>bwT-Qvy@R8Zv&#op zH+K(DFK-`TKmUNhpx}_uu<(e;sOXs3xcG#`q>srdsh`r)Gd^c#W#{C6$;&S&EGjN3 zE&KYdyrQz|dv#51U427iQ*%peTYE=mS9ecuU;mGR!J*-i(XsJ~$*Jj?*}3_J#iiwy z)wT7F&8_X9zjk)_e((P|I6OK&IXyf7dvSSneRF$v|M2(+evu2P3Vic_p#t0^{u4*Q z3iyCvgxUjvaLbokfr6o|gqViM(%~W-28a|H^qpQ*46c9_;R(qymtelP6X_cMKfn3E zKZLo=S3T$t)f-Zh|KE?L6zADOB2>`CB+P(u9<8lGZys=m7mpwST?i0JKwblq3L=Br zg8)@BzB&dE8pn*G?nwpXl+*`1z(CBe&zk0pv2n!riuo^V1Tjr!r7S*(A3CGR| z)Ua}$CHBtbKJa&UPnJIM`^2+CZ`otRmP(E$y=*nE;3K|IsyS&~l^m(A_9*e>M@m3r*22$ho(Dp^)7PKU z+-9A(z1oyo-BNxc-09}&Zun$${A%_6U|TTCoxIRO+@+SagW=ORG=h2?y-y2JwPEE8 zO6CUzSR}nBlQO)2K{y3JT~S#zbpV7HP&hyr21F2$SAgXI1I=HpwFOE=&!F%CXsQ?@ zBpb5iI*aS?{z9A+?zK*=Xzdeh_Rm`T#xYD|QU}Jk8ESHO8&9G#;(e;1J>QYfuz6wH zw1!cqYU@SQKNNSCstl>8-rq4~1nNRo%TtBGU^FxeoIdeGH*3-Qo^j=W<+*KiMtR3= zQ*1wdmPk-<+q6F1DfuVgxp(BQ_H^W~@uYI{_-t%^6pxm#FjUdc=VOwKUp;9X$np=- z&925{Dd6!77XqMzxp)Bqa~1#NV$JFm1xne^T!;WyiWp)yE4t)5lH|K68|959C=XSZ zUA%ANl3V1O%ZfN|7~<^c113o$Ie2LU)lHp2cUaI6nv)m^^w98W=vZMGn{z}g8N`ai z2#Ak@5jlI?i#82HCmnW>Uu_RB(%71H`}FFsGw1cz|1c7neX97C{pVAu`@4x-{hcc7 zCZ5yTNO$+gqvM{DS&?FF5{_dVT=HHXfjE+pp?DV#z|$8VBtQrAa03G7DgDP|DE%Q2 zC?!4fApdJ8aW?cf20QM%LvK6~PZzR(P6{o{xwS*Wqhmg8&dunc!O+d53KXvWJy|*(WuUR}YA@PtILunAkf*Nr zyOG3V=X}+!H$S>AIoYXngM2{$a2jN1+ae<1#~~ucHQ=y=12g!h@;fK(C&0TG1{6RC z4=Qk90}ra_zV<yOnuGD)Ny@a74!LDpjIU4PRY3g`y@#43T> znKn>4T;FtRY_IVEP%r3cfX)xd8$fUX`TVc>mU+M10j2t9baZfc6hiD4MGx&jV1PF! zgLkXf7mcB5_zSJyxwJOLe9lNY$cfXLp%eLU({+7H-yB`+f^QS%?t65;!aB*OlL)* zP&g;h@}g{R-^^?kM;9S+64OkGc3kWhEKep9l2IZwCCH0oqORe0C#nQneyATp7oGEQ zxZEVd^yWOTnl5bv2wpfb03AH!P@P#S&a!~{2S3%H3T$yz6z;e=R;B*a9J&=sbk zETLS5KtRxhD8NiWWTdRCTi={*^hc3IW0dFL)(Ae?0l;4Hu>c)BiK_sD2S~&}`~e37 zKA<%JjE@cAYqNpz1*K6BWROFZ18{M#IVq3~Hn41weLxx#ez%grAPPMw4bR41E(}v^6jPPBI?#$9 z`CcuC4$Y~swyj5T)xT}wB1)Hn9b;CubQIm6;aTmX>p$yhU|eTpa6s~d{Px&I*KUD8 z>wUOJ8H4l+-6f6Y$0(-`h=jCE{fcU?#3}Z;kMMOwRC%otf@VZsR2}l~Oh2kRqk26~XF09n%Z-*T?ZjN8Qwj*H5=e!L(x;X*)&m;?+9siLNGyEI^ zayZy$a$JC1a}qH~6n$m(J7jRgR%h|;6U#o@P?SD0y-GuPZH&vb7kcdSr{Kk`mc>PZ zxMGD~35oGS%!^3qeu~&Us){tY!>`c`#(Z>V-%h{v!cyBdJt4u3jL31~VRka^H<+n8 zbxNetYt5Xg>(`d0ddR(TXpFa9t$#wa;{4(eEObjI_!ufdlvq&nv6=E>#raWSxNzO& zc3f}mym<1@X4L186iqfif1F7vP6Vtt^2DFZ_2x!&-BdP`om4`xM|_`wQ+U#I!_ zM8hCs$-3Z5k^voI9qvk{Ms^G({+49);5siCv~hMZ<2zkyeSCa7z%d*g0|Kp-{E+`K zwbC|Ri2oWc;%lq55N2i_{h1;mncSHsB@~FZBAK!q^r~!?_fx0IpijrbV!5O_i!nSU zgF&!AC1}`7}XL1CQXF+Fi7Ve4AgY8qCDD$yt(G&r4p^Y$BfqHy$9#d zZ3e%!gu|VGXXO+oD$Ud=CCl+pwdFl+!00$JUlx~s7?`_W{(h%Z@BEg?l_@D*9TT4D z?yW6)Mvv2Ex32OuVW>FB3zg=^4ev4*OFg3q#q*|(YoZn%jeDY=%_ZI3%Go~Yi;(;S zpAO3_wOY81pL4xXUE z0~8#ndHz*5S@|+FP~C9P)lCRgcUqS`0` zu_K#;^r>ObI$7th{5jvj%6hO*>8@Me#}4-PWlc67`&o_Q{%2$11Ss{icDI;RhRF5)!iVpKM86&!rW2nI?rXFmM5aoq?M@#|7 zB7XAZpVxgx0@b4oYOA9;MG9B{?`Jd;fCfBiDFFhGX$=233oT+Ofl~f+2O$MVZ~?>~ zU_4sflS#fS7;17x$@#%Egtt=Yvdgg0S0IBSKVS%rfIAuljelseXr>#ZW$8r3BBSPPJ((PpXbx+C;>uVE+!6!c;A;- z{C}ScO+BEe)FL9bgdpLCU35ew18S31L}t0u+y+JvCB+b{wEwKort)j|dE0L%IxhA0 z_TCHeu^NMqE&uPM`9BWXGf|bV#s!9%S;y^s^n=5(lt1JCj0e1U@s$eD!M@4@@?X9Z zvrl#d-zYr$N)7lrEPx8az!p_ycw;PP>0yGwxLB-CORcWBmHkM2=x!9{psRUj5v%a% zP+`iRu0Z{95PWLqXmS3V87ZSbWenS<7ajFBrV9LQ{$ia5(81Pa0Qn#5AdtGmUJ&rj zn`i5^VC!rcouud>Rt=NDwi$TlG!+%7l3WG?cmJ5d?BpCpAy0Rz*jLVPlV3`KG>TM;gDQUixBP8)7?nj|n z2JPJ))Bm#cv@6sEr?8WY((pL^^k0S;o(=skb$c$hkqulCcs9iNA44c0QgrAl9#NJ4 zI2%S%5ZcCO_rg*6oJ*Zj#pUQ=HRJHh-_y9s4sjVMN0%pm9=rgN7SV7R8@$6!GFuC+XMG=7nFh%<7H^Z&ox&|!ANB?b(zbvvmTYTx}jQ=cF&dh*2nDnznR{|)oZ9f=6EvZSfA5Tufu3|Wm~@{{|z4gFQ{yQ4rCYq2?yX_ z!~V}O?>rJX>RCJ+W(OPojv@*INla3RqkoxM5OaXzNE5e%h0+l-f-5Xx%zN$DD0gb` zq`}j!@~{!j#ni6w=NH2V!FIXbKPEMcw%ngb&HrTu-lDJE@W$2bBxh}vJ)u9KRd<=I5xG67^H$7ve~vAEM}<@ zrMLdnCqYTi??EL_>=n+Hz*BQ1;)k0W?!I%ECwI^+ma^m;?NR@SXlP)swf;|lyy@T4 zl?vaH^jTaY^o@u{m#P29;Xm!Mdf?GlSM>)bK5p_VW^z3E{kR8B%%g|Y71k_q#O!_c zb^R%vxg&u}kS_r^op=ENXL4WwLqNa)@BRTWvm=7%m9b|4ZUA6L4>gz+J=ADYEU~ue z&cKXeu4O`K z>oNOLS&yWH{*O&}fu?t&)k0p!*Hbouql@(+ft(f@_e47NpHR7^-SxG9rg7UX)mlv# zDSqaD@PC_H@I&{ka9(mpwUUJnZ}eeuTV0N9@tnY{rb#-Ue3DxJJzx;_i zyK&W6gKHK^Z7h_Zxz;fkXY86)^LLQ0+s8>#pk#@X_DjGIeJ}jrx&ZSl0|Mp`{Kr50 zAms>@5})~b!99x%6$nu<6D%@hyxbNp+_)w+YPq^;lBNqp-ud-dk{2Z{`DRfp3FP|M>@GDg2ZZgwGZvPdkS}|LAnIs+zSGD@&_Zx0Rl#d z`-ku#)&w3LFDrxm;N@O(DiT&Unf)y&uiNVY+F&bW#0V&xH;!npC!&%5egR2` zb+5L#AB(|xM?xhcW36FA9&c<2VfzFG8HX)C4Z>+6*GRd>?-xZM?W?ZlH%kLLu!vjs z*?5&h+I3pjeH6TQ`|o?H$<+@is1=xS74O0V6~Y`Ddr((-MRD*Q%~a}1U#C$(aiAxd z8}_2$!b5^=(H7FwP|DR ziCDlzmpPI3Ve#)A=nvs%C66QXl`PcMgw^Ov#r$QOv(1~DpRkt#p^3ieh4C4~L{vxQ zpbA;OpZh?n3$=C0X&Q@`&j&q-MZj)3dl84SWfQ`E`H-gIn}$B)IGb)7!jmyYa1E9* z$7I{?$egXssKCb>^*tv2-E0?sn6|gA#kams1N9cFkG(w;S078#gTH`sH$15{OQ?~o zZDCq%Sj0mqS1c3VV?>#5KzU)TDUnvj(g4j1Gnf~=dI&y)AI-n~YfBRd(|Vv(^UN#^ zFl)A;ijyG=wYjl6v7wInMdb%S+* zc=IzMgtQzt{1pz)SRxuCl8B6HtuQ#wyg-ToIvA1{5HRHPlJ8ol;1N)&c!m@OAd|(w zkP_>pljV^N4%@E;OWn^v%qz=IUGwq1Da`OU{^D3+MTeX!$!-ehq!N8FYTFf!#5W#u zQXhE&ElZQyCn+Zsi{%HeqtfN~-q(Jq>9iU1_LG*o5B2X^{odRhHJ{h#{qFR`QC6b2 zMb}mP&r0WwMBVj!wLUb#s;}3YKH(<^ot(o(xUkFS>;&XhL?J}(c4%UJ+{xu^(3+|A zH#FIKk&0bBN~d7YU--lT9n8lK2$=6bOTa)dX&M2OM?Uk31AH@G;3e&l&70!M=y~Bd zmW`U*4^heFdr<_u?D@Yn4G7d_;`0bxNqu%*;$PDQfmh>mswlF%%d>+_ zyoBO&6F^^>VPDlZr*V!HSlupJaXdAYE+NSn!jq9%lxKBXjN;gu$(~q_@jyYtX49Vp zPvD4*)_XWCF?9TxzGet&_>>W?d{`<}M{18 z4_96FHr@5Fx*zS#nKf1IjNPH#b=(i_LgE*A5~jYfKSE1Z+{Pv*T>I%tz)G)S`{%!4 zzySgb0`6DfK$s1N0UlxX(Zhk#%a(!+5a5%IEDTKzO#>h(xhcex0};9;F#X0cnW5%? zfaV7yIxQ8j8RBZ7Z90?RgeKVbnzHA?S5==Nu_vG`q~p>;K$Uz>{QU%KzJEeTsSAu{ z3!79SFm8T|pSUI-UC+Pq=Bz{BnPJD@p`go(uP2gHAGTa%k8$O|Ki^8ay+CQGe*!k@ z?yjD&KxitjzHLe1R0H0AbX#PsKgQCW@2|H577t#Oq* z_u#|vXoDKC zATec#+1?<6`C9*1MVa!qIut5<{3%LXV+dHFH#{Az#F?dS6x7N0P#J$rUZ74 z4F$vs4`Rj64KPuoMtB-O>1?X?rx@3l>S(LCTmGNFN9Xy~uMpwxd9=7coxtlNFQ&k) z0WCyaNTlXgE%b4G9@8)4L1al--$xth;1aX_xySK3H3fq8>&bzUVN2> zZtB4}Vt>xULs;BZglJYV?1(16d2r&vLxX44RRn)l(R~#SNMPPy1^-K5rd1lc{-rVq z`}K~UP_~Q;vB-{4N+89n`x&(IL3_ZX7r)g39qhL_AYi|rH=*Mm-5!8a!n5DNYXBxc z4NW^iF_xU{NV{*U+PSC+q7 z-`)Y^An0_|GP(xm?p%P_7Z{#TS5I6Z)^6-{uQr8Jz_%9yO+W|7eehE(^!nY=h~CJ`UDgIHh_vXiL`x{~S?go@G6K`$|t_0a}=7KUP3 z_7vi>w+8+)_1;EC)7P8-nww@D2Gw5Vlm2wcf~hSLGyfIU4hTn7td zP~qHK=iJ&yFTU{&v}PH`>V5l~P`!`@LHM6+>8(7bNdtnJn?cJ^;4S7rObvK+R#gQ~ zWNhZu#{#QqPD0f#1L)Iy;cr6je~6w;UXjbA>!fCD`>NLKj?S0sJI<#!S<&6}bDg_p zI8-Xe?nFNpEH&+_In;f6+wyta-OpP|eBN(l%NNsE=obDIMJJPFlt+h>@4uLIpP9IU z^Z(=+5THmaUTol-d~T917mlnxsvDY5#^O!M!YT!6Z(E3r#h?D`Jr2@e(1^5 zWaz3+MY4!l^=2Ni1q*d_mTE||sd-5N`_ujAj2bj9>jHZ5;6i`B(?%!ivQalLJoy3< z=fN`W=UiEXv)F11)YCUBrmqXK0iKus_#V*z4|~k)uOF^~D^<_b`r!Tu-h4!dwn#*> zeoL-8c?v1onjvxm?I$`67x5{G5;YZ4O(Jw`b~XD4f2En84_*dlb?sz=+vMlYWJkqe zA)#C~>|FZF5WTlV;X{^2DWWM0;h$y*`-xKgxYjbuieNIQy?A~{2;a_AGNtjE2M5C5 z!j<$CiTa1o+eT@V6UMm!8_w6fTT_WUMzFO)HxT`9_1_ik*{B8Fn`*l1_4L&5gF`m>krWq@kN?`$S2dIwDD^xO8iEOdT}4)G$>Z|)vX5WoA4PHC zx*RS|GH;>mQMX9p>96@Ii)70UiJ&ipWTpt6_b67>jM*VYIs4||8SN1a{jo=ie*ZR= zD<{PGELZh`P7YN_dZP(bw~26VIm%|vgEYJ@2IuHYdFz5$J(Q7dp8qS_=C#udL@dRF z_tu|Gws0bAk0+DPhX=odbet79PxJF$*ACwt8-Ugo0yexJ#MawR-Vo&Q|>y^W}#PyIQPx!a4S+x0&T5aJMuEvou#Yr2j7}Ki3(``cqYCU z@sE6})Ui=o_u%qEoo&^^M8KVz=Wr-jP#OzO4qJ4pSAJEsw8kJoleH?!wSYoif4zU} zFNEIKU1zPfKANwni~*o`qsN&c2@)!lz08old%t0c@Hk9;X63+*`@#;c2Tnl1GdOq~ z`FTH`Z?Mi5D78Pcn*!{~La2~rK!|M^rn6NL3<{mEx=0}IGVwrWIAp{{S~$S3b42XM zgf~hH{Nde`<3@lEyy%jU*);oE>|OUMrQ-IWsX(}HKg?Z~(22u$2x&T4=OF?iQncAz zW4=;zm0x_ihb`Jl`c2X@E@y8|_j6JAb6taG((zZF&so#M>E@Wmqq5XLHN+w5-SF{= zq&jwtzE$TskY+CRMIY0KB2VqXGxn5Iz@nK)&bFM{wH_YhIfj9p5+L?FWh@7?J#QYH z0Xn#?!RvnDwhsQ+){&khz|$0j;xn%~xUJcgpxA)69>G^7!@o^liHL$yQ+0%@=tS6n z#MY3|y;E1fl#HP6s8Xv6t*gH`fAm@YgHmw}^Bz(PZVze#os}|yl2W2h&0$4|loP$I zDO`V)NQPej4J-6 zReSQZ=5KyguQvJ&U9!@s4S!STQ{S|vBOFXAWMz!fO>RSTU~XX^_gs#(;z^{=9-0+0 z$Uf(A(CLZIDxA<`VGPx2YAYUUqtZGC6bZQl=5f}XUJu-@-Ud2U(!KU zig?H`8CH6@*mT7QH>KN&m~YGy!2Rf2CF&t^;X&LP!FIT5YxF$bx?E+idcB$CM%{6N z{H^gD0wEFgU&NDdDB~Mg0WGw=d7b?G3vlyk&3eIs7V2HXh-<48lRs#Azf?65Gh!h| zgBqnbAH5ufbJ0tlj8H3_s<RC%y*_(|WkO{BXs7_kgy63)8^kPMH6zMD;E=|FX+j zg8Ph#mab}7A(zp4;`^}J52fHZd6ZNWsxIf=HD}AcHh$PH_CP7W?Q_BpE8|_^9GEf9 z6u7P)usI;)PbSbBw}u+;rMiS0r4EB^Vr+i`PJ%LU#2hhTT{x|=57d5&fPVho6-$bU zDv5}IzqpmJK^Q<=Khl)Y)X*%vl--xsoc#DR-x$W-U|y}`#Jf@rMr~R)NkTJ;lF6I& zxZ^{l0(qi}Y?4fYweQSC>R#GUkm*yaij@|Z7N#9X{G+Q<;nF_wz&)t+2QGPSoy=@5 zf^43vti~Wzv3fjGybLt75br&tKDD9Ek<#&hcONUD%YZZ8cYuJ?4$FVthxXj>7I@#E z>bd(^do1-W{I*|aMFtrrIWG|^dQ~vY9X^m)DOVxce56u*yNljLLivkRXcRe3r86i$ zK2JlIJ0{mm1pz7gu}eVSY+g0TWwR-g;<&3ADscqH>__GyeK*S%nvmU6E{@IU0HJ}a zjzkC*M@>W(t3^4y1^2ix=?>#Nf+CjA)VeBe=4?sIPk-gfGyQRo-oGUnBQNYGe}}n| zq|SZp@t3aVv8ZA&K%Sm4Nl0yHq?*mgjc)B-R`H{P4o3e%mD ztr}n7@}#=ts8KE#ibWG8B7<09hv*x2Gge+x*N6d;!5+-%DW(^-4l|qF((X9Rns)H4 zfKZ1fF-!}Tbtp*+L61j0oKi7_kIl8=!rD&creCE{1x}bUT~gg9(gIXYIJI|tw!`J` zo6DTP_v_R#W0#$?gTz+Sscv22(uapT@tb0X28_F5@u^?$81Lm+Cy2|p3T}EINvfdx-MBJX0h(+3BL4b zW+PnGXfVE}?0Xy)1>yQgK>|OAAq~J5^njqPukCZP!1f|j^}*#m<5BNf&EJ@Uh1`R^ z>~pr~J!@?=;Eg*%%3UbRU_lAzo_)&}Th?j9Oh62KqJyp7(-}t?ys3I;K`C&A%+^>N zDDJ@Vr*zXERB0YZA^o`GSVd`+3KGtD@aI` zlqQ8)lT#hOLio5|U5N5Z@V=g#nDplUhRGUpVq-YSVm*i7#=abZ%j1mg7u=7l4#DO+ zWr?3qmnx;Eq7l7y+c!KZwW}B@lb-}qNiZ;&htq6k#EG}lhf)2C_gNoyTia>vw`!6$jqEY&3U@j0EW*?RJH+hQ9!`S0Qf0H^53xH zkk9!D0ztoI^R^yKg$wVsx4F?_4Lzj-(U)&PubWqoo}M&UqmQikM#Y0n1Pta{_d}Tm z$pV8lS8>Nq1&L+zWsM8FWpq$Tny;>SaZErE-@vie(CLnodpA}qRD z##c>G$L1J9zSB^|=kOa%C!%K_SP+7Tf{qs+L=g9aUK=}N(jbv8un zL*&>JvDjxoEMsqidhYcraPs|#(W9ovh8J5TUGNeVPjm!()zg7c!gysE)TsJ);Gz#F z;R16X)VZz%Pf6+!L~9x~M$7e9;H2OVYe%b>q2MrifZ4CWLB>2})20hiZUQv8xQ1v# z9SNVEgPIo1L$3cC48=Q64*b%NFt^xK0uS3}JK&FCG;Oe^5fSTH_2wb;A8|g?Q3|)y zMrNS|GmP+?leYq-gC+sDuDhVInuz$zGG1Q8$t^MTgT_uF>BAR$^A&g6gS@GI9lBrH#cR|_?{q#jbP^x6OWX*K1%%w%)NlzI zy6@TlCeA^p!?|9YvYmwbRx7#b(9W69qY{f$8Cvd|!*z7(fGO+M`HN?{!laCu%Dv_6 zl)2$BJV1GH)|;i!{y-SUCt*tLp<~j);|U_+3GS%FpUV=6ZZA>K4$#31mf&Op0}!r% zQ7^I5BOHi&)z8Uwi;ASDWOqOJHa`hH3B8rod-Dk2GGz*r;Sy3@ z!B}aa8>6f7X4*4zZziS1=B-s}a&l?CB!a7Td=vYSOnE^Py<**FLZeib@BI&Ux2;%*(&`rcDHCb6bP(G`rS6(;QT*j(6{UJ#qd2l>^ ze7@_{KY~1JD6gttqp1UpK{jcS()IO}JF(YvEcp~|boX1k+PRu4(+tW%Q$eK*TQc9> zN!>bW46%}dn*5(%sZ(T=D7Q~(RTuwi2zOOoOmfp9+N7wyE!{@^@o~~p@NCEBtLxYy zu5m~d`B(l&OB9;H<>S2bVSXem%eOjuDQQE0?;y7{5TIQrGhe5x$_+X^WRi?E{DBtB z;wkPsDct3ppS-7lcMGF+WL`CaXU{gxK1c7(C7CGXy}=qcx)N3LpLWsuBsRuz$Y+3& za87YXXgJayd>o8>H{;T5L%Q4dWp~A1tmTL6k%^-qP1YVnGxqKfe*~Y;5g(71=$LZh z?uu^651(#?_HRAge4Cs{L219ov!|ilHUoE84*bM*kFz$S`wMyRQE7Lk+?N_er};d7 z^D$I0`xLz^zV!T~zQyOZcX+Lqxud8u^7}ZurWG+`%zWL|`m0dFd9)Kz>)d^Thxyo6 zSpe&f_W17=P@mxSxQkXr@X+mDr|SvI!sz2nvr;SMlKOe^fa}|NzCCK+O}^oIQ8tI; zW~B%IgTCGI?|)8g?BLb!&EFR{wSt`b{YmGWmY~{>+ZUa)O6H?U$2#838@1V^oI&5) zZ1G2He-iaxI3IE4*A|PfXhZqQYt(=gbu%0HXTly1)8%GdZ(euLjg;+cY_BWuqM9hr zZ>b$#v0{{{o6-7nws6a0MY2;{)OR%Y4PYi1EY8 z#Hj1w@Dq-6858w512PE<`EJmUJh3a($-bKEa~&-vVZ^;*d4LP*Ffdr-tv54rkW6a$&PfB) zWqEZj0)2mXdO22l7=1^NDRj{{h}ysQB(pIe9=_|wbXY0lIQ^QM0k_HiUK+-~U9hdz z{U#)e*MiG$DtPjC+#mVm`0lF>oVH?F#CPqV<^`RV18aWnyL(H6uT-_z2`SV1-L6EG zPIjkz)Cr2TB+{a4Fl{n_bv#{nc2tg!Ii%}jSd;cDBpM`kj?ZhmjWD83ZBY=$jG#SY zLHTub)VV7)<NP6$`HYUA@YI1`OAHj2?bh;8^6)Fa0D7-Jzdj zpl?nSCFHC3NCS2M;Ap293ESr$#4%2jomGpH)ll`&t&2e`&y^^B$@ z?Jxbq%2_8DB`db6jlY&tkN}sviPlT;D*N?He{0Vz=*|57DsgAQuIL@W)bZB-T3WKh znerV~17Uxvf!Xp}qScBWBZ|A!9hZN}o_6-nbJL8=VTff?>177?*p~kILRc5w(~k<< zx8He{NG~V>RF{6^O!GhLz*W*Hs$fsX2dN?_U!5ra#J?1#=8^HlI`?Jsa`vk3a){HM zZaI>s=1=}YI!irC>34(QFxIb)2Mznn8wUUWF_Ki+ZhXLLr5UdkS=9*>`C0AuL|r3} z+?~|L_;!G4|FX=ev^;nxadGNqGO}>6G_x&hv&;>bku=*Edy5DL=FqOPz-3k@U ztnXpxTnhT&g73pD8vEHnxuq==5%)SmbOUk6L)^^Hbcdpp4xCZUHWEG!)1u%0qjZvW z4)AKBjO`H8D)+AQZrV3$0lmOh22>%Y5}`bq|Fj+(Y)fa z$0c9f!TqrWA`cxF?H#a5?LJ{Yd%@gs+w#jQa7tdI1*5FU}g_Y%65o7 zVddA|-`3H7{${kJSrt|C*71ys7We637`@1YJu*>#iL=)E^akx|jp?tsSuU(0)-2jL z9k&wA9P4Q(Mo4_&Nz9o{X49=Mu6|Sy+!&;BFkxZ`5UgH;m=mCb7Yy|QK?H>QU!oRL zsyP4zG4qPh?$3>~(jq8Vq8rnDw@g}13j9Mw`Av5!8w(ZQ3!osnr zId~)+RoQ9dvp0E`l1;zbUk@{VTA`3&D$LwY;CJ9Q-659`B5vCP3O$=3((yp|V|ET(Ty|wP7aNTp~O+0a4m@$%ef5 zZ+pEUgICy;7OnLj(wSoI=3x3k+Hd>0Akjk???E(QKPNH^yFEh&h!U~NK^8m$hO0g$ z&4}+R%kMJonbmDB0vpjSDBabtZsco^-27Is`HFnYo#Atp(U7)jhOgCq-@=zv>{1~> zp!yIcD5lMv??~hskmzf~b9aAROFfsR7a*QdFxINAu-@h+s8Hb{`d$$C`Li$Ik};eS z*>-SwepBsnE?P*6!uWLSV#Bdpx7G)fA{_aOd#KIadO~HbnbDBX!bcWeDZdf4U4O;b zO00@{3~2E7GtPX;I>CI;-i7Qcw8?NQ0Wv8a4e8)F!L|J+DJt7mFR}tcfiEfbV7HCL zRVa;pOS7P*jG@vj2x4~Sip{O>7YI_>^-hE0{R79-iHHSRW&p<$AN40qje({c$0ivA z;!q~!YLYA^O|3E>=8N$t4fISJ^k-K~n4%f)6Ut=E54bhdJ@bv;cttbCYos%8A6}cx zVI#;~@CUKk1jDtywPB@5DCjmZn-PoA)mzzw``V1EZVmgc%z?Q7n-|r6{nW~jaJ=AeY~V-*#VEb$E+?eN3#(7@@??e!h#S` z92w{n`YhL0Un=&*RM2|HH*&LBFeZpe687`>7DIDi2djME;2g1@ML7o9@0+B3uEQqO zaw98EYnplmpIWAYV>04J*s61YGeN{uacndf)i z;(dO;_TV%tmsf`fqf3>hd?G<#_p2y40_!2aPNCfy=tsBW&zA ze7B5pUpf8%2+H9O2+^c^jVZSov$|Abhsj+REOEb~sMqAMU%$c%KN;Deiuz5*W7vX+ zI==NZNs*+ys0OtV+y0T0@WN_qMj}z~^ zdK|_ooUJQ`1N^(ad2?TiMeSS><;hM>WxswKn8XL#F3M@aM`4JsJf*$K0ZGg^Lw3TA z3%VOQre8xFD(w-HRmA1LA-aEg3}?*V$Ei7|@TTuJH~@mpOAvAabnvb>c!w0cBu)M= z2zeWm1MeL{zr4x*0UU&)mDSy`e;l{jVMxE|^{dfIRzO~9LsM2-&>(MBf1 z*7HK*W5-0&(uygD;gTSU$G{`M%0GRdkZ3kVYU-q5;yE*dn=(2H7ggJ4!6Dq;+EL%( z?cd?|6rk*PbD6nz%olDX5pi*8EJ)FZJUZ{xPAoQziT3_0lMd#9R{&9c@w$1dMl-d7 z5>ffoJ`u?L!O3pKV=1oS9bxE`DGxUejdI>Fs)%tA5BvHfnF+P@bfTSqx4>d-tX|&U zD~eBkaQy>k!|m9wnA{|4d>IJ{`_4qA}QDH8HSbTUQ@=u#fiXqn&w2VjYp*%OxU^ny~3=IPrzt)RK~Ul zt!CEIzVK^0xH&+yZN2GwTQh4zc7gQ+dH>?{ueV4ER<*7~{GC;i{-Dz9Y?cYDYewaf zu(d2XXs<1M2EHYY4ph~swRBkL+P1?x$4!f5`9|@c#3`7F_`OUy{J5C{va@%Fek3r` z9|&lWCWq>nP@OM>54$2T*uO7{cO{nT7%7;FFyWC(3o!dfrs)*z)~Y-H^s6T!N3Ilp z)00?@7f~e3Z&|Q0uxM#CJwT4+U$`-_YSvw36wIBKzcHZF9zT&7@JgCQ&9T6oKF=yi z?ysBkC6Pp~ro`@h&X4&|x=gnC_H+HfAX$u;37JmS{s8K;JobCwR))3cLc+{f zoG8+@5xwZ&A00o%X0Aq9;=A5v6JQg1Mz9Kq*3=~iQCv!pdA;+wJhexROU~6{6B; z<%69BzZY*;UjjcF^Ph=wvcb0Y;a|@E3?5deH`17j9sA~egSRX*kJl{)ulI9y{kBP} z^S&vHvt`t<&S`#o%4;p6F`lfar<#LiK^rV-W?|2(9qHHK_tRQoF2h9`KE?4koA?&i zaXL93og4#yV@2=f6zx<%t?|>I>0sHd)%Zg#b+rCPnVPcEL;m{kX=2rD545kV%j zBsU!0o0=A5!V39>#`~QeVj{OyP9}on7>!cyrrXP&O&8Y%~$=y1B=L?s4}Zy;|kTA55sdy{!4PY{X>mvd1a39 zhZ@R0sH-Qs!tu?*cJ?=;9-?au4p%cf5<@~==DZi$P57_2=>~mI-}H2pONsZUAbtP` zp_jnq3h3a>2>gf#3kVrFFo8h77t??ebm((-( zoan#ce+*gmR&M$II^K81+uuUOztiIA;O6Mqee6ax+0pVC0n4{vl{g4hdDxfY%_f-$ zQM#_tg!Z@i)3XR6@|IiaIa|TMLkf{J2L#q$yr3G@kNiZd%#kAk({S7)+QX@L#>@F< z9qnjnYz>EsXI*vDI6fTkZj528EQbBk>^9N@NUXgb+ofzCmuW)pS&^e3vvhS%6MOwU zaHKl*7e`1JceS2i@(nvQl_kG3?89|I*#2pbguk@N&~b!c&Xgl0k!{7u?AlLF=(ljf z;SF!A3Sbmw@alT?jXSkBdlIc;a}2%LB_C#`YgU-KzU&wZtn3+YF z=_KU;BI_T6D~q=8VK_#|cG9tJ+qSKaZJgM)ZQD-A>R26hI<}qjr0?(ExBgY{hgmgi zuXXm`Ri|o zh(Ra0!;6=_k5CZ>yitZ`9PbcCOkp<-b8Eh6VhiYh+bWbdyM@>u0_~%!s4g)bpk-61 z4jp~p`*ekdf}22&9w#Q9S$GHXyZ_F{8NN&gw+E*1ZsNb4B(SIcbq~PH#(ybQG$UXq zUJGRX8}~SMSgBC3R(mtw%dsFxeL0id4jLIaDhD(c&+Ve>hnhijtmp8H0LUdc+vG+L zFAi^=F8jN`tzDak<`->%+7q-8%{8qvV)(_`Lf@Sn5n{L*Y}75TxyxFr2i1BNeB}AH zmVj=~x~o+l={^_)-kize&0plER=p%sS?m2MvIc6uI{>L{;-=l1sa=qAB-`6H3S09Zw`x#}8j{&Nz`hK%NO*UndKZx9NKC39;nzpoZxYj=bxk=iVBCRf?MIARl z0uF(RD~@}Uje1NzY653r=Be$sQ^Gv`e&!rPcTg5uSqA=rCPR%_ThSjB=J|x>J$g2; zrp1ho6sYpqRtFSKg$wL za7a_h!hr41!)=mwX1v|{s70y%ZEl)pB+kV=Ra7`+PTTYTdsWk0VHGX^Tx`63awb< z_Bc!|0`yk-yQZ8W;xcnJW!=a6Z$eF~NgY$e7yX7*+HnsTZR)`)f-MyuxE>7RExJbw zOKrfT^L)Y0Ji0MI)4YaR|92!k-d1_)G5^6w)pkL;s=en;Y3KK+n_YT>wxTw|^_Deo zcNtXuwZYFK-g}KA%JY?Hs;Cy7Se`*v_oyT&`so>Mt{GAHO{Bjw5wDK`5P~j)X;|W^ zp)Yv)A8dJi<^O-M1qwo-=3Vy%TU-ByEzf_-6!y=6%;-q>FxJ~s&voj%g>fhj@${Az z>eNJw9yX>N=_Q&zr@hZjtRwPjR+TMR``+s;Na!oT+ta>dGc8gof~E33eYVH(O*~NO z+S#k>n|kgX)t>~xx9es@;Nb4nivpGcP1dYciopJHwII-V_ihwk{FK~n9<=rI1ECK-zN0g-WG_AcaiufISLe7H~I__tJjk{Oy3zOy?59h`GpJ+%1 z+({}7)}{8(*ZE`(VQbEriISX7pTmHX%uir9uhR{+5jN+`&>WB~SkzVw{dj0}UjI$- z{Y$cfqcG#D?$B0S9F+tBlOgN&7}M8F=}4^8^!H7ykEeg5(8YKEAiqy5X1#Yn~TpfXM+}Wx7m5r5OsgdY^+zPT;5Nx2}0O z1r8L1&4ipbacH8?S4D2m>Nsnj`ZRq-RRLi6w~WXvuF@cu({cyCw^JlHIUsNY zYQ*y)Xrek^;Q1!s+KAb?cgSp^=jn9}u*CWSj20?cGk42zym|sy2LWgkvO;nMnlFLn z44zprRNOB;x=5b|bvFP_obOF31{+0^YVM!KV4xi@?{%@^0Oi$Z!DpS?Q+<@J|#JlEaG{PlwOHN#U}pr2g|a*^6y?nm0> zZ2z{!1Q@3wH}I$6*NC~_H4K`>1Na(&{q+ z>+Kzd0P`}V`Ri@EA8@3$xDQ}=Dsx)f#7WtowS5_t*lh*$vX0{P&Z1mZ8jaqZJf3o_ zN&j-d7C(?zVLUU&(OD}zrHWs~FDX|Vy}25zOP19qqU+cg2Gh&}-8@_z+TshjBs7C6 z18##ZcB(&AZ+-8@v>MpVMi^AAUsqXOqI}&ToZ#bsDr>=RYa3ivPlPu=%{he?9qy#z z3aZ=tio$LG#rwSY5uJ|;9f)}0@0|P^>kr@_0=LHeoB8SNAHb$OtZy?>sm%!;iN=jx zD(~#@zB2)XQWPGAZJD@XCWG?bJV*QhK{{1}Ix<*E&W?<16j3+{x8US=36= zBpJNnw7`<}$4?PVOu<@M@5B7R!~|WSpePFNv?i-8&w--d98znNsbvAIk?M7ftICnNSpkMo zI)fJiTg?C)`GP~u|H7g7zr#o? zmqjjYXvcL8TkR%aGAk)09T^;>bn`TS;8la2NBLH+3KjZB%gll3t)1l#opZs!VS)ig zrs26HKrl}dq^3Uw^Yt;=O?u{gN>)BpE1UXq%0>+hZ~G~BRvCo7>lkjxuQY8SL0&i45n|#SX*qO4t+5VE;kn+pYNrW;3tB6WoJSa zRYNFUJMhoU+0i5L!=+kYUh7>;9bG<{hlPIg?A{~);%P$U;e-o9;5WUvGCRU)S0M5z zrdy9az^7Uk(_aQZ{@AdxtFZMxtq$+YdrR>(q)>l^VwdTeL9m&jxy--$%WYVwERtS? zpnc29$>zlWm&>%*GXL5y6c+gy`YCt5>|@U)zZo#% zK_M8N#f zV@cGQa7L4sw%m)Gx|NbPUTc-_&ZrY~wJ<@UqK`>SJlUg=~%>T#+-KnAv_zMUUh z6sI|;N>_F7RP5%~An%qpC_}d=srjXISi2HSFLQLq>f}qQq)O^WDGh#Y&6c-q*-snk zmM`ZedI_XdYVEs~Et?oHTRGJVgGi;T_T1rLXj(Qkiu0ts34~6&zMe)#-H^6#C30|- zq-N_QRq;|;^J&7Jrc~`B9V(9LmcnT5$De}!^-oY8!fS6Xv(QI{;Ob4{@O-COLZ#_X zx=Wi!4r*0Oev5=~No$^X7;D64xx2Y|%reVtV2YaEHb@hpf6pFfm-tB&4JH`F6%XXj z=di?4cTG>gaNvzDLlcD2o=zs~?Ww|RwJ-%>u*Z)+?MoxG5RO@8S-jBa^LkY7pE#}$ zrR`l?Fy*`wNAHtOG}Vk(vj9(Hs1U;sP@y4O1)m+cu@!SwKDvz~o70%iX^J3fAP$xs)}_BmYQ!grt*j6}o(@bU9_caNKa z9kJlc!+i+9RFTML2zGUPdpNOAVA(;iv;(npT&(loMJ_2s?N_OM8w3?5X@wIX=qd2D8+BPOzAH$+lWOH1W zG32nxrBIlJ_yqirEXgEjL9A&MPWVpRcB4b(bNNJ97)=Q(7P4I5j!>qq@Q}JQclY+@ zr_#5Y=x#~oN>fPoa~jDIhu80iN$6Kh<;8+(2_e7w3$41Tr;3l;1jqjh%7N3m$=9ar6UJa=shnei8c!?Nqk3XuDlbg92 z`*QseY&zF${2VY8+TY+nMwT}hIftz>n&{@HnyRWD8X_R>;}SP_fUOxjJ^g*T;!cyE zX%lpew^ej!imFs}CG?*0y_Zjbw0T#)OvXPU%*0J{hfU*mBfg<-4Li(N>ACjx9#s1; zwuB?Fra_k46nFEHdgj58xCao%^^-|VG07oL3@m%{jMkxU(wn+hAWY1c=_Ij9Z033$ z?TcE*g*$GXTt?IvSS0eQ8c33s>cd3^4z}*2JaL8xB6|Aqhg0$_jy^VbYP;;X=+Hkuwl$w4LKa{ zSHmbAzcs-OTBw`bM5wH_2^gyLeIYa-9GaRBY#Wmuvv0CQ+*xaA1r55qWn~+FwGE?2!<_L48HgAw zIJPI>YSpwh5bnbsNjEocKcQFFtj{Lv1<^6vz)LD!>(SF%d^M4LP^fK@J-xrIaJusi z8oOxxwti`xHD^9zbBlbvbhv5H=x3E%6D8JKJET&I7Y2-{e85 zT>AbjAR@2}$!&KyhD}h!*eBdS9kAAuYDtxKbr#w>V$By7Bf?fW(eSwOjcC16n)vN zRMJk!dm9f$41qBf=`C13@x0!?F*43trqPW@X|Y>%(t{x$4e_pZZ{I<bBE%!4(ImAHw_)q~Kub(d~B>Q#Twk<=twWO54je+(b9#ghFgk-R*Kcynn%a zQ52(+xN7(~_<8Y8f5Zg8*hKv8buWUw*o%e|t(CFvu>)NnY z_N%e4FVku0Aa^a5TB3MIt{(Wq!J~WC$_Jvm&Q!asQEr6ALIm^492BG=s>lQL;vRZS zVe^S!1X-jG&Tg!Yjus9rRlit|VByqNCs2`^7^ZtXH113c(C6>wt!h62_GMmwrr)`v zB8DM_DP$Gkf3wjGoLP(Sr9SsbL5)EPTN&wYcPTCIUKgDX%TSR+W|*5>Ox;|+Phq!} zVp5Rg{v|NYh*$>rs*5N3voLA$MU($O-1Ga&|LsTrxxv1`0fg}X^!+&LAl5Hk4e`IY z=l_L!S&_U;Uif1G7o0J!B4o5GYQE(2;|X@#>d2CD8EVPQq=iDNremQ-D_X*&`xrt3 zm1C`Wd)GuY8L>@KX{>J;+>>nnJGC|HChu_$^@6(}9|HYzHy`+d5Q8A0g#%*#$gYqG zamtuR6@OR@P?x>lWdcD;loqEW24~sQ2G1Q;tCt zc}?Yc^t>=s=f-0euoNd5O2)$JJy@0lt&LtG#=a{%u_m+#bS08T8MF^%ks>J@%y^6Y z`tyGSd0x9MxHc21XeYqR3&hcDuV8IOy@tH0_Q6^((U@b$ft(t^ZNrP#h!Q3uI+dNf zgmXHwSuChvl}{tzItDYGSJzA-Y#y@jfrs~Mb8!`>eTHi3eZBf?ghdL2LN~VKcuI~9 zv!Rnnux}?2RKsKb+eDfETVHwkOBdBIdp2okll2R_E6`vPubb5?IIa?SxjiU@Qz%hl ze^1+3*i0A=C*FC`l3#9=D;kLnJj=EYXbB27c}l^KVzu?4!wblkQqu!1+M&nSw;=Q` z6e&dyh|(YwUCHX#)l)TR5L%UJyJ`8a_(tWF!Wj8oA_4>A2Xfqew|Jlm+Y)#zOx22~ zL$pXgx$SLZq=UTBcA4_8YO@6Lk!~7zF8Npr@p}(f4>n|zhzYU($ zGEWH%X#%N{ymhMLYXAC08bXq;+Huo^FdR=M+m!n=pqo?jKoC})2GRrBYVI&1SY6i*zaVWGPiTsNd$sW|BUEfKa{C#W(_O!Z-NEmcx1u>m zCmL&d+CcVWF7hl^=~n0F+ibf!nCjNR6G<8Wl4v`ndx}`6etILt$n&92f3~#vB`lXf-F&YipkfY()seUaqNz9 zC7t$qj&&>1Q~p0Fzl|Athl^~oye@k-q}BXa8we_5;=X@RHri4u4KbJDoM*2~Q@Sw= zbV?e%W27+J{W0C#g2KAsD7j{b8RwP0vH_J7n~Kqwnc@UmM@fT!b)AkA&>JG87&{`E z!9q7mV|XcL=17Bgi@P~alCidyI63#m)brYH<`QHB9<}Z86i%z!q{xu{~6SC5fh z_USi#o|p+4!yFQ=C+Ub))zd~ZGAdKY&|h9r%o7C3ko}37yGkB~?B*(HMKp&wyQU=3 zabX&DVl-<$`GAnK2nDlM8HJvr1n0LvSJPbD$(p!yvSDW@Q(uA__iizoiK zZvG+_5S_31$07gDhY9|VKV(}K9=`ZP<-hz9@Q**DIa9o_$1F!XV%TGUi!hL;)2G*H z?_)0h>cBr^v9^9n5J~#0V&X=YKBTrFVU2OplvIl>gU5a%As%A3DQ{oPptG5#Yua<= zzTx7|+k3@y^_DFF79JA{HiIW-2~3x(RNyh@R1tDn?5GnPYIW|9S0V<*IZ zhF^VkgY(y;tgtiFk*xR$m1<0mCdD}|hASUlaKVws+~rosl8z{@VRnf{udS*3Nvq^= z^0iM0zvh?es~dY#n)omL*6I~a?=mmgAduy@fQNHs&YGhEXt7x*!)WKt5CXJ3c9-^s z(M4kFnF#Zr5Nz)c+l@zgSUDJTqVEGyDQo;Q%SRY4XnrodKFdx=4OJR+;47D_Cs{KB#1G-3AmIVbT)&SAd+cYeTCK^`33>J?#m~?Y* z)-SnW$8wVUA&V z=?%VL=8%Y8%+BpZ?vek^7$mM33srmZ${jY07}?x2D3qr5yrZzf4>pOzAI|NHxsyw&wge1fVa>0GQtC{}7 z>jtN_qSq#N#kw?lNLx^#s*s8C2dmNvBIRE)Mb-zH9sN%w7%KjWRq;4TmyDh(ID7cu ztgUHPkwem4f}#3nzi&$3WZ98&_~fitYr_bn1r|H-%c2$~U3NmRo&HKEnw^);2`ExW zVuaS-&{X_xG8lmL{sPzoMJ_u{OnV*RY_87tOBkJ{@Sgb=O&h9;(q z1uP8tK+fAkjW=dYuEXI26suXlFO*imcm_3vOC=q!Mqjc>cNAD+atm&t-83)1xn+jy zaZ@?t3D5ZZosFkqaAb|cEGdA~lO^jPHLdt$(UOw>s)JlQ$6Ad}(r7v)PF5jCY-x@6 zP&1QssclWP6D}uMN(6rprzW{lX`ih;VCFCmYohdv6Z1uA=1JX0992j38RU+6VD-4u z%N@w$+!2PyZZ$MSY4UQeH zaxm*=AP2q?lTB45?Ma?i=-I7(;b8=y4wt}L_o&0ZMrfOS-=vfw;lVy5sNMOvl5VaaK2H15 z@g&H&7kw#M6Z4>b{R?!RcrH~u+n+~Wd$U==H?s7V5JqN4jln8W5L-k^sJKM7-1+(F z;|rX!4xeluqy3qUcr4E~Y--kKuAbLlovV886J22 zr%baelVKM^sbn*2D;-QEG+*TeX~z?ov)_^W1B(n+GIrCyxaNNx6!?|@>(lhFk-@); z7V`fSk&P$J@xIDq@Bhm|LI0^}aX`~Vhum#tv>fH2Lf46+kx5Ab0<%Tz)pZSifZt4W zzb!y-qIrXcCQnD3%YL>zX0kW6!iLM{Wr#yudZ92c_Vn=f*cILzpN^>ukEt!HhH z`k`!`_(bIURC!t4^ZfFVd=2BlX;VA1sAtn0YMNMNjvZAMMa9Yr$KU-~>^~Y)zum*V z{T(e+$ihObM0|jsgik~(BQt^;2Z96)W^Q%AelyhT^>yZEVj?RdR9tO}3$fZ58;U;3zrGE%j+*#$KQvFABuIjN?Xs7BZKl_I zE6t=PCoCjEZeHH!?c;^hp3iThWegCp4s9FG;Q}%&fJo!#$=Fps5&sr^$eZCb511!P zVnGa^xJ5w5gKkQxjk%s(Twix4_8!i6dV+6S*f381mH<^ZwL`eKjRu5$A8TX z&?AakS>kHQ+<}1K2#w+m2x%ofE<;h}7(B(OCMsC$x`Ja%$>MrviWu`k(VG=q77CdD z2sMx>8i`}xZ%kL7zzt_ZGFn2i`dyNZa)a|$*wgL@l3w9Mp(7YPf0?1&mAO1*rmxJ& z%C^ax!FjBxdX?cO$hzW*Zjl{7^!v}i5_IX{K71>a-SXUV57Wd4yst4703;c%x#~kE zIaGV@WBTHmYWk72OaSqYN_2i7eq{eXfDQZ#2Zzv^!`n!va$Uc#_B3#QMc=fZ#>YbG z%%VnGJLAXJT+oeiMdDkgbvT>aT6ZS5=bTicFNmm57@Vbt6NROD0O;~(^F&q)6MAhk zK-pB96h3-(LkksdKnP{hpF#=|ez>;%r*siWusU+DqNvOHVgt-DZ{}%aHyh4MHbrF0 z05Z9VrPB~!WaxmBan!ji8odx*k0r972Ok~SG<+BfT3=J>>*>ei?{ebx3!I|(NHPp>%<0E zH8mhJ2S*60F*4Tsw|74j_U|YVAzxlv80a=1KE{7gMW(UDnBu6ZtBFN;b#-k!u%@FC zc=90G{72|m)v3%=0ce<%_BmH$&Y z{%05>`ahHiWl8=r3_$)to$;AXXz~Nn4OQRTW)~IweAkcjweAxwvUlBR3k2)ih{# zo13U=GltUgU0ie&;I(cBg$+mP>>y-+|FvEg$bAhvU0EJWZWV}!9?GXJq_W!#^dJ4QgRr`?(CA6OkdPeh|N3^loKH z^v#i-{ZQ;8S^Juv;;M8rLNrM>`>i~^tsmT$X|YEYLk72pg1xQ4I0JUg!|9fT`Txq1#zQ^7rw?kWe)kTI9KpR9NPw!07LgZh2LA`@5NqU@|tiEqRpjHne$ zDAPmP*dV=D34Lc|6?4@2BjWlPzjFqMlM)n{uI(1>qp#cxmutY&!$;c+l6Mo7FYBF$o*j?I(cF8`5(~P4=d*K)%cx zRkpgBq7v^qBJ^|P_p@F0v_@iRXSJwnf7>`Mw^6S>13&)Rk(4$)5lLvI4vd#`v8D><>S%zwAH?}sJ#ivD9H$K|m~X_< zx~*(;sSM=EDuPi)7u_`K)Sf$yljOzwex~}H8GxGRTh>c95nU93?3+1piHS+~qO_H$ zr0WKD`{zWJ5AkAnmbF{|KEas54zSAr-W5+cS+5e~?WYg3irBfrrh zT=zIEgsXTA*u)jf9-y|3>1Kkt7?$jZ$R=J?8lnquhwBR1HjLe&ibu|=*w0dXMBfPK zr{rTt34*I!yC~ok#`>iv-%<%9;)oNaXf2N9nt)`+E!CJQZyPt`;0-?2t923Y`;5wF z+is~L5QcbrL_HdD)|>z~;&OFTru>6QLj{GDDJLaR)l6Y|r@7%TV{szAw%nA3?qudD z@eiUj91@7JTDG00XpJpMpDD2V_J&T##0!xHe>?n;*23t<>l{Pm_?(ZbB0lbJvklaJ?~#@*!e&4 zbg1J19V^%3bH$lg%s~5yFB3MWsAn=hmaX!-m^RtoPX~tVAEgCXgm#SSkvf}OVrfsZ z#B`4Q#yZWAz)`+LedRe9fYsPDXC~8*&x2G(Eb4uktkgUYS#^)y-?JVwME1P69TSM| z$X7$$q{1_XjnXtgd4I)STkrWVcRY2u$7l$4+I}(b<=)SUxzlOBPKkII&a|Hv%rsPY zxh|g8!VkTDH;VDgp_Z}zrBLhEMs3R&i%qv1nc7+|PZP)YQ*Y^U7p|;{gO1YmKSU6s z=BWFe-|YRo3}gaoF;RG(L4~F5XyYT$bp+`B6hj!7)d)B9;l&HC6$W695b-1BPzQ^b_67H4i(F1CTU-AhE(-n1|0yQ_xagni{vR#^ z1<7e`nEB!&g8y<+*neDLDFKO*X=SXibo2(nnJ7{nS`8MDN-N60BTD2FAq zg9;x;N6Ji2@spKjXAIF#OerNzka9t%9G?^B1gx4DTAZyE>*9G;$^#^INBD`0OjZ+Z zrmKYdT04X`L$WhQ>8uaZG*@};H`l3@hM)fZ4IRHF6TN4T)SKa^?D85dfFomupPxV= za6hrqDs9PGAh{t=(&Qk-ynB}a6`lnj#=zDFR--WPPP=3#*k$w3j{gJ1;`wX-B?E2C zez8nLHP?uyqAuWloAS%kb^Z3fq~%7#m9ID_Snu;vxJi_V03GD;hO75Njp*)Fz4q$m zWA7`(iVw40H@j5!>xE7x?5ngQ zc#s$6&Mp%^jK5thCW+wM!LT=C&yXD#vTv4!aNV6YLNuq~u+7&U=#a^qv9Gg%*K>fN z-3mDE+4Sm8g^<0k*UcrD?%JDX2=@n4BKpQruD^h(_5mqze=CtRF5LON=c6-)XQB^d zXuMM*ygN~DJ0`Y_0i_{5JR{ij2FzdLfhEC&5+?9R?DYND@$g?>wsw*tjAFF*-2=ew z04Ot9m`n8==lPpN*$EJs=KO~>M|OhUV|G~(I04n3qwR=0OYMNS({*wpcqb?s zA`Y9+h{{+Jd_3oqT(jw-R_`s03S<&|x#kL{?}0#$H)A$gY;LlLtv}V4m;TR3f~C9i z-Q>Jkd#D?Tdyx9H3Vkn1gb*kRC-`aSo?MUWt&-Ze0?FJ`SR24Ps*{1?NMCrG{&RA*ifDhMy<*>*(l<*Ws_#IZLt$Bf;U58pWR!aA` z$55+vej?`k{ka*cm}X?(q6~=dLOzQHD{McDYkM>EHVV3;l^3W16QWKM%ir3d-)ME{6S!!a<8yk)RBmMt!um`|pCX zJ)pog_b-fZLJ-eo{9zlYroOn{eX>rj!dZ=iJ<(A(SoXkkK~5LJp4>QS{q zod(eBV>|r2F3MH%?`(_En(`^cTe!_znqu8t^aK08ggx`PhJQiO3BWLCi>1Aojr!NT z6r?$R(!3EVM$pG#qI$A5>#&~u^3P7C&0xAuMr!ttsfXOVO*qpYIySNnChsV|UUaCp zO;#I9b&9w3AJWdoXJM0i)=iG@KtX9kMWsyxw7-(xKSvVUD{DWbmzWrNv{inGHRY}$ zK9YvbfJGcCK|r5a=BM1aZ#Mo@5+~BwK}XhP@v=@UISP}j_G(ZR_KRUXf&G2VWZ5~> zaqq4)E_k|7`6i+>1giMcc9j$`u-Wlr(Wl4iL#7M_GI*h=k3iD#s16Wcrq!s-W>BBb z^2QQ({PEBMv(DmJrYN&OHQPI&8xxK(AH^ukP!khA zciR)8Gv~pe++{dRP#1j?sP&Bbg6N<2iP*Xsd#-P|tJKVldk&)0w(aDQV zn@(aEh8W2?hM>eL8Mkz?%!!bu#l}fMd!-) zH)Bacd(oK8!i-=OhZvy?!w?4mt|tDPKhp3_GRnr@cc*;{2(}l9hv8toMZaBKG`X?VB*WdO%QFlqLbvgTO+$Fii3c3 zCm1Wa3KVSlE`};ILZj2A0l~XE;X*!Ppw;C4u5Mn#|?+B_o(Rhp&XtX^1YD4ES$ zEHEdO`_(gNmr&g>_}=Pgh!KC)RrPnO1Cjd*{rcb*>QPfrpOzk^1!bz}{ZEc9wI^bQ zB^XwL-^#h)Zd0LPOFInvG_ye*s@yc{Fdz2GXYe`&*3sA`sf}SnaZ0wl(qZgrJi>FIFhHY)}gkOGp%Wk?fz6jBrU09 zPUZ7OT%+ntY|@zgVN=68%RbwArYl%byC@^@plB!GYEU;-wJ?djsCA~d-*Z>z#!0@W zV4do!h<*2L&EBtDXRdBzCvS?k>Uq@T(EDV!x!t;1(cHDNBm7|E{$bvimbx&iW0~u* zEofx7+E#GJ)6buF=4+~!3+#S684iD1eNwU7vLMMF0FFz)%h)Nc{kHsPR#GUe>&qVQOhh* z*_CwQ-P*&rtdKAIal2Wm_uF4O*84l>0pVTL#X2dEms^dR{)7yt&kRi;!H>~miOdg4 zLjb5h6lpjl!&cP)gF=yC`9BMt>R0@;(ESI6z(61~vA!0yko^Bep{TDWmziE{zctav z5Qdpdt8v4ksKPLXZPiOss2breBFLSbBgk7z2EUU_S?ff8!w8dD3`_F(I?5sY-9^ zo`hZ0rHM1ttVHXd8LR8{z?nlZ8#<#aHux(4}dAWe{#S| zqgc;AtE8RWWfIw3RNf#aHyv*?Q2;uZlkpyyflSO#njtB}GDc!-M=_X*)D@HRqS*L% zG}m#3qY}BN{O#EpQVQ?L{!U8V#jU@@(;6Ilu5>9VLG8Ty*6cR?rrBoI#f zr_>4i-n%Bm=JNYcC>L!@Aarc1_|iSAQ=+h>ls$9}z1)2(8~TdrO?dqriCz@9;Ku5< zV>1&YDLXL@-8Iw1*5Hbe8G*aUGXcd=uNEAdVwcXDJ^G=ge-^q23EP0OJ%I*gCDxw& zx%q~pgQTjwwz0p)MrN^&k*;{Ar6LJm^l--8-BVrLrh2KS3H=CYO@r#mx1scm`^drV z*+cj_eGtsEov`cL<&l%XA|t_B4g4{96O?-&MhnnrIQ6u0Rfi z@B@NNcVL#mqgLH<5ZzB{9n1^H#~mxi9m9gr18PG;E)>`xWi2U%4MyJ5 zkoYDSF+a6+s}_anEAdt-CJ8)Kf*_U~bV@ zB12UDBfPkztbJ}hKSzIOPElq$@qlBEO$1xoi=8yQpym+P0Q}<&B{Drz=ts_PyxB^5 zzEsItGz+|FSQ~t&-hA09lT7PIG!M+;OSi&3PF&M+W*pgtt-^f@vf?x0vK0aRGI~4U zu18pEFlpTM;AQh$c4OSL;%Z4`W%MX~}nIqUeY3wJSCZh+pn@>LB6o+XU*-MD@ zbK+Sx_2~4aCT1Q~WN}F!^4j_~mOBI37wfk)Qh*%m*n^op&0icI_lR){3grgW)mA-E z4Gu=G*6zj!khxo^cbN4ST?G|2S%In19={}EQ>NdCnySK9h`L{2B}Xj}DWkz#UL1kS zBn#aw@=x6__|Y+n+`y62p#|LsdAr>BQ&T#!=aygde<1!C!0~$Q3^?9e$w(*&D_f0F zK6+y332JDFZ>~)a4s(8|d);q761YN6!1qLI?z}kAGUh{}z4GU->@`!RRagUH=c< zepQl*E+Twg`2AnFjros;02z$haKp0r%T(7N7AVX}SMo zGCh5nkIkva*lc(Kt^VuF3xLIZsJL{ux%{@b?JMB-2G!(^(J${`Yi;lS!B?q!gYMjw5gc$#u`l?Y6ZDsfWW7{Ditj1TY4ik`3(QtGr;fNsmhZ~chtW+1N$o- zA0q(Y-K*r<+?%vNX4(T4iH*mv`M~GF^gCIbA$hThhJe-bubv6OkbxabpK>fn?5G5t zLS}2MI>2W>%=N=$*Cm|;zwrXyE?l1f0TS~l5cu{!J~V2^X-AAoXS7tm4tx+y+&z1! zU8FI|VT)`J5cFPe28sm>GAh)Z(!;l_Vv)^)NhHrke-)a6^lksqLJR}u&=O)3WBH^Jr)!+{gv00aGv){=S}`ZZ-k!gRLEZ8-fib>>z>s} zz)A@J{yrz)%>_&%Sh7X!$M^EDdhwU}Q2yM&CaF=$_YXz!>$8W*Z6oSykD*DW{;w7zheu2SR=g_?k1Dq)b?2ea&xSRRhOli#e&U zIDamWW})}oGtV5?JH_PeM_TfcAx0Q*^2seJyNS0Pu`c95d3LVA66*Iz-?%Q~Ecj`u zR4wPj#Vmw7wN^4Oe5$6B&Fb3N#+X@rsXX}HU8~U3(S=v-uA!!Gc2FR9!wxA2pRqQ=3 z-m7_D(jky@_Y>GIW|*8vjM-f$@3cXfO9`AmCQA>K)C4WxN>`uhJ19gB6X=>Vq=gjT zincVjcbmV51XY4zgjX!|9lX`|k5~;d$VmLm9D(mqu`a9OcHO6cq>B9!MP{EAz zlcZ`NJ#Uf8{H2cdNr{e2B$rxN!X8q!zN4ruv-&BoJHBBzo3)i!@xM zur~-@0omM9!I?Zx?{JQpsk++lxL+uXG>G||z2s1hJUSw*)lkIvE`?k-PS5{-@2MVD z;Zz~ic?yRoye!pYTC4G6Ep@EALSS` zEc3N2xGR~Y%HneG#2l0ko()t8>3HMSyLr(z5u!RGikK7p0)!N4?;QfS_@!~6x&Z;Jk(6#q|4cl#`T~=tNBhcTJV}L5+IG2xQ&Z0 z(Y4F}UsG2B)zp`w0{P;7jdq>yp zp{uQ)RXM@Y5FQO?KBVZ8GN;`WIrI7YNF%kBMgT#shY&sVHrtgV)9vDECe@OL5k+ng zsa=Aa?(!Dx_xZhRMcvGR3G76Q%qzGzu&-85@j=)u(A(i_j~=D(#J9?4AE|?d+|d*l zd^{e$c}s~*$@06G5PJSJST=xa_(>I) z=YUou__SBw2WnATB`82HQzW-)iF5@+m)!QWcI9IH%JEm;Iiqg$B@97O z=}KY`uJTj^Sx{3B{0cLPv9^=GEU=Z38qS0JCzI+eUYmNKWsznYZZ9xQ!k-ZW1H;le zCw`my1(C*v2qb-3-~6FGQ#++SPLjw8`{tH!KCHi~;?HAY`qMIm+h@yo=8qJBD3%+= z(c5yIAPw|NNXQ|?>v(Fv%%yPR==yf;-YX4YzJUwsuIhXCg4MjuJ1$|i}Eh7px8f+>=ES#71b9ZpRC&wgTqH+9u zJ(F^z(06q8u$(ItU?^(9N+qP}dpBj#GVZ`{Q!#^;u^Wsoj@=%sT8u(QS42+EqjeOy zaFFh=$fa{DD|L|Ae+%;#Xs&T(vS8o5gnQ@26IwykZD7KM8#h|^WYIF`uxNAQ;&Wkm zv%!cB6V1f_3)WY_Q@U2F^r&eGCh7!!04$2ms`^#|bm@X+arJ4z+0)f?Flvbu69wd# z{C5Lx_3KTRmSrt@z31y{G*S;DAyBbBj9qKBMj0UbfnM)180metsnq!%sNwOq=jYOT zvU-8=m7G8dshvS|t~-A?_htd4zKDbgdm%aBAPO81EA?a_9MkNBafOy`ZMuzb$muCH zvNAkf)Y(=?-&3wu_0nEI5;j&;NPD+$c$32odFy@KQrE_(!MzW1;XtuuNz@xq<^hEZ zW)$hW9f>avf^NJH6uvP{KK2iNibzvZrQQQch*;O6AQ-u!eipc)r?m;a+Ht4X-$Zoji+GIu>jMhA{SygpFFoyut|5jM)OY>jNi+^5Ea ztS(m(FJVEOy37=j?wGDOS*cI2X1t(J&H9*;sn%E=>uZB%P?*+ZOYq}Ko6m9u_q^ih zw{>HV)<g`>(Z-{r2fxCU;B5=Jf%=ePDeyU4qs0#+B>#1G$xHoNCve{)--0Ds`6hTBVr z=$9CMm4AE#DN8w^9T1A#zrI2Ai*KN*vC)JRU|h->Z=RAd0)_e&Vo@u{n=B#C8NP+n zDeJ*qGcwh%{*b`bZ48%iA;QQauFct!Rw#$H3ReGG$HRolAJ6v~;Ou1m(Z3Aqp}X=b6urshz$x&H#17Dv+XuIceoX zs-cv1we$4w@Rl$%Uqb1(F7XeE@fj@f2PFA()797t(x8@^ri^N-RH!rzM%mpEm1XY) zAx%f8ZsILa`~+n;#BqD{7fs1pu#0c0izqT%KIG#wy0*Xu9s|7E^e%Y*^AT@%lH)fs zjcVFS1p$tlaCX|Bf}v6Y z1Lmf0QNaaj4#gUkrjtcV0xixVVq4+AdPxe?`LO$v90r=dv1w;Z36XdjV~zu_Zxq0t z?RLo#R?%9fyO_AKOIQ|`ak-GEVAWi&NjviWo|+`N`t%2^C2+)PF*%ZDUwzw>TZ?t! z-RxVI?%XRhpOx;?YYtR@p4KY#$3D({`LN$2sY2O$oD7qx7^E&)>B;`sVvo1pS;CmY2<#+603d7;a8}(V7zaAx6D3Om{{stKMC%GJ3Z& z>O3&exLH5#jV%V!;#t)539q&>>*YC`z1C_I3;=XZlc=@wMLP&_xaxhGvrAm~ahLbZ zO{Nj$C;;5em~Y5zys4HPousC;f0t|@m$X$sBQmmWM0j;LTBvDQ({wyXa%Ze@Z;~0t z$79=h+$Y@|d$6iWDAbf(%V`&TbT&{y1XH_oQ$^2&BIVH}VJbwOonOLqWPWvDzk7k< zjNxIdsg?ZI`va*b?6Vs3gWGFA-aLq7f8*~z!ZphT5(jCd%v4Q1=}>=|Ki?XV!sSFa)(3|2?qi8ey2PDU-}BsA);k@ZIE0HIw+bNfH`=ii$)HScyV*?j%I z`&|_od>Pe8UkWLl3tDbYDp){xMW_?r;I+7@jBFG`S1a5ve92s39w?w=XMcfj20k&< zrp_>>@Hm-Z%6|w!3qA;J&W+F=h;yd!z`bCCu_3fSN@~RoBANkB8C}1xF^5%(esJQ_ zSyB#Wi*lH*vL$VHq0e^DEhl8QX{AWq(vcOi8tvK66mcaHm3>#?iXatNGwoqn8z1px zs*IWk`8%Z1mA#{4VO=}5?7?VV+5AfjMke~N4vWr~&c4#J)`@wgWvv#RF9c_D%8t*r zQ`@rkMsNg-^SKNpI&g=ZP^#rnRy#HCVOypS&chZW&4rMZ%VpB-D7zoEY%%9y=g9Ta z(Y%*MxxaU)W6P|W*0OHdvFDDf(bSCr&2(v8TgWo1AcM8IwE0ZEov8-)W*KU)me1+* z5Jyhcgjrzsf?)fA51jnFrG|+tvKkdo{fw5d>r{SH0ej*zbs(0{ zxMo?cO4jN&Kc_Ty$@|nDZV~TRCLco6h;gm&u$3CosVoq~ABfI4PjimHpkX53-_I*0Y{WYof0^~9$sV(B}qBO|`G!;t(3Id@)_qP!1v zjS4KICXYf*T%w@UBRQvRiDY*C$PkWrensyRmbs_b>E!a|q8|jSi^YS%%GqMcs+)_( znR=NTJ)TZck&Mm?s-^?Nj;L%7*+a=jN49R1-Iy~VdQfy>btbPv4&Z_hfTc#%=v=}3 zmM$$Kh%zu~1K)Q3#Hb>(QICi_1+#SvU-66}?LD)l$$Fj(pv|G=e@ z#p84E+<8o;NaM2f>Y>h*;nLV`t3U6(f#JR{YzuZrOD=oLh@tN%s5iWIZnD)w3xh zWN`T`26?CS&h=hLGFut?(rs0-cg|+@=%txN&Yu`cBpZqq96I40 zI(kti!y%0n9gKCheF{N0mz`Zu*&0c)clDO`feTgmXV>u`N6?aO3eH15x|N z^7Iv8S`ugS3c@3K)NF{mtVG#al;O$DPCtnaE2gy7+b|R11s3TG&1$e#?*o%VyuSzZ`!p&g-k9a=Lp6PKIUU7#DC!GnrY6 zYpkPQ7uCKCPEHCwm~tJrw~d&VwM0-s^!UQY#-`l#%&c|Ug-q+KV(r#Jnn-u4xaf!$ zbCb&G$VXrsU7X=n$$#d_A5IQ5%z$OXs1h;m(>$!>F-lZ-FMAzBOEKaOv$Yu~Er_oA z_m$jp4f)QmW{N{$o$HLpGjjts)f zC6+xYdJs0!q*Ey07cAM_RI(&yjd~{T8mL_%HHCX^3nxA%q1y<8&W~$1qWUwasRI|4tRWc~S1VACMM=wY*r|^bYDFa_sHHR8 zJl{?pj%v3{lvLH#Rk^Ot;ej?NpEI90=T$7rODswXic<=Pk1ecih@a2KvJHs>&4~)klM1pEc*2|Np_ksS^tB+l zuC!!hlB?kfg}wBO$FFR)$Z``kOoKH{3zH1m`Af}M-!2K2!^VIjP*qk7bxf7k-dWFg z+UzWKX0r)EC-fs;m+B^GXQ0i}@pJf2F;WF@xHA_#=GNI}W zRhQ~c(v?S&A?3_gCtF1p`sRf)Pm!^ovtk}Q97@r?4Eg;)p$@e;jb|_(pXXIn-(4er zSbFPQ>9X^SYqN3>N2pdp&h~(!j-aCVg)!eR=gGaus!8(`78-gBHld3@I#2W8pq~}2 z$~HVUn4EPyK0|Uo-II%?mDaZ0XvaQVQ2C_ghfb$Dd@0Qi+goh)ZL$2Qj3$ee%li>S zuTekxf>6xgxVV4QT0B&X#2Jpv)K#jZMI*m^TUHp=J%RscTlq&sIK1@_E`&gS(zbEY zU7EC5On&H7bIGDCGAmUax-);1r>d+Ky%ZRK&YQ_+4-=A#$ZN1hEgtdFRUxnYlSdMJ z%#x#YVg2{X&4G>RfDeKEW6ySUG<9-ty*a>N^S8`JXA|I(p{9Io!fbgWMdG9P2>@@j zpmX&v@fUwoMuJHVX=%NG=#wr>gR~)UIIU#hstOMc&L35s*gMO3M^(p}$Asf2Ct}%9zfvN5$M`j8bYiF2erxR4*X{%= zh8(l#e#Tt5LiHGwW%{k0zG}4=V^S5W!Q|Z#bmx@UvypOZnq(XbPgW2I3L)o0_UEe9 zEzS`Yq&8ve8yX-AjC!MAM?%Qc>-dO?yFgg>t-YW|?XNyl9_{9Ua^C$AI+E@Ur^pmx zVM~goSwoU=&zN8dyfZh*kVevNe@{qt?W{c>3YhX03LDX|rMi^jh(HjnHoGKsc{m1v zbAOZRk&$OAuK>;~La|fR*?`I2pG!i#^LTvZXw2|CKhQc@`ooI$dL(D6xzThdVpetR zgqx9>8+QA`9{f8b`<6szgZoW;nNP&fCybZ+Zhs$n^lJT@0Pm#flBZoPyQwQq*t)h% zKl8uc2xl9aJsh}W)m)-Ks&9VH{;6kf&sVjVC^wv~muPF;t*NT8m~NnE!QQ*D_Qwa} zT!``jU2gdKx2kg061vb%{_+|2gzh<~cDj7dui$(LJA>4ObNb(8dH(Vpfe|s2OcfG6 z@){A%1^O2DzgO7PgJ?-$3?Ck09Wu^Dr6Ao=X%`pLl*=wwWWPBYWY4p|g4Nv=tp`-+ zUeXME0Uak&L3^QxwVR%6cSPFLTqbz%Feu2t5A3gdpDyFc?kg|38q+Vhudv0CJNylB zt|y$6UFQ78#Q*#nB96oTfs#Q?VIAF;h$uhWM?DrA%Dx6q70xP#9H&>MtX_GEa`x(N z0h=KZw&t}-l^MxB)H+!F3TVlVb4ayv;XNun{`CUYWG`+~+CR&2^g?j->PH8+WM?Qd zrg)N^_smh#>!|vlb)Tpe{F~aGo5&Xzni4eC6*!L%(lN;yS*Fi}_9ICbpm5e`;-~sq z6+FP&^WSMf9KgS1OKJiHoEC$=|Fb3uY`Gi*0fYVju1OGJO`40~nQ|pVIz8BTsSr#s z%>`SLVTpG~s$Zzx{QT1u(@QMg^Lbd@;xm@x0c3dbh}(jF;e!-jq4Qz@J0=YddthMR z0b8ez`)^kPful72%*-Iqlbu$m@6286=$$u(4_>H$_JC3zVM$ub_Y^!faYov0%wlvU zm-PF$2W1quCsBNc)Ch82e@vRC4J5qS1r96(ZG5ZFwcffg>%Gr>oALDQaCX#G*UR%N z>Bseg_M*3Vu410acA^@OYt-ou0vN}L-y~8F>UYL8GAdbrumJ1;!guQbVI`0Ad@whk;6==`T>Q^+y!~2jl&$b)p3W1IRY3_L3e0kV(GFmibfN{cp1*o@UCk;o;nai=)O!6Oz9ItFqJE& zHk4KGPO{Y_Zo5Q5R}p&I;T3jnBBR=^>kA8)T`1^(el8P$rmWY-e)&Twqn+4ezM76T zUhS57z!DOq2Ro2j7np%yGtd*8&`wJi#fa2#K^JvHaOsls8{sdWpcT8T`wbm{t+HiswuflnpRq!(e7?f3+qnuoM0~i)7 zkqBJezn>u*&2({X!}O*Ovj*I>IjOC&7cha~-m>YL!VCUM%2i0%*pXZ9ct@z}wpM~h z$As%QzrFt>z8$o3((N`HX$zaNj1k_~cKO=v)S&VJ$_AwZ}hE~_QMgc20=&JtH z$`IdZ=)y^TSBF~s=6Dy0MBnqbX%)@1beG35>DLQCFL_uK+$tdUjm-1bHilIddn2_& z5TiBEr6YOHP2)s&H+BV5g0&@!oEt+;J$}ZwvyPiAM3e+f$Wi86Gy64`DJs zH^YG+6TGYk?iO|S_^h5KHI6Fg=+Ck<6biHk6R3NSJFAeA8-Mk2NfK%Xi8xg+7s=tC zZK?5??^)Z})U>c?#yJ^`HuqYfvt`V0`F-pUFqPICbZiYpbE=*sD5ka_Xf%m}wYnX* z)$Gr7<0C2>qg(GgbP_mYV7)z+@(_zIP39Nxgre*#<3m?k_0IQERj@o44(OHWae|K1 z1+G_`MfK$s9E!sFJxCDniGwB;VA={PFN%Q7HgQxRXY@#juLKEsNVs{!3u|xmv0U0Ot!+J)qnmp;J1{# zQGi(&b!jrXo4VxaGFpxa_7oYAZp&}M)0~nw!C$WxQEg^Wk>#N`hN$d6{}ze=i#|ZC zEk@w|ykJKmJB=RZI6`CuQ4UiH)B3B}b}aLuM1ilKZzEi_jwHssh<@*ZobJQ;JDY{N zVGXJ;5Us!jEt(S@Eh|a-lz#F)d#luiG>%?kE+_RsdJ&EXsPu=D{`8t=f2$Eb4h;3i zHk%9&EM=7egUCdM=JIBzqU?O`cdc@*HQ!a7w!gCLd7#V|lSLFLV!hD(R`zCJloAxFMdf zlZ_CftMK>x4&SpLsbr=~kYzn#iY4|R_DKT5nq!Ha2fzXR3=UCX=b3KXbbPLM$j_;F z2VF<__&>M2-@e+P44f=Q`N1#fJE@EI-dzz)gNi)xCsKaDR zH7m#G72a^FFNq#iXjO_Uh^y@wta96pgxA>Pg}V9rqpukGxSj%xnq4z(HIZvc{5~G1 zN>e~c69)(R)jDfv&b9Vz9P!HaqAp~vfg+3*y^AiCUl~Is?8~Z+Q2u)+Sg=2G7agiV zONU$4G=0gWLY-1U*XNprqc_-M!F0z_1s4zUg)Z)Ac7$KK4?{myPg&IZz1ejNisPFb zYYUY%@{VJtaFwiHHsjP9t_w!mP&`DJx%#-Is2uh|k+Wn$>)1H3{H(%??&~RK{B$6D8M?l-EHc>LD(iQ)tfnG5 z1Whee*&`~-itctGu(RBn4yY16QBkFU!bmEcMoPz1t`a_Qi~~`T$AEAYL*_RZ%3X8t z*x8l38$Y4X$a%A*cH!ShF|G~dC7W%vaxxI*=e<2TLxp@%b1@a8M~kZx*rPWlCy7s2 z3I8V7-8c_6>x=Lt8lOJM&%Gi3R(7K{UryQRsQzPJ={bN2hQ+SPVHmmcGmmB87SAZB0Jnl4d(k3;QTwuo7NO6)LY zMtGn|;07yw!mwV8q)P66WTr{!%XS%HSV(1&x@{3CQ)g9TmNcHIUN&*SzV7#j4cUc4b2-6&zK zDlu6p*Xm#V?bf%TiG+QTuh-`Mf@P8<@m64bN6^`-gF}l`l2b~G>Ajgjmm$%?MJZaW z7zHL41q%@C{luU?_*W=l!Nr=l?$#T4pC+WumD%ntL83PrCIn*0%?5_e&L2yYQ!=V7 zC>c6Chq@);VV8XnvRo;C1Yk2IAuP#$s#f()P7dD1`se}zdEbo79bNhki+EZ|wDt}5 z!GIciX|R7agnVZNl>l%ZBoB34Wykg-kE3h&d;8n?=L^ zu|DAfKe)Uh1ZTg6#S(lZsH;V&Mg5VMIqsC39vyv7K5x9G1L(o=?)&$~ z8%}yy#Lz z4Jy!w@>%wq2mdPGFDWl6h**m56&yC!oLR}>1UVk2G|l5UtIzzRxX{VC$~TwJc)Ej2 z)b7Gy%hJY|3~M<6odz+x(3d zDh=NtNCu1m?4}F0%s)}Vh^dLbLVd&TBi$`EWV3a{hEm<_hILNgS>gA{P%aWR2}QcF zeE%%;XK?lI#P8}r2C8`WEdJa`;st#*>4Uo|xhpj76Qa`|Q5lF{WJSZ-{-(_&ia0oS zG+7_%ZYud8laBt+!=L-ayNDww#Vw2e?f2)}+`DB@%i3v`FhbXxL%x>TnMY5?9!FWe ze8~CQh3$vA>O>V;;FM`v`=ljA^tdhqlP^E5r7n)*0*g;DvDm*!{RYtMfBH@b_!oV@ z{L}oR@1lS7t%$Hb0gTrF)pv&5{8Sv90s41Fo^Xa%D_@ghbF4AJYqSz09*r0A#EaBw_p(wauUNQe|urD9p54Heg6PaMP z8y{(8l=UlN3jIr{hsIYJ4LtY#M}~9L>Tk~HLd%W!O0HPPF8IHwY$Rcuo>YN zObR$KQ&1c{yI7};6yhK^PI-u7W@Wb)vqp#q=!v_2J(r|c<$SY04r%q|&r!DfN};Eu zjec|8PTiff-u&%Y?^18b;&P(vb4~b;ZNmxojL}@dUZebl&I#7oAA-ia(D9e5g#SU$ z2KX1~ya2sGFZ>7k8-?H%V3hDL^c(;>@S<#?uW<>nD zrXI@jRN00WuhDT9)2!I!tI~{NdDWga-~DF@xdMZ;Vi6xX#UXp0TZO z;+FA8ePT+O;!&|sErn#WSeS+dmWT8BeAJ=fo$jQ$ZqH4|bO2w4>dot@uH~R_i)(*J zwV5V36VG8+;NR3o_6x!Q2>+8K7vNvy5CZ5$j+}qYvexV2CB7r|Upew#rU3yQKUQ>! z8@4gKBC_vs4iT4p$mHZA`7)hEtdhM5U7r`sx5z)1#zb6;vUO`_BV{s);p`Gh{b5Bc z&b82Rm_iwg6!$WQxyU(Iv=E?o^)oFNLy^HL9B90B!B4P15q7O-u3sK58?3zPZhYun zay{OjHg2rk9(lleXnP#kfhEavCrc2wImUv>Z{WQqTi$dgW&QT*8w~*SKVk9#{zZ`Y z01*I`@z0l{;ka1%x>{Xl}7FXRnlVRKmO5CZr%6Dd!K1u|7V}y{S+7a3G{fbQaz59Wa35 zKcvL~|AJHopckZx{~)dLQmX()=Kmrs0ZeC52vd|5ggCa`Sr9ZPB1!dapYv^#oh7F4 zti)dfoYr~~90I+q@)E_LwHP!u{7ENf{SAUMhDJt4K2|rgFOP~jIBxE`#ID}wo`O64 zw;yrKjPmpFemM4iu0i?ad2UPoIimP~C)-j0zzehw0KGsVU(M|DMkdGfSl~L9RJ;ki48E;6q5A zBtJW;+L}1I8afz*-YY3czj^QIXl(t(%Gluz2Q#alBoi6%HqZx21&MMogCG9~@l3#A literal 0 HcmV?d00001 From 8925caf98874e8ef9690b1034598c07822d5e3e3 Mon Sep 17 00:00:00 2001 From: Matt Vollmer Date: Wed, 4 Feb 2026 14:20:20 +0000 Subject: [PATCH 30/44] Update subheadline text --- internal/site/app/(public)/home/page.tsx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/internal/site/app/(public)/home/page.tsx b/internal/site/app/(public)/home/page.tsx index a2f78e61..dd8b2ca3 100644 --- a/internal/site/app/(public)/home/page.tsx +++ b/internal/site/app/(public)/home/page.tsx @@ -719,9 +719,7 @@ export default function Home() { Your team's deep code research partner, in Slack

- Chat with Blink to turn your ideas into fully functional Slack - chatbots, tooled, deployed, and ready to /invite to your channels - — built on open source. + Blink is a self-hosted platform for deploying custom agents, and ships with a powerful coding agent that includes GitHub and Slack tools out of the box.

{/* View Docs CTA */} From 7c5e5aaa209d56bbcb2b5ee78ba7931eff4b6947 Mon Sep 17 00:00:00 2001 From: Matt Vollmer Date: Wed, 4 Feb 2026 14:23:13 +0000 Subject: [PATCH 31/44] Remove login button and mobile navigation, keep GitHub/docs icons visible on mobile --- internal/site/app/(public)/layout.tsx | 97 +-------------------------- 1 file changed, 2 insertions(+), 95 deletions(-) diff --git a/internal/site/app/(public)/layout.tsx b/internal/site/app/(public)/layout.tsx index 316e52d7..074d82f4 100644 --- a/internal/site/app/(public)/layout.tsx +++ b/internal/site/app/(public)/layout.tsx @@ -157,38 +157,8 @@ export default function Layout({ children }: { children: ReactNode }) { {/*
*/} - {/* Mobile menu button */} - - - {/* Auth buttons */} -
+ {/* GitHub and Docs icons - visible on all viewports */} +
- - -
- {/* Mobile Navigation Menu */} - {isMobileMenuOpen && ( -
-
- - -
- setIsMobileMenuOpen(false)} - > - - -
-
-
- )} -
{children}
From 77eadfb6abbb2cf7ac581c834edec76092fb15c9 Mon Sep 17 00:00:00 2001 From: Matt Vollmer Date: Wed, 4 Feb 2026 14:30:07 +0000 Subject: [PATCH 32/44] Move masthead content up 50px --- internal/site/app/(public)/home/page.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/site/app/(public)/home/page.tsx b/internal/site/app/(public)/home/page.tsx index dd8b2ca3..d058493b 100644 --- a/internal/site/app/(public)/home/page.tsx +++ b/internal/site/app/(public)/home/page.tsx @@ -700,7 +700,7 @@ export default function Home() { "radial-gradient(ellipse 1200px 800px at 50% 100%, rgba(14, 28, 58, 0.8) 0%, rgba(9, 11, 11, 0) 65%)", }} /> -
+
{/* Blink hop icon */}
Date: Wed, 4 Feb 2026 16:01:23 +0000 Subject: [PATCH 33/44] Remove dark/light mode toggle, set section to light mode by default --- internal/site/app/(public)/home/page.tsx | 309 ++++++----------------- 1 file changed, 84 insertions(+), 225 deletions(-) diff --git a/internal/site/app/(public)/home/page.tsx b/internal/site/app/(public)/home/page.tsx index d058493b..d9413a7f 100644 --- a/internal/site/app/(public)/home/page.tsx +++ b/internal/site/app/(public)/home/page.tsx @@ -10,10 +10,8 @@ import { ExternalLink, GitBranch, Key, - Moon, Play, RotateCw, - Sun, X, Zap, } from "lucide-react"; @@ -45,7 +43,6 @@ export default function Home() { const [thirdTerminalPrompt, setThirdTerminalPrompt] = useState("laptop slackbot % "); const thirdTerminalAnimationStarted = useRef(false); - const [isDarkMode, setIsDarkMode] = useState(false); const [isVideoModalOpen, setIsVideoModalOpen] = useState(false); const [isMounted, setIsMounted] = useState(false); const [isCommandMenuOpen, setIsCommandMenuOpen] = useState(false); @@ -113,27 +110,6 @@ export default function Home() { return () => clearTimeout(timer); }, []); - // Load dark mode preference from localStorage on mount, or default to dark mode - useEffect(() => { - if (typeof window !== "undefined") { - const savedMode = localStorage.getItem("blinkDarkMode"); - if (savedMode !== null) { - // User has a saved preference - setIsDarkMode(savedMode === "true"); - } else { - // No saved preference, default to dark mode - setIsDarkMode(true); - } - } - }, []); - - // Save dark mode preference to localStorage whenever it changes - useEffect(() => { - if (typeof window !== "undefined") { - localStorage.setItem("blinkDarkMode", isDarkMode.toString()); - } - }, [isDarkMode]); - // Handle escape key to close video modal and lock body scroll useEffect(() => { const handleEscape = (e: KeyboardEvent) => { @@ -767,9 +743,7 @@ export default function Home() { {/* Section 1: Two-column layout with animated line */}
{/* Shimmer divider line at top of section */}
@@ -783,31 +757,10 @@ export default function Home() { />
- {/* Dark/Light Mode Toggle */} - - {/* Vertical line continuing from above */} {lineAnimated && (
)} @@ -816,23 +769,13 @@ export default function Home() {
-

+

You ask. Blink builds.

-

+

Blink creates, configures, and deploys your agents. All from your terminal.

@@ -851,23 +794,17 @@ export default function Home() {
@@ -877,7 +814,7 @@ export default function Home() {
Terminal — /agents/slackbot @@ -885,9 +822,7 @@ export default function Home() {
{terminalPrompt.includes(" blink init") ? ( @@ -918,7 +853,7 @@ export default function Home() {
{line.includes("blink dev") ? ( @@ -939,9 +874,7 @@ export default function Home() {
@@ -950,16 +883,14 @@ export default function Home() {

blink init @@ -971,9 +902,7 @@ export default function Home() { setTimeout(() => setCopiedCommand1(false), 2000); }} className={`transition-colors ${ - isDarkMode - ? "text-gray-500 hover:text-gray-300" - : "text-gray-400 hover:text-gray-600" + "text-gray-400 hover:text-gray-600" }`} aria-label="Copy command" > @@ -986,7 +915,7 @@ export default function Home() {

Blink sets up everything your agent needs to deploy, from @@ -999,9 +928,7 @@ export default function Home() { target="_blank" rel="noopener noreferrer" className={`inline-flex items-center gap-1.5 text-base underline transition-colors duration-200 ${ - isDarkMode - ? "text-white hover:text-gray-400" - : "text-black hover:text-gray-600" + "text-black hover:text-gray-600" }`} > View docs @@ -1023,23 +950,17 @@ export default function Home() {

@@ -1049,7 +970,7 @@ export default function Home() {
Terminal — /agents/slackbot @@ -1057,9 +978,7 @@ export default function Home() {
{/* Messages area - scrollable */} @@ -1077,7 +996,7 @@ export default function Home() { >
@@ -1085,7 +1004,7 @@ export default function Home() { development
You're in edit mode! Describe what you want your agent to do and Blink will make it happen. @@ -1096,13 +1015,11 @@ export default function Home() { <> {/* User message */}
Give my agent tools to research GitHub @@ -1114,7 +1031,7 @@ export default function Home() { {secondTerminalResponse && (
Blink:
@@ -1128,20 +1045,16 @@ export default function Home() { {/* Input field - fixed at bottom */}
{secondTerminalInput.length > 0 ? ( @@ -1158,9 +1071,7 @@ export default function Home() {
{/* Footer text */}
@@ -1186,9 +1097,7 @@ export default function Home() {
@@ -1197,16 +1106,14 @@ export default function Home() {

blink dev @@ -1218,9 +1125,7 @@ export default function Home() { setTimeout(() => setCopiedCommand2(false), 2000); }} className={`transition-colors ${ - isDarkMode - ? "text-gray-500 hover:text-gray-300" - : "text-gray-400 hover:text-gray-600" + "text-gray-400 hover:text-gray-600" }`} aria-label="Copy command" > @@ -1233,7 +1138,7 @@ export default function Home() {

Chat with Blink in your terminal to shape your agent's tools @@ -1246,9 +1151,7 @@ export default function Home() { target="_blank" rel="noopener noreferrer" className={`inline-flex items-center gap-1.5 text-base underline transition-colors duration-200 ${ - isDarkMode - ? "text-white hover:text-gray-400" - : "text-black hover:text-gray-600" + "text-black hover:text-gray-600" }`} > View docs @@ -1270,23 +1173,17 @@ export default function Home() {

@@ -1296,7 +1193,7 @@ export default function Home() {
Terminal — /agents/slackbot @@ -1304,9 +1201,7 @@ export default function Home() {
{thirdTerminalPrompt.includes("blink deploy") ? ( @@ -1337,7 +1232,7 @@ export default function Home() {
{line.includes("Deployment successful") ? ( @@ -1360,9 +1255,7 @@ export default function Home() {
@@ -1371,16 +1264,14 @@ export default function Home() {

blink deploy @@ -1392,9 +1283,7 @@ export default function Home() { setTimeout(() => setCopiedCommand3(false), 2000); }} className={`transition-colors ${ - isDarkMode - ? "text-gray-500 hover:text-gray-300" - : "text-gray-400 hover:text-gray-600" + "text-gray-400 hover:text-gray-600" }`} aria-label="Copy command" > @@ -1407,7 +1296,7 @@ export default function Home() {

Deploy to Blink Cloud to make your agent accessible from @@ -1419,9 +1308,7 @@ export default function Home() { target="_blank" rel="noopener noreferrer" className={`inline-flex items-center gap-1.5 text-base underline transition-colors duration-200 ${ - isDarkMode - ? "text-white hover:text-gray-400" - : "text-black hover:text-gray-600" + "text-black hover:text-gray-600" }`} > View docs @@ -1441,18 +1328,14 @@ export default function Home() { > {/* Full-width container with animated border - NO padding on container */}

{/* Animated border segments */} {visibleSections.has(6) && ( <> {/* Top-left border (from center) */}
{/* Top-right border (from center) */}
{/* Left border */}
{/* Right border */}
{/* Bottom-left border */}
{/* Bottom-right border */}

Add your agent to Slack

Your deployed agent is instantly available as a Slack @@ -1567,19 +1440,19 @@ export default function Home() { {/* Three-row staggered table */} {/* Row 1: Text before image on mobile, image left on desktop */}

Democratize information access

Ship agents that connect directly to your business systems, with or without MCP, so everyone can find the @@ -1601,19 +1474,19 @@ export default function Home() { {/* Row 2: Text before image on mobile, text left on desktop */}

Stay informed, stay inspired

Slack agents can do more than automate work. Build ones that keep your team connected with the latest @@ -1634,19 +1507,19 @@ export default function Home() { {/* Row 3: Text before image on mobile, image left on desktop */}

Supplement your teams

Give agents tools that let them work alongside your team, handling the backlog tasks and noisy requests @@ -1824,9 +1697,7 @@ export default function Home() { {/* FAQ Section */}

{/* Shimmer divider line at top of section */}
@@ -1843,18 +1714,14 @@ export default function Home() { {/* Centered vertical line */}
{/* Elegant FAQ Accordion */}
{[ @@ -1889,30 +1756,24 @@ export default function Home() { className={`${ index === 0 ? "" - : isDarkMode - ? "border-t border-neutral-800" - : "border-t border-gray-200" + : "border-t border-gray-200" }`} >
{faq.question === @@ -1938,9 +1799,7 @@ export default function Home() { target="_blank" rel="noopener noreferrer" className={`underline ${ - isDarkMode - ? "text-white hover:text-gray-300" - : "text-gray-900 hover:text-black" + "text-gray-900 hover:text-black" }`} > blink.so/signup From f1249f1ab140ac7e3af69729b6f14bfa24c48641 Mon Sep 17 00:00:00 2001 From: Matt Vollmer Date: Wed, 4 Feb 2026 19:32:08 +0000 Subject: [PATCH 34/44] Add Visit Github link below View Docs button and make button fully rounded --- internal/site/app/(public)/home/page.tsx | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/internal/site/app/(public)/home/page.tsx b/internal/site/app/(public)/home/page.tsx index d9413a7f..3215d0ec 100644 --- a/internal/site/app/(public)/home/page.tsx +++ b/internal/site/app/(public)/home/page.tsx @@ -706,18 +706,26 @@ export default function Home() { : "opacity-0 translate-y-4" }`} > -
+ {/* Animated line extending down - layered behind button */} From fbd5c6a9b0cd3e6af34258c065294e70c8ab0670 Mon Sep 17 00:00:00 2001 From: Matt Vollmer Date: Wed, 4 Feb 2026 19:33:26 +0000 Subject: [PATCH 35/44] Fix capitalization: Github -> GitHub --- internal/site/app/(public)/home/page.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/site/app/(public)/home/page.tsx b/internal/site/app/(public)/home/page.tsx index 3215d0ec..0a51baed 100644 --- a/internal/site/app/(public)/home/page.tsx +++ b/internal/site/app/(public)/home/page.tsx @@ -724,7 +724,7 @@ export default function Home() { rel="noopener noreferrer" className="text-gray-400 hover:text-gray-200 transition-colors duration-200 text-sm underline underline-offset-4" > - Visit Github + Visit GitHub
From cc7070d2478254c6140b91a2310a03d2cd2e27d5 Mon Sep 17 00:00:00 2001 From: Matt Vollmer Date: Thu, 5 Feb 2026 02:50:48 +0000 Subject: [PATCH 36/44] Simplify 'You ask. Blink builds' section and update masthead CTAs - Remove terminal demos and expandable animations from section - Keep only headline, subheadline, and video - Match bottom padding below video with top spacing - Update button text: 'View Docs' -> 'View Documentation' - Change GitHub link to 'See it in action' anchor link - Force YouTube video to load in HD --- internal/site/app/(public)/home/page.tsx | 776 +---------------------- 1 file changed, 12 insertions(+), 764 deletions(-) diff --git a/internal/site/app/(public)/home/page.tsx b/internal/site/app/(public)/home/page.tsx index 0a51baed..8c020889 100644 --- a/internal/site/app/(public)/home/page.tsx +++ b/internal/site/app/(public)/home/page.tsx @@ -714,17 +714,15 @@ export default function Home() { className="group flex items-center gap-3 px-8 py-3 bg-white/5 border border-white/10 rounded-full hover:bg-white/10 hover:border-white/20 hover:px-9 transition-all duration-300 shadow-[0_20px_40px_-10px_rgba(0,0,0,0.3)]" > - View Docs + View Documentation - Visit GitHub + See it in action
@@ -789,765 +787,15 @@ export default function Home() {

-
- {/* Row 1: Create your agent */} -
{ - sectionRefs.current[0] = el; - }} - data-section="0" - className={`grid grid-cols-1 lg:grid-cols-[1fr_auto_1fr] gap-8 lg:gap-16 items-center transition-all duration-700 ease-out ${visibleSections.has(0) ? "opacity-100 translate-y-0" : "opacity-0 translate-y-8"}`} - > - {/* Code Block */} -
-
-
-
-
-
-
-
- - Terminal — /agents/slackbot - - -
-
-
- {terminalPrompt.includes(" blink init") ? ( - <> - laptop slackbot %{" "} - blink init - - ) : ( - terminalPrompt - )} -
- {terminalLines.map((line, index) => ( -
- {line.includes("blink dev") ? ( - <> - {" "} - blink dev - - ) : ( - line || "\u00A0" - )} -
- ))} -
-
-
- - {/* Circle in the middle */} -
-
-
- - {/* Text Block */} -
-
-
-

- blink init -

- -
-

- Blink sets up everything your agent needs to deploy, from - project structure to configuration. In a few guided steps, - you'll create your agent's Slack app and manifest, ready to - build and launch. -

- - View docs - - -
-
-
- - {/* Row 2: Describe its capabilities */} -
{ - sectionRefs.current[3] = el; - }} - data-section="3" - className={`grid grid-cols-1 lg:grid-cols-[1fr_auto_1fr] gap-8 lg:gap-16 items-center transition-all duration-700 ease-out ${visibleSections.has(3) ? "opacity-100 translate-y-0" : "opacity-0 translate-y-8"}`} - > - {/* Code Block */} -
-
-
-
-
-
-
-
- - Terminal — /agents/slackbot - - -
-
- {/* Messages area - scrollable */} -
-
-
- blink■ agent - development -
-
- You're in edit mode! Describe what you want your agent - to do and Blink will make it happen. -
- - {/* Submitted messages */} - {secondTerminalSubmitted && ( - <> - {/* User message */} -
-
- Give my agent tools to research GitHub - repositories -
-
- - {/* Blink response */} - {secondTerminalResponse && ( -
-
Blink:
-
{secondTerminalResponse}
-
- )} - - )} -
-
- - {/* Input field - fixed at bottom */} -
-
-
- {secondTerminalInput.length > 0 ? ( - <> - {secondTerminalInput} - {secondTerminalInput.length < 56 && ( - - )} - - ) : secondTerminalSubmitted ? ( - - ) : null} -
-
- {/* Footer text */} -
-
- - mode:{" "} - - edit - - - - Ctrl+T: Switch to{" "} - run{" "} - mode - -
- Esc to interrupt -
-
-
-
-
- - {/* Circle in the middle */} -
-
-
- - {/* Text Block */} -
-
-
-

- blink dev -

- -
-

- Chat with Blink in your terminal to shape your agent's tools - and behavior. Quickly toggle between edit and run modes to - refine, test, and bring your agent to life, all in one - terminal. -

- - View docs - - -
-
-
- - {/* Row 3: Deploy for all to use */} -
{ - sectionRefs.current[4] = el; - }} - data-section="4" - className={`grid grid-cols-1 lg:grid-cols-[1fr_auto_1fr] gap-8 lg:gap-16 items-center transition-all duration-700 ease-out ${visibleSections.has(4) ? "opacity-100 translate-y-0" : "opacity-0 translate-y-8"}`} - > - {/* Code Block */} -
-
-
-
-
-
-
-
- - Terminal — /agents/slackbot - - -
-
-
- {thirdTerminalPrompt.includes("blink deploy") ? ( - <> - laptop slackbot %{" "} - blink deploy - - ) : ( - thirdTerminalPrompt - )} -
- {thirdTerminalLines.map((line, index) => ( -
- {line.includes("Deployment successful") ? ( - <> - - Deployment successful. - {" "} - All chats will use this deployment! - - ) : ( - line || "\u00A0" - )} -
- ))} -
-
-
- - {/* Circle in the middle */} -
-
-
- - {/* Text Block */} -
-
-
-

- blink deploy -

- -
-

- Deploy to Blink Cloud to make your agent accessible from - anywhere, including Slack. During early access, deploying - agents is free. -

- - View docs - - -
-
-
- - {/* Animated container with line split */} -
{ - sectionRefs.current[6] = el; - }} - data-section="6" - className="relative flex flex-col items-center mt-12" - > - {/* Full-width container with animated border - NO padding on container */} -
- {/* Animated border segments */} - {visibleSections.has(6) && ( - <> - {/* Top-left border (from center) */} -
- {/* Top-right border (from center) */} -
- {/* Left border */} -
- {/* Right border */} -
- {/* Bottom-left border */} -
- {/* Bottom-right border */} -
- - )} - - {/* Header Content - with padding - fades in with border */} -
-

- Add your agent to Slack -

-

- Your deployed agent is instantly available as a Slack - chatbot, ready to work with your team in any channel you add - it to. -

-
- - {/* YouTube Video and Three-row table - animates in after border completes */} -
- {/* YouTube Video Embed - Hidden on mobile */} -
-
-