-
-
The problem
-
Your important emails hide between newsletters.
-
You miss deadlines buried in threads. Tasks get lost across three different apps. Sound familiar?
-
+
+
+
The problem
+
Your important emails hide between newsletters.
+
You miss deadlines buried in threads. Tasks get lost across three different apps. Sound familiar?
+
+
-
-
The greeting
-
Every morning, your AI secretary is ready.
-
Open the app and it already knows what happened overnight — emails scanned, tasks prioritized, deadlines flagged.
-
+
+
+
The greeting
+
Every morning, your AI secretary is ready.
+
Open the app and it already knows what happened overnight — emails scanned, tasks prioritized, deadlines flagged.
+
+
-
-
The brief
-
Meeting notes sit in a doc you'll never open again.
-
Not here. Your daily brief is a clear, AI-generated summary of what matters today — tasks, follow-ups, and deadlines in one place.
-
+
+
+
The brief
+
Meeting notes sit in a doc you'll never open again.
+
Not here. Your daily brief is a clear, AI-generated summary of what matters today — tasks, follow-ups, and deadlines in one place.
+
+
-
-
The result
-
You don't need another tool.
You need a secretary.
-
Ask it anything. It understands your projects, your emails, your schedule — and it never leaves your device.
-
+
+
+
The result
+
You don't need another tool.
You need a secretary.
+
Ask it anything. It understands your projects, your emails, your schedule — and it never leaves your device.
+
+
@@ -1431,25 +1448,32 @@
const wtProgress = document.getElementById('wt-progress');
if (wtSection && wtSteps.length) {
- // Set first step active
- wtSteps[0].classList.add('active');
-
- // IntersectionObserver for step activation
+ // IntersectionObserver for step activation (observe pin wrappers)
+ const wtPins = document.querySelectorAll('.wt-step-pin');
+ const activeSteps = new Set();
const stepObserver = new IntersectionObserver((entries) => {
entries.forEach(entry => {
+ const stepEl = entry.target.querySelector('.wt-step');
+ const step = stepEl.getAttribute('data-step');
if (entry.isIntersecting) {
- const step = entry.target.getAttribute('data-step');
+ activeSteps.add(step);
wtSteps.forEach(s => s.classList.remove('active'));
- entry.target.classList.add('active');
+ stepEl.classList.add('active');
wtSection.setAttribute('data-step', step);
+ } else {
+ activeSteps.delete(step);
+ stepEl.classList.remove('active');
+ if (activeSteps.size === 0) {
+ wtSection.removeAttribute('data-step');
+ }
}
});
}, {
- rootMargin: '-40% 0px -40% 0px',
+ rootMargin: '-45% 0px -45% 0px',
threshold: 0,
});
- wtSteps.forEach(step => stepObserver.observe(step));
+ wtPins.forEach(pin => stepObserver.observe(pin));
// Scroll progress indicator
if (wtProgress) {