neoagent 2.4.1 → 2.4.2-beta.1

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.
@@ -0,0 +1,77 @@
1
+ /* NeoAgent landing v3 — interactions */
2
+ (function () {
3
+ 'use strict';
4
+ const reduced = matchMedia('(prefers-reduced-motion: reduce)').matches;
5
+
6
+ /* ---- nav scrolled ---- */
7
+ const nav = document.querySelector('.nav');
8
+ const onScroll = () => nav.classList.toggle('scrolled', window.scrollY > 12);
9
+ window.addEventListener('scroll', onScroll, { passive: true });
10
+ onScroll();
11
+
12
+ /* ---- mobile menu ---- */
13
+ const toggle = document.querySelector('.nav-toggle');
14
+ if (toggle) {
15
+ toggle.addEventListener('click', () => nav.classList.toggle('open'));
16
+ nav.querySelectorAll('.mobile-menu a').forEach((a) =>
17
+ a.addEventListener('click', () => nav.classList.remove('open'))
18
+ );
19
+ }
20
+
21
+ /* ---- scroll reveals (rect-based) ---- */
22
+ const reveals = Array.from(document.querySelectorAll('.reveal'));
23
+ let pending = reveals.slice();
24
+ const check = () => {
25
+ const vh = window.innerHeight;
26
+ pending = pending.filter((el) => {
27
+ const r = el.getBoundingClientRect();
28
+ if (r.top < vh * 0.9 && r.bottom > 0) { el.classList.add('in'); return false; }
29
+ return true;
30
+ });
31
+ if (!pending.length) window.removeEventListener('scroll', onRev);
32
+ };
33
+ let tick = false;
34
+ const onRev = () => { if (tick) return; tick = true; requestAnimationFrame(() => { check(); tick = false; }); };
35
+ window.addEventListener('scroll', onRev, { passive: true });
36
+ window.addEventListener('resize', onRev, { passive: true });
37
+ requestAnimationFrame(check);
38
+ // safety nets: all reveals + hero animated elements
39
+ setTimeout(() => {
40
+ reveals.forEach((el) => el.classList.add('in'));
41
+ const heroEls = document.querySelectorAll('.hero h1 .w, .hero .pill, .hero .lede, .hero-actions, .hero-note');
42
+ heroEls.forEach((el) => { el.style.animation = 'none'; el.style.opacity = '1'; el.style.transform = 'none'; el.style.filter = 'none'; });
43
+ }, 1200);
44
+
45
+ /* ---- scroll progress ---- */
46
+ const bar = document.createElement('div');
47
+ bar.className = 'scroll-progress';
48
+ document.body.appendChild(bar);
49
+ const onProg = () => {
50
+ const h = document.documentElement.scrollHeight - window.innerHeight;
51
+ bar.style.width = (h > 0 ? (window.scrollY / h) * 100 : 0) + '%';
52
+ };
53
+ window.addEventListener('scroll', onProg, { passive: true });
54
+ onProg();
55
+
56
+ if (reduced) return;
57
+
58
+ /* ---- github pages: hide sign-in (no app at /app on static host) ---- */
59
+ if (location.hostname.includes('github.io')) {
60
+ document.querySelectorAll('a.signin').forEach((a) => (a.style.display = 'none'));
61
+ }
62
+
63
+ /* ---- hero parallax ---- */
64
+ const stage = document.querySelector('.hero-stage');
65
+ const orbitStage = document.querySelector('.orbit-stage');
66
+ let raf = null;
67
+ const onPar = () => {
68
+ if (raf) return;
69
+ raf = requestAnimationFrame(() => {
70
+ const y = window.scrollY;
71
+ if (stage) stage.style.transform = `translateY(${Math.min(y, 500) * -0.028}px)`;
72
+ if (orbitStage) orbitStage.style.transform = `translateY(${Math.min(y, 400) * -0.015}px)`;
73
+ raf = null;
74
+ });
75
+ };
76
+ window.addEventListener('scroll', onPar, { passive: true });
77
+ })();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neoagent",
3
- "version": "2.4.1",
3
+ "version": "2.4.2-beta.1",
4
4
  "description": "Proactive personal AI agent with no limits",
5
5
  "license": "AGPL-3.0-only",
6
6
  "main": "server/index.js",
@@ -18,6 +18,7 @@
18
18
  "extensions",
19
19
  "flutter_app",
20
20
  "docs",
21
+ "landing",
21
22
  "com.neoagent.plist",
22
23
  "LICENSE",
23
24
  "README.md",
@@ -1 +1 @@
1
- dcad55b6198b066ebc14a3b7bb789972
1
+ 51db7b9df84b3e5c1c7c8099ea37acf8
@@ -37,6 +37,6 @@ _flutter.buildConfig = {"engineRevision":"c416acfeb8126e097f758c664aaa3da929e27d
37
37
 
38
38
  _flutter.loader.load({
39
39
  serviceWorkerSettings: {
40
- serviceWorkerVersion: "141262336" /* Flutter's service worker is deprecated and will be removed in a future Flutter release. */
40
+ serviceWorkerVersion: "2675250729" /* Flutter's service worker is deprecated and will be removed in a future Flutter release. */
41
41
  }
42
42
  });