diff --git a/package-lock.json b/package-lock.json index e4c5cee..52f1d82 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,7 @@ "dotenv": "^17.3.1", "express": "^4.18.2", "express-rate-limit": "^8.5.2", - "google-auth-library": "^10.6.2", + "google-auth-library": "^10.7.0", "jsonwebtoken": "^9.0.2", "razorpay": "^2.9.6", "uuid": "^9.0.0" @@ -811,9 +811,9 @@ } }, "node_modules/google-auth-library": { - "version": "10.6.2", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-10.6.2.tgz", - "integrity": "sha512-e27Z6EThmVNNvtYASwQxose/G57rkRuaRbQyxM2bvYLLX/GqWZ5chWq2EBoUchJbCc57eC9ArzO5wMsEmWftCw==", + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-10.7.0.tgz", + "integrity": "sha512-QpTAbNJ36TliZLx3TTtahR8HG0hN9RllL1e3FymOvQSIKK8JmgV58H924ub2wa2DsS3ANjjP1Aw1N+Ramc8hqQ==", "license": "Apache-2.0", "dependencies": { "base64-js": "^1.3.0", diff --git a/package.json b/package.json index 5b55e02..758e90a 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "dotenv": "^17.3.1", "express": "^4.18.2", "express-rate-limit": "^8.5.2", - "google-auth-library": "^10.6.2", + "google-auth-library": "^10.7.0", "jsonwebtoken": "^9.0.2", "razorpay": "^2.9.6", "uuid": "^9.0.0" diff --git a/public/admin.html b/public/admin.html index 37f6b44..c2cee1d 100644 --- a/public/admin.html +++ b/public/admin.html @@ -17,6 +17,8 @@ +
+
@@ -548,5 +550,6 @@ + diff --git a/public/css/style.css b/public/css/style.css index 9feb664..eba47d6 100644 --- a/public/css/style.css +++ b/public/css/style.css @@ -701,6 +701,37 @@ input, textarea, select { max-height: 0; opacity: 0; } + +/* ─── Custom Orb Cursor ─── */ + +body { cursor: none; } +a, button, .feature-card, .theme-preview-card { cursor: none; } + +#cursor-orb-glow { + position: fixed; width: 110px; height: 110px; border-radius: 50%; + background: radial-gradient(circle, rgba(168,85,247,0.55) 0%, rgba(139,92,246,0.25) 45%, transparent 72%); + pointer-events: none; z-index: 99998; + transition: width .3s, height .3s; +} +#cursor-orb-core { + position: fixed; width: 10px; height: 10px; border-radius: 50%; + background: #e9d5ff; + box-shadow: 0 0 8px #a855f7, 0 0 18px #7c3aed; + pointer-events: none; z-index: 99999; +} +.light-mode #cursor-orb-core { + background: #a855f7; + box-shadow: 0 0 8px #7c3aed, 0 0 18px #a855f7; +} +@keyframes glitter-fly { + 0% { opacity:1; transform: translate(0,0) rotate(0deg) scale(1); } + 100%{ opacity:0; transform: translate(var(--tx),var(--ty)) rotate(var(--rot)) scale(0); } +} +@keyframes cursor-ripple { + 0% { transform: translate(-50%,-50%) scale(0); opacity:.7; } + 100%{ transform: translate(-50%,-50%) scale(1); opacity:0; } +} +======= ::selection { background: #a855f7; color: #ffffff; @@ -842,3 +873,4 @@ input, textarea, select { transition:.2s; } + diff --git a/public/features/analytics.html b/public/features/analytics.html index d4b26cb..0c2fe61 100644 --- a/public/features/analytics.html +++ b/public/features/analytics.html @@ -28,6 +28,8 @@ +
+
@@ -653,6 +655,7 @@

Support

Contact Us + \ No newline at end of file diff --git a/public/features/grow.html b/public/features/grow.html index d21bc13..6eb344e 100644 --- a/public/features/grow.html +++ b/public/features/grow.html @@ -28,6 +28,8 @@ +
+
@@ -593,6 +595,7 @@

Support

Contact Us + \ No newline at end of file diff --git a/public/features/link-in-bio.html b/public/features/link-in-bio.html index d8c3703..b84cc7f 100644 --- a/public/features/link-in-bio.html +++ b/public/features/link-in-bio.html @@ -18,6 +18,8 @@ +
+
@@ -498,5 +500,6 @@

Ready to stand out?

+ diff --git a/public/features/monetize.html b/public/features/monetize.html index 28d6752..a5ecc57 100644 --- a/public/features/monetize.html +++ b/public/features/monetize.html @@ -28,6 +28,8 @@ +
+
@@ -627,6 +629,7 @@

Support

Contact Us + \ No newline at end of file diff --git a/public/features/social-media.html b/public/features/social-media.html index 7c7431f..5a89e08 100644 --- a/public/features/social-media.html +++ b/public/features/social-media.html @@ -28,6 +28,8 @@ +
+
@@ -610,6 +612,7 @@

Support

Contact Us + \ No newline at end of file diff --git a/public/home.html b/public/home.html index 7d96474..4436cc5 100644 --- a/public/home.html +++ b/public/home.html @@ -112,8 +112,9 @@ - -
+ +
+
@@ -1186,6 +1187,7 @@

Support

+ diff --git a/public/index.html b/public/index.html index 9478a5f..c3f3143 100644 --- a/public/index.html +++ b/public/index.html @@ -51,6 +51,9 @@ + +
+
@@ -104,5 +107,6 @@

Loading...

+ diff --git a/public/js/cursor.js b/public/js/cursor.js new file mode 100644 index 0000000..df7d596 --- /dev/null +++ b/public/js/cursor.js @@ -0,0 +1,73 @@ +(function () { + if (window.matchMedia('(pointer: coarse)').matches) return; + + const glow = document.getElementById('cursor-orb-glow'); + const core = document.getElementById('cursor-orb-core'); + if (!glow || !core) return; + + let mx = 0, my = 0, gx = 0, gy = 0; + + document.addEventListener('mousemove', e => { + mx = e.clientX; my = e.clientY; + core.style.transform = `translate(calc(${mx}px - 50%), calc(${my}px - 50%))`; + }); + + (function loop() { + gx += (mx - gx) * 0.07; + gy += (my - gy) * 0.07; + glow.style.transform = `translate(calc(${gx}px - 50%), calc(${gy}px - 50%))`; + requestAnimationFrame(loop); + })(); + + document.querySelectorAll('a, button, .feature-card, .theme-preview-card, .link-card, .nav-item, .section-card').forEach(el => { + el.addEventListener('mouseenter', () => { glow.style.width = '160px'; glow.style.height = '160px'; }); + el.addEventListener('mouseleave', () => { glow.style.width = '110px'; glow.style.height = '110px'; }); + }); + + const colors = ['#e9d5ff', '#c084fc', '#a855f7', '#7c3aed', '#f5f3ff', '#ddd6fe']; + + function spawnGlitter(x, y, count) { + for (let i = 0; i < count; i++) { + const el = document.createElement('div'); + const ang = Math.random() * Math.PI * 2; + const dist = 30 + Math.random() * 80; + const size = 2 + Math.random() * 5; + el.style.cssText = `position:fixed;left:${x}px;top:${y}px;width:${size}px;height:${size}px; + background:${colors[Math.floor(Math.random() * colors.length)]}; + border-radius:${['50%', '2px', '0'][Math.floor(Math.random() * 3)]}; + pointer-events:none;z-index:99997; + --tx:${Math.cos(ang) * dist}px;--ty:${Math.sin(ang) * dist}px; + --rot:${Math.random() * 720 - 360}deg; + animation:glitter-fly ${.5 + Math.random() * .5}s ease-out forwards;`; + document.body.appendChild(el); + setTimeout(() => el.remove(), 1000); + } + } + + function spawnRipple(x, y) { + [40, 80].forEach((sz, i) => { + const r = document.createElement('div'); + r.style.cssText = `position:fixed;left:${x}px;top:${y}px;width:${sz}px;height:${sz}px; + border-radius:50%;border:1.5px solid rgba(168,85,247,${.7 - i * .2}); + pointer-events:none;z-index:99996; + animation:cursor-ripple ${.6 + i * .2}s ease-out ${i * .08}s forwards;`; + document.body.appendChild(r); + setTimeout(() => r.remove(), 900); + }); + } + + let clickTimer = null; + +document.addEventListener('click', e => { + if (clickTimer) { + clearTimeout(clickTimer); + clickTimer = null; + spawnGlitter(e.clientX, e.clientY, 32); + return; + } + clickTimer = setTimeout(() => { + spawnGlitter(e.clientX, e.clientY, 18); + clickTimer = null; + }, 220); +}); +})(); \ No newline at end of file diff --git a/public/js/home.js b/public/js/home.js index 71802c8..a530565 100644 --- a/public/js/home.js +++ b/public/js/home.js @@ -491,27 +491,6 @@ }); } - // ─── Visual Upgrades (Cursor, Typewriter, Magnetic, Tilt) ─── - function initCustomCursor() { - const cursor = document.getElementById('cursor-glow'); - if (!cursor) return; - document.addEventListener('mousemove', (e) => { - cursor.style.transform = `translate(calc(${e.clientX}px - 50%), calc(${e.clientY}px - 50%))`; - }); - const interactables = document.querySelectorAll('a, button, .feature-card, .pricing-card, .use-case-card, .theme-preview-card'); - interactables.forEach(el => { - el.addEventListener('mouseenter', () => { - cursor.style.width = '60px'; - cursor.style.height = '60px'; - cursor.style.background = 'var(--accent-light)'; - }); - el.addEventListener('mouseleave', () => { - cursor.style.width = '40px'; - cursor.style.height = '40px'; - cursor.style.background = 'var(--accent)'; - }); - }); - } function initTypewriter() { const tw = document.getElementById('typewriter'); diff --git a/public/login.html b/public/login.html index 03e00f6..d39c11d 100644 --- a/public/login.html +++ b/public/login.html @@ -18,6 +18,8 @@ +
+
@@ -127,6 +129,9 @@

Welcome back

+ + + + diff --git a/public/signup.html b/public/signup.html index 08bd892..20f86cb 100644 --- a/public/signup.html +++ b/public/signup.html @@ -22,6 +22,8 @@ +
+
@@ -137,6 +139,7 @@

Create your account

+ \ No newline at end of file diff --git a/public/team.html b/public/team.html index 767c86b..76c29fb 100644 --- a/public/team.html +++ b/public/team.html @@ -229,6 +229,8 @@ +
+
@@ -387,5 +389,6 @@

Join the team building
the future of creator tools.

+