diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index da8f289..8e0eba9 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -19,5 +19,5 @@ jobs:
- uses: actions/setup-node@v4
with:
node-version: 18
- - run: npm install
+ - run: npm install --no-audit --no-fund
- run: npm run lint
diff --git a/client/index.html b/client/index.html
index 2f73494..899f9c9 100644
--- a/client/index.html
+++ b/client/index.html
@@ -10,7 +10,7 @@
"@context": "https://schema.org",
"@type": "Notary",
"name": "Keystone Notary Group, LLC",
- "image": "https://www.keystonenotarygroup.com/logo.png",
+ "image": "https://www.keystonenotarygroup.com/assets/logo_1.webp",
"url": "https://www.keystonenotarygroup.com",
"telephone": "+1-267-309-9000",
"email": "info@keystonenotarygroup.com",
@@ -31,7 +31,8 @@
-
+
+
@@ -57,7 +58,7 @@
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "Keystone Notary Group, LLC",
- "image": "https://www.keystonenotarygroup.com/logo.png",
+ "image": "https://www.keystonenotarygroup.com/assets/logo_1.webp",
"url": "https://www.keystonenotarygroup.com",
"telephone": "+1-267-309-9000",
"email": "info@keystonenotarygroup.com",
diff --git a/client/public/manifest.webmanifest b/client/public/manifest.webmanifest
index b331a41..780a58c 100644
--- a/client/public/manifest.webmanifest
+++ b/client/public/manifest.webmanifest
@@ -7,14 +7,14 @@
"theme_color": "#0b0b0d",
"icons": [
{
- "src": "/assets/icon-192.png",
+ "src": "https://www.keystonenotarygroup.com/assets/icon-192.webp",
"sizes": "192x192",
- "type": "image/png"
+ "type": "image/webp"
},
{
- "src": "/assets/icon-512.png",
+ "src": "https://www.keystonenotarygroup.com/assets/icon-512.webp",
"sizes": "512x512",
- "type": "image/png"
+ "type": "image/webp"
}
]
}
\ No newline at end of file
diff --git a/client/src/modules/sections/Coverage.tsx b/client/src/modules/sections/Coverage.tsx
index bf8da0c..571e5e1 100644
--- a/client/src/modules/sections/Coverage.tsx
+++ b/client/src/modules/sections/Coverage.tsx
@@ -6,13 +6,19 @@ gsap.registerPlugin(ScrollTrigger)
export function Coverage(){
const lineRef = useRef(null)
useEffect(()=>{
- if (!lineRef.current) return
- const length = 800
- gsap.set(lineRef.current, { strokeDasharray: length, strokeDashoffset: length })
- gsap.to(lineRef.current, {
- strokeDashoffset: 0,
- scrollTrigger: { trigger: '#coverage', start: 'top 70%', end: 'bottom top', scrub: true }
+ const ctx = gsap.context(() => {
+ if (!lineRef.current) return
+ const mm = gsap.matchMedia()
+ mm.add("(prefers-reduced-motion: no-preference)", () => {
+ const length = 800
+ gsap.set(lineRef.current, { strokeDasharray: length, strokeDashoffset: length })
+ gsap.to(lineRef.current, {
+ strokeDashoffset: 0,
+ scrollTrigger: { trigger: '#coverage', start: 'top 70%', end: 'bottom top', scrub: true }
+ })
+ })
})
+ return () => ctx.revert()
},[])
return (
diff --git a/client/src/modules/sections/Credentials.tsx b/client/src/modules/sections/Credentials.tsx
index 1df3e13..2a6ce0c 100644
--- a/client/src/modules/sections/Credentials.tsx
+++ b/client/src/modules/sections/Credentials.tsx
@@ -6,12 +6,15 @@ gsap.registerPlugin(ScrollTrigger)
export function Credentials(){
const ref = useRef(null)
useEffect(()=>{
- const ctx = gsap.context(()=>{
- const panes = gsap.utils.toArray('.pane')
- panes.forEach((pane, i)=>{
- gsap.fromTo(pane, {y:(i-1)*60, opacity:.6, rotateX:8, z:0}, {
- y:0, z: i===1? 120 : (i===0? 40 : 0), opacity:1,
- scrollTrigger: { trigger: '#credentials', start: 'top 75%', end: 'bottom top', scrub: true }
+ const ctx = gsap.context((self) => {
+ const mm = gsap.matchMedia(self)
+ mm.add("(prefers-reduced-motion: no-preference)", () => {
+ const panes = gsap.utils.toArray('.pane')
+ panes.forEach((pane, i)=>{
+ gsap.fromTo(pane, {y:(i-1)*60, opacity:.6, rotateX:8, z:0}, {
+ y:0, z: i===1? 120 : (i===0? 40 : 0), opacity:1,
+ scrollTrigger: { trigger: '#credentials', start: 'top 75%', end: 'bottom top', scrub: true }
+ })
})
})
}, ref)
@@ -25,7 +28,7 @@ export function Credentials(){
Background‑Checked
-
+
NNA Notary Signing Agent — 2025
diff --git a/client/src/modules/sections/Services.tsx b/client/src/modules/sections/Services.tsx
index d0908ae..2f73142 100644
--- a/client/src/modules/sections/Services.tsx
+++ b/client/src/modules/sections/Services.tsx
@@ -7,15 +7,21 @@ export function Services(){
const [items, setItems] = useState<{title:string, body:string}[]>([])
useEffect(()=>{ fetch('/api/cms/services').then(r=>r.json()).then(j=> setItems(j.data || [])) },[])
useEffect(()=>{
- const cards = gsap.utils.toArray('#services .card')
- cards.forEach((el, i)=>{
- gsap.fromTo(el, {y:30, opacity:0, clipPath:'inset(0 0 100% 0 round 16px)'}, {
- y:0, opacity:1, clipPath:'inset(0 0 0% 0 round 16px)',
- duration:0.9, ease:'power3.out',
- scrollTrigger: { trigger: el, start: 'top 85%', toggleActions: 'play none none reverse' }
+ const ctx = gsap.context(() => {
+ const mm = gsap.matchMedia()
+ mm.add("(prefers-reduced-motion: no-preference)", () => {
+ const cards = gsap.utils.toArray('#services .card')
+ cards.forEach((el) => {
+ gsap.fromTo(el, {y:30, opacity:0, clipPath:'inset(0 0 100% 0 round 16px)'}, {
+ y:0, opacity:1, clipPath:'inset(0 0 0% 0 round 16px)',
+ duration:0.9, ease:'power3.out',
+ scrollTrigger: { trigger: el, start: 'top 85%', toggleActions: 'play none none reverse' }
+ })
+ })
})
})
- },[])
+ return () => ctx.revert()
+ },[items])
const display = items.length ? items : [
{title:'Loan Signings', body:'Purchase, refinance, HELOC, reverse—error‑free, lender‑friendly packages.'},
{title:'General Notary Work', body:'POAs, affidavits, deeds, titles, I‑9s, and more—mobile to you.'},