PageSourceSearch

https://www.finnovate.in/assets/js/custom.js?v=20260723

js finnovate.in collected 2026-10-04 02:36:29 UTC 79,168 bytes, 1,786 lines download raw bytes

1
2(function ($) {
3  // "use strict";
4
5  var ROOT_URL = "https://www.finnovate.in";
6
7  var DARK_NAV_SLUGS = [
8    "about-us-old",
9    "advisorybackup",
10    "affordability-calculator",
11    "aindex",
12    "careers",
13    "compliant-redressal",
14    "contact-us",
15    "faq",
16    "faqs-pb",
17    "finn-tools",
18    "finnfit-test",
19    "insurance-grievance-redressal",
20    "lodge-complaints",
21    "privacy-policy",
22    "property-yield-calculator",
23    "refund-policy",
24    "sebi-investor-charter",
25    "services",
26    "sip-calculator2",
27    "terms-conditions",
28    "testpage",
29    "track-page",
30    "transact-page",
31    "lodge-complaints-new"
32  ];
33
34  var getPathSlug = function () {
35    var path = window.location.pathname.split("?")[0].toLowerCase();
36    path = path.replace(/\/+$/, "");
37    if (path === "" || path === "/") {
38      return "";
39    }
40    var segments = path.split("/").filter(Boolean);
41    var last = segments.length ? segments[segments.length - 1] : "";
42    if (last.indexOf(".") !== -1) {
43      last = last.split(".")[0];
44    }
45    return last;
46  };
47
48  var getUtmMedium = function () {
49    var slug = getPathSlug();
50    return slug || "homepage";
51  };
52
53  var getFooterMedium = function () {
54    var mediumBase = getUtmMedium() || "homepage";
55    return mediumBase + "-footer";
56  };
57
58  // Detour smart link — routes to Play Store or App Store by device.
59  var APP_SMART_LINK = "https://finnovate.godetour.link/ImFyaps11Z";
60
61  var buildAppLink = function (medium, campaign, platform) {
62    return APP_SMART_LINK
63      + "?utm_origin=Organic&utm_source=Website"
64      + "&utm_medium=" + encodeURIComponent(medium)
65      + "&utm_campaign=" + campaign
66      + "&utm_term=" + platform
67      + "&utm_content=Download%20App";
68  };
69
70  var SESSION_KEY = "ff_landing";
71  var PC_KEY = "ff_pc";
72  var LP_PREFIX = "lp.";
73  var PC_PREFIX = "pc.";
74  var CALENDLY_PREFIX = "https://calendly.com/finnovate/";
75
76  var ensureSessionLandingPath = function () {
77    try {
78      var existing = sessionStorage.getItem(SESSION_KEY);
79      if (existing) {
80        return existing;
81      }
82      var slug = getPathSlug() || "homepage";
83      sessionStorage.setItem(SESSION_KEY, slug);
84      return slug;
85    } catch (e) {
86      return getPathSlug() || "homepage";
87    }
88  };
89
90  var incrementPageCount = function () {
91    try {
92      var count = parseInt(sessionStorage.getItem(PC_KEY) || "0", 10);
93      sessionStorage.setItem(PC_KEY, String(count + 1));
94    } catch (e) {}
95  };
96
97  var getPageCount = function () {
98    try {
99      return parseInt(sessionStorage.getItem(PC_KEY) || "1", 10);
100    } catch (e) {
101      return 1;
102    }
103  };
104
105  var decorateCalendlyUrl = function (url) {
106    try {
107      if (!url || typeof url !== "string") {
108        return url;
109      }
110
111      var parsedUrl = new URL(url, window.location.origin);
112      var fullHref = parsedUrl.href;
113      if (fullHref.indexOf(CALENDLY_PREFIX) !== 0) {
114        return url;
115      }
116
117      var utmTerm = parsedUrl.searchParams.get("utm_term") || "";
118      if (utmTerm.indexOf(LP_PREFIX) !== -1) {
119        return parsedUrl.toString();
120      }
121
122      var landingPath = ensureSessionLandingPath();
123      var lpToken = LP_PREFIX + landingPath;
124      var pcToken = PC_PREFIX + getPageCount();
125      var nextUtmTerm = utmTerm ? (utmTerm + "|" + lpToken + "|" + pcToken) : (lpToken + "|" + pcToken);
126      parsedUrl.searchParams.set("utm_term", nextUtmTerm);
127      return parsedUrl.toString();
128    } catch (e) {
129      return url;
130    }
131  };
132
133  var findAnchorElement = function (target) {
134    if (!target) {
135      return null;
136    }
137    if (target.closest) {
138      return target.closest("a");
139    }
140    var node = target;
141    while (node && node !== document) {
142      if (node.tagName && node.tagName.toLowerCase() === "a") {
143        return node;
144      }
145      node = node.parentNode;
146    }
147    return null;
148  };
149
150  var patchCalendlyMethods = function () {
151    if (!window.Calendly || window.__ffCalendlyMethodPatchDone) {
152      return;
153    }
154
155    if (typeof window.Calendly.initPopupWidget === "function") {
156      var originalInitPopupWidget = window.Calendly.initPopupWidget;
157      window.Calendly.initPopupWidget = function (options) {
158        if (options && options.url) {
159          options.url = decorateCalendlyUrl(options.url);
160        }
161        return originalInitPopupWidget.call(window.Calendly, options);
162      };
163    }
164
165    if (typeof window.Calendly.showPopupWidget === "function") {
166      var originalShowPopupWidget = window.Calendly.showPopupWidget;
167      window.Calendly.showPopupWidget = function (url) {
168        return originalShowPopupWidget.call(window.Calendly, decorateCalendlyUrl(url));
169      };
170    }
171
172    window.__ffCalendlyMethodPatchDone = true;
173  };
174
175  var installCalendlyAssignmentHook = function () {
176    var currentCalendly = window.Calendly;
177
178    if (window.__ffCalendlyAssignmentHookInstalled) {
179      return;
180    }
181
182    try {
183      Object.defineProperty(window, "Calendly", {
184        configurable: true,
185        enumerable: true,
186        get: function () {
187          return currentCalendly;
188        },
189        set: function (value) {
190          currentCalendly = value;
191          window.__ffCalendlyMethodPatchDone = false;
192          patchCalendlyMethods();
193        }
194      });
195      window.__ffCalendlyAssignmentHookInstalled = true;
196    } catch (e) {
197      return;
198    }
199
200    if (currentCalendly) {
201      window.__ffCalendlyMethodPatchDone = false;
202      patchCalendlyMethods();
203    }
204  };
205
206  // Lock session-first path and increment page count on every page load.
207  ensureSessionLandingPath();
208  incrementPageCount();
209  installCalendlyAssignmentHook();
210  patchCalendlyMethods();
211  var calendlyPatchAttempt = setInterval(function () {
212    patchCalendlyMethods();
213    if (window.__ffCalendlyMethodPatchDone) {
214      clearInterval(calendlyPatchAttempt);
215    }
216  }, 500);
217
218  // Ensure direct Calendly anchor clicks (non-popup flows) also carry lp tracking.
219  document.addEventListener("click", function (event) {
220    var anchor = findAnchorElement(event.target);
221    if (!anchor || !anchor.href) {
222      return;
223    }
224    anchor.href = decorateCalendlyUrl(anchor.href);
225  }, true);
226
227  // Shared Calendly opener for unified footer CTA
228  window.openCalendlyFooter = function (url) {
229    url = decorateCalendlyUrl(url);
230
231    // If Calendly is already available, open immediately
232    if (window.Calendly && typeof window.Calendly.initPopupWidget === "function") {
233      window.Calendly.initPopupWidget({ url: url });
234      return false;
235    }
236
237    // Ensure widget CSS is present (idempotent)
238    if (!document.querySelector('link[href^="https://assets.calendly.com/assets/external/widget.css"]')) {
239      var link = document.createElement("link");
240      link.rel = "stylesheet";
241      link.href = "https://assets.calendly.com/assets/external/widget.css";
242      document.head.appendChild(link);
243    }
244
245    // Reuse existing script tag if present
246    var existingScript = document.querySelector('script[src^="https://assets.calendly.com/assets/external/widget.js"]');
247    if (existingScript) {
248      existingScript.addEventListener("load", function () {
249        if (window.Calendly && typeof window.Calendly.initPopupWidget === "function") {
250          window.Calendly.initPopupWidget({ url: url });
251        }
252      });
253      return false;
254    }
255
256    // Otherwise, load the Calendly widget script on demand
257    var script = document.createElement("script");
258    script.src = "https://assets.calendly.com/assets/external/widget.js";
259    script.async = true;
260    script.onload = function () {
261      if (window.Calendly && typeof window.Calendly.initPopupWidget === "function") {
262        window.Calendly.initPopupWidget({ url: url });
263      }
264    };
265    document.head.appendChild(script);
266
267    return false;
268  };
269  // Reusable alias so header/nav CTAs can use the same loader
270  window.openCalendlyPopup = function (url) {
271    return window.openCalendlyFooter && window.openCalendlyFooter(url);
272  };
273
274  var hasDarkNav = function () {
275    var slug = getPathSlug();
276    return DARK_NAV_SLUGS.indexOf(slug) !== -1;
277  };
278
279  var getUnifiedLogoSrc = function () {
280    return hasDarkNav()
281      ? "/assets/images/Finnovate logo.webp"
282      : "/assets/images/logo.svg";
283  };
284
285  var buildUnifiedNavMarkup = function () {
286    var logoSrc = getUnifiedLogoSrc();
287    var utmMedium = getUtmMedium();
288    return `
289                    <!-- ***** Logo Start ***** -->
290                    <a href="${ROOT_URL}/" class="logo"><img src="${logoSrc}" alt="logo" style="height: 30px;"></a>
291                    <!-- ***** Logo End ***** -->
292                    <!-- ***** Menu Start ***** -->
293                    <ul class="nav">
294
295                        <li class="dropdown">
296                            <div class="dropbtn-container">
297                                <a href="${ROOT_URL}/advisory/" class="dropbtn" data-track-click="top_nav_services">Services <i
298                                        class="fas fa-chevron-down"></i></a>
299                            </div>
300                            <div class="dropdown-content nav-panel">
301                                <div class="nav-panel-grid">
302                                    <div class="nav-col nav-col--start">
303                                        <p class="nav-col-label"><i class="fas fa-flag nav-col-ico"></i><span>Start Here</span><i class="fas fa-chevron-down nav-col-caret"></i></p>
304                                        <div class="nav-col-links">
305                                        <a class="nav-feature" href="${ROOT_URL}/advisory/" data-track-click="top_nav_advisory_overview">
306                                            <span class="nf-title">Explore Finnovate Advisory</span>
307                                            <small class="nf-desc">See how our advisory model, services and process work.</small>
308                                        </a>
309                                        <a class="nav-feature nav-feature--alt" href="${ROOT_URL}/advisory/pricing" data-track-click="top_nav_pricing_fees">
310                                            <span class="nf-title">Pricing &amp; Fees</span>
311                                            <small class="nf-desc">See fees across all advisory services.</small>
312                                        </a>
313                                        </div>
314                                    </div>
315                                    <div class="nav-col">
316                                        <p class="nav-col-label"><i class="fas fa-briefcase nav-col-ico"></i><span>Advisory Services</span><i class="fas fa-chevron-down nav-col-caret"></i></p>
317                                        <div class="nav-col-links">
318                                        <a href="${ROOT_URL}/advisory/financial-planning" data-track-click="top_nav_financial_planning"><img src="/assets/images/advisory-icon-01.webp"
319                                                alt="Financial Planning Icon"><div><span class="np-title">Financial Planning</span><small class="np-desc">A complete written plan for your goals</small></div></a>
320                                        <a href="${ROOT_URL}/advisory/wealth-management" data-track-click="top_nav_wealth_management"><img src="/assets/images/advisory-icon-02.webp"
321                                                alt="Wealth Management Icon"><div><span class="np-title">Wealth Management</span><small class="np-desc">Ongoing advisory for your portfolio</small></div></a>
322                                        <a href="${ROOT_URL}/advisory/retirement-planning" data-track-click="top_nav_retirement_planning"><img src="/assets/images/retire.webp"
323                                                alt="Retirement Planning Icon"><div><span class="np-title">Retirement Planning</span><small class="np-desc">Build the corpus your retirement needs</small></div></a>
324                                        <a href="${ROOT_URL}/advisory/tax-planning" data-track-click="top_nav_tax_planning"><img src="/assets/images/advisory-icon-03.webp"
325                                                alt="Tax Planning Icon"><div><span class="np-title">Tax Planning</span><small class="np-desc">Keep every decision tax-efficient</small></div></a>
326                                        <a href="${ROOT_URL}/advisory/estate-planning" data-track-click="top_nav_estate_planning"><img src="/assets/images/advisory-icon-04.webp"
327                                                alt="Estate Planning Icon"><div><span class="np-title">Estate Planning</span><small class="np-desc">Wills, nominations and succession</small></div></a>
328                                        </div>
329                                    </div>
330                                    <div class="nav-col">
331                                        <p class="nav-col-label"><i class="fas fa-user-plus nav-col-ico"></i><span>Specialist</span><i class="fas fa-chevron-down nav-col-caret"></i></p>
332                                        <div class="nav-col-links">
333                                        <a href="${ROOT_URL}/doctors" data-track-click="top_nav_doctors_advisory"><i class="fas fa-user-md nav-fa-icon"></i><div><span class="np-title">For Doctors</span><small class="np-desc">Planning built for medical professionals</small></div></a>
334                                        <a href="${ROOT_URL}/advisory/nri" data-track-click="top_nav_nri_advisory"><i class="fas fa-globe nri-nav-icon"></i><div><span class="np-title">For NRIs</span><small class="np-desc">Cross-border planning and advice</small></div></a>
335                                        <a href="${ROOT_URL}/advisory/business-owners" data-track-click="top_nav_business_owners_advisory"><i class="fas fa-user-tie nav-fa-icon"></i><div><span class="np-title">For Business Owners</span><small class="np-desc">Planning built for entrepreneurs too</small></div></a>
336                                        </div>
337                                    </div>
338                                </div>
339                            </div>
340                        </li>
341
342                        <li class="dropdown">
343                            <div class="dropbtn-container">
344                                <a href="${ROOT_URL}/why-finnovate" class="dropbtn" data-track-click="top_nav_why_finnovate">Why Finnovate <i
345                                        class="fas fa-chevron-down"></i></a>
346                            </div>
347                            <div class="dropdown-content nav-panel">
348                                <div class="nav-panel-grid">
349                                    <div class="nav-col nav-col--start">
350                                        <p class="nav-col-label"><i class="fas fa-info-circle nav-col-ico"></i><span>Understand Finnovate</span><i class="fas fa-chevron-down nav-col-caret"></i></p>
351                                        <div class="nav-col-links">
352                                        <a class="nav-feature" href="${ROOT_URL}/why-finnovate" data-track-click="top_nav_why_finnovate_feature">
353                                            <span class="nf-title">Why Finnovate</span>
354                                            <small class="nf-desc">Our approach to making your financial life work as one connected system.</small>
355                                        </a>
356                                        <a href="https://www.finnovate.in/about-us#how-it-works" data-track-click="top_nav_how_we_work"><i class="fas fa-map-signs nav-fa-icon"></i><div><span class="np-title">How We Work</span><small class="np-desc">From your first conversation to ongoing reviews</small></div></a>
357                                        <a href="${ROOT_URL}/testimonials" data-track-click="top_nav_testimonials_page"><img src="/assets/images/testimonials-icon.webp"
358                                                    alt="Testimonials Videos Icon"><div><span class="np-title">Client Experiences</span><small class="np-desc">Named stories and video testimonials</small></div></a>
359                                        </div>
360                                    </div>
361                                    <div class="nav-col">
362                                        <p class="nav-col-label"><i class="fas fa-building nav-col-ico"></i><span>Proof &amp; Company</span><i class="fas fa-chevron-down nav-col-caret"></i></p>
363                                        <div class="nav-col-links">
364                                        <a href="${ROOT_URL}/about-us" data-track-click="top_nav_who_we_are"><img src="/assets/images/about-icon.webp"
365                                                    alt="About Us Icon"><div><span class="np-title">Who We Are</span><small class="np-desc">Our story, founders and mission</small></div></a>
366                                        <a href="${ROOT_URL}/about-us#team" data-track-click="top_nav_our_team"><i class="fas fa-users nav-fa-icon"></i><div><span class="np-title">Our Team</span><small class="np-desc">The people behind the plans</small></div></a>
367                                        <a href="${ROOT_URL}/near-me/" data-track-click="top_nav_near_me_page"><img src="/assets/images/locations-icon.webp"
368                                                    alt="Office Locations Icon"><div><span class="np-title">Our Locations</span><small class="np-desc">Meet us in person or virtually</small></div></a>
369                                        <a href="${ROOT_URL}/faq" data-track-click="top_nav_faq_page"><img src="/assets/images/faq-icon.webp"
370                                                    alt="FAQ Icon"><div><span class="np-title">FAQs</span><small class="np-desc">Common questions, answered</small></div></a>
371                                        </div>
372                                    </div>
373                                </div>
374                            </div>
375                        </li>
376
377                        <li class="dropdown">
378                            <div class="dropbtn-container">
379                                <a href="${ROOT_URL}/learn/finnversity" class="dropbtn" data-track-click="top_nav_learn_finnversity">Learn <i
380                                        class="fas fa-chevron-down"></i></a>
381                            </div>
382                            <div class="dropdown-content nav-panel">
383                                <div class="nav-panel-grid">
384                                    <div class="nav-col">
385                                        <p class="nav-col-label"><i class="fas fa-book nav-col-ico"></i><span>Learn</span><i class="fas fa-chevron-down nav-col-caret"></i></p>
386                                        <div class="nav-col-links">
387                                        <a href="${ROOT_URL}/learn/blog-listing" data-track-click="top_nav_learn_blogs"><img src="/assets/images/blogs.webp"
388                                                alt="Blogs Icon"><div><span class="np-title">Blogs</span><small class="np-desc">Guides, explainers and deep dives</small></div></a>
389                                        <a href="${ROOT_URL}/learn/finnversity" data-track-click="top_nav_learn_finnversity_dropdown"><img src="/assets/images/finnversityv2.webp"
390                                                alt="Finnversity Icon"><div><span class="np-title">Finnversity</span><small class="np-desc">Structured courses on money</small></div></a>
391                                        <a href="${ROOT_URL}/glossary/" data-track-click="top_nav_learn_glossary"><i class="fas fa-spell-check nav-fa-icon"></i><div><span class="np-title">Financial Glossary</span><small class="np-desc">100+ money terms, explained simply</small></div></a>
392                                        </div>
393                                    </div>
394                                    <div class="nav-col">
395                                        <p class="nav-col-label"><i class="fas fa-headphones nav-col-ico"></i><span>Watch &amp; Listen</span><i class="fas fa-chevron-down nav-col-caret"></i></p>
396                                        <div class="nav-col-links">
397                                        <a href="${ROOT_URL}/podcast" data-track-click="top_nav_learn_podcast"><img src="/assets/images/podcast.webp"
398                                                alt="Podcast Icon"><div><span class="np-title">Podcast</span><small class="np-desc">Money conversations on the go</small></div></a>
399                                        <a href="${ROOT_URL}/events/" data-track-click="top_nav_learn_events"><i class="fas fa-calendar-alt nav-fa-icon"></i><div><span class="np-title">Events</span><small class="np-desc">Webinars and meetups to attend</small></div></a>
400                                        <a href="${ROOT_URL}/learn/videos" data-track-click="top_nav_learn_videos"><img src="/assets/images/videos1.webp"
401                                                alt="Videos Icon"><div><span class="np-title">Videos</span><small class="np-desc">Watch concepts explained simply</small></div></a>
402                                        </div>
403                                    </div>
404                                    <div class="nav-col">
405                                        <p class="nav-col-label"><i class="fas fa-search nav-col-ico"></i><span>Research</span><i class="fas fa-chevron-down nav-col-caret"></i></p>
406                                        <div class="nav-col-links">
407                                        <a href="${ROOT_URL}/mutual-funds/" data-track-click="top_nav_mutual_fund_research"><img src="/assets/images/MutualFund.webp"
408                                                alt="Mutual Fund Research Icon"><div><span class="np-title">Mutual Fund Research</span><small class="np-desc">Explore schemes, data and overlap</small></div></a>
409                                        <a href="${ROOT_URL}/news-articles" data-track-click="top_nav_learn_news"><img src="/assets/images/news1.webp"
410                                                alt="News Icon"><div><span class="np-title">Finnovate in the News</span><small class="np-desc">Our press coverage and media mentions</small></div></a>
411                                        </div>
412                                    </div>
413                                </div>
414                            </div>
415                        </li>
416
417                        <!-- Mobile-inline essentials -->
418                        <li class="mobile-inline-link">
419                            <a href="${ROOT_URL}/calculators" data-track-click="mobile_nav_tools">Tools</a>
420                        </li>
421
422
423                        <!-- <li class="scroll-to-section"><a href="#frequently-question">Frequently Questions</a></li> -->
424                            <li class="mega-drop-down tools-mega">
425                                <div class="dropbtn-container">
426                                    <a href="${ROOT_URL}/calculators" class="dropbtn" data-track-click="top_nav_tools">Tools <i class="fas fa-chevron-down"></i></a>
427                                </div>
428                                <div class="mega-menu tools-menu">
429                                    <div class="mega-menu-wrap">
430                                        <div class="mega-header-row">
431                                            <p class="mega-label">Calculators</p>
432                                            <span class="mega-trending-chip">&#9733; Trending Now</span>
433                                        </div>
434                                        <div class="mega-grid mega-grid--featured">
435                                            <a class="mega-link mega-link--featured"
436                                                href="${ROOT_URL}/fire-calculator" data-track-click="top_nav_fire_calculator">
437                                                <img src="/assets/images/fire.webp" alt="FIRE Icon">
438                                                <div>
439                                                    <span class="mega-title-row">
440                                                        <span class="mega-title">FIRE</span>
441                                                        <span class="mega-badge mega-badge--green">Trending</span>
442                                                    </span>
443                                                    <small class="mega-desc">See when work becomes optional</small>
444                                                </div>
445                                            </a>
446                                            <a class="mega-link mega-link--featured"
447                                                href="${ROOT_URL}/swp-calculator" data-track-click="top_nav_swp_calculator">
448                                                <img src="/assets/images/swp-icon.webp" alt="SWP Icon">
449                                                <div>
450                                                    <span class="mega-title-row">
451                                                        <span class="mega-title">SWP</span>
452                                                        <span class="mega-badge mega-badge--blue">Popular</span>
453                                                    </span>
454                                                    <small class="mega-desc">Plan steady withdrawals</small>
455                                                </div>
456                                            </a>
457                                            <a class="mega-link mega-link--featured"
458                                                href="${ROOT_URL}/income-tax-calculator" data-track-click="top_nav_income_tax_calculator">
459                                                <img src="/assets/images/taxsave.webp" alt="Income Tax Calculator Icon">
460                                                <div>
461                                                    <span class="mega-title-row">
462                                                        <span class="mega-title">Income Tax</span>
463                                                        <span class="mega-badge mega-badge--new">New</span>
464                                                    </span>
465                                                    <small class="mega-desc">Compare old vs new tax regime</small>
466                                                </div>
467                                            </a>
468                                        </div>
469                                        <div class="mega-divider"><span>More Tools</span></div>
470                                        <div class="mega-grid mega-grid--more">
471                                            <a class="mega-link mega-link--sm"
472                                                href="https://www.finnovate.in/finnfit-quiz">
473                                                <img src="/assets/images/scorefinnfit.webp" alt="FinnFit Icon">
474                                                <div>
475                                                    <span class="mega-title">FinnFit Score</span>
476                                                    <small class="mega-desc">Gauge your financial fitness</small>
477                                                </div>
478                                            </a>
479                                            <a class="mega-link mega-link--sm"
480                                                href="${ROOT_URL}/capital-gain-tax-calculator" data-track-click="top_nav_capital_gains_calculator">
481                                                <img src="/assets/images/equity-icon.webp" alt="Capital Gains Icon">
482                                                <div>
483                                                    <span class="mega-title">Capital Gains</span>
484                                                    <small class="mega-desc">Estimate your tax on gains</small>
485                                                </div>
486                                            </a>
487                                            <a class="mega-link mega-link--sm"
488                                                href="${ROOT_URL}/hra-calculator" data-track-click="top_nav_hra_calculator">
489                                                <img src="/assets/images/fixed-income-icon.webp" alt="HRA Calculator Icon">
490                                                <div>
491                                                    <span class="mega-title">HRA</span>
492                                                    <small class="mega-desc">Work out your HRA exemption</small>
493                                                </div>
494                                            </a>
495                                            <a class="mega-link mega-link--sm"
496                                                href="${ROOT_URL}/xirr-calculator" data-track-click="top_nav_xirr_calculator">
497                                                <img src="/assets/images/xirr-icon.webp" alt="XIRR Icon">
498                                                <div>
499                                                    <span class="mega-title">XIRR</span>
500                                                    <small class="mega-desc">Measure investment returns</small>
501                                                </div>
502                                            </a>
503                                            <a class="mega-link mega-link--sm"
504                                                href="${ROOT_URL}/retirement-calculator" data-track-click="top_nav_retirement_calculator">
505                                                <img src="/assets/images/retire.webp" alt="Retirement Icon">
506                                                <div>
507                                                    <span class="mega-title">Retirement</span>
508                                                    <small class="mega-desc">Plan what you need at 60</small>
509                                                </div>
510                                            </a>
511                                            <a class="mega-link mega-link--sm"
512                                                href="${ROOT_URL}/sip-calculator" data-track-click="top_nav_sip_calculator">
513                                                <img src="/assets/images/sip-icon.webp" alt="SIP Icon">
514                                                <div>
515                                                    <span class="mega-title">SIP</span>
516                                                    <small class="mega-desc">Project how your SIP grows</small>
517                                                </div>
518                                            </a>
519                                            <a class="mega-link mega-link--sm"
520                                                href="${ROOT_URL}/my-first-1-crore" data-track-click="top_nav_1_crore">
521                                                <img src="/assets/images/score.webp" alt="1 Crore Icon">
522                                                <div>
523                                                    <span class="mega-title">1 Crore</span>
524                                                    <small class="mega-desc">Map the journey to your first crore</small>
525                                                </div>
526                                            </a>
527                                            <a class="mega-link mega-link--sm"
528                                                href="${ROOT_URL}/emi-calculator" data-track-click="top_nav_emi_calculator">
529                                                <img src="/assets/images/emi-icon.webp" alt="EMI Icon">
530                                                <div>
531                                                    <span class="mega-title">EMI</span>
532                                                    <small class="mega-desc">Estimate monthly repayments</small>
533                                                </div>
534                                            </a>
535                                            <a class="mega-link mega-link--sm"
536                                                href="${ROOT_URL}/cagr-calculator" data-track-click="top_nav_cagr_calculator">
537                                                <img src="/assets/images/cagr-icon.webp" alt="CAGR Icon">
538                                                <div>
539                                                    <span class="mega-title">CAGR</span>
540                                                    <small class="mega-desc">Check average annual returns</small>
541                                                </div>
542                                            </a>
543                                            <a class="mega-link mega-link--sm"
544                                                href="${ROOT_URL}/child-education-plan-calculator" data-track-click="top_nav_child_education_calculator">
545                                                <img src="/assets/images/education-icon.webp" alt="Child Education Icon">
546                                                <div>
547                                                    <span class="mega-title">Child Education</span>
548                                                    <small class="mega-desc">Plan future education costs</small>
549                                                </div>
550                                            </a>
551                                            <a class="mega-link mega-link--sm"
552                                                href="${ROOT_URL}/mutual-funds/overlap-calculator" data-track-click="top_nav_mf_overlap_calculator">
553                                                <img src="/assets/images/overlap1.svg" alt="MF Overlap Icon">
554                                                <div>
555                                                    <span class="mega-title">MF Overlap</span>
556                                                    <small class="mega-desc">See common stocks across funds</small>
557                                                </div>
558                                            </a>
559
560                                        </div>
561                                        <div class="mega-footer-bar">
562                                            <a href="${ROOT_URL}/calculators" class="mega-all-link" data-track-click="top_nav_view_all_calculators">View all calculators &rarr;</a>
563                                        </div>
564                                    </div>
565                                </div>
566                            </li>
567
568                        <li class="scroll-to-section">
569                            <a href="https://www.financialopd.com/?utm_origin=Organic&utm_source=Website&utm_medium=${utmMedium}&utm_campaign=top_nav_financialopd&utm_term=Nav%20Bar&utm_content=DOCTORPro" style="text-transform: none;"><img src="/assets/images/medical-symbol.png" alt="DoctorPro Icon" style="height: 16px; width: 16px; margin-right: 6px; vertical-align: -2px;"> DOCTORPro</a>
570                        </li>
571
572
573                        <li class="mob_view nav-call-cta">
574                            <a href="javascript:;" onclick="return window.openCalendlyPopup && window.openCalendlyPopup('https://calendly.com/finnovate/financial-fitness-consultation?utm_origin=Organic&utm_source=Website&utm_medium=${utmMedium}&utm_campaign=top_nav_call_cta&utm_term=green_button&utm_content=Schedule%20Call');" class="CalendlyPopup" style=" background: #009356 ;color: #fff;padding: 0px 25px;border-radius:
575                                10px;">Schedule
576                                Call</a>
577                        </li><!-- <li class="scroll-to-section"><a href="testimonials">Testimonials</a></li> -->
578
579                        <li class="mob_view">
580                            <a href="https://wealth.finnovate.in/?utm_origin=Organic&utm_source=Website&utm_medium=${utmMedium}
580&utm_campaign=top_nav_members_login&utm_term=link&utm_content=Login">Login</a>
581
582                        </li>
583                    </ul><a class='menu-trigger'><span>Menu</span></a> <!-- ***** Menu End ***** -->
584    `;
585  };
586
587  var injectUnifiedNav = function () {
588    var nav = document.querySelector(".header-area .main-nav");
589    if (!nav) {
590      return;
591    }
592    nav.innerHTML = buildUnifiedNavMarkup();
593    injectMobileQuickLinks();
594  };
595
596  // Mobile quick links fallback (ensures Tools/DoctorPro/CTA visible)
597  var injectMobileQuickLinks = function () {
598    var navList = document.querySelector(".header-area .main-nav .nav");
599    // legacy: no-op now that mobile inline links are in markup
600    return;
601  };
602
603  var applyNavTheme = function () {
604    var header = document.querySelector("header.header-area");
605    if (!header) {
606      return;
607    }
608    if (hasDarkNav()) {
609      header.classList.add("dark-nav");
610    } else {
611      header.classList.remove("dark-nav");
612    }
613  };
614
615  var setLogoForTheme = function () {
616    var logoImg = $(".logo img");
617    if (!logoImg.length) {
618      return;
619    }
620    logoImg.attr("src", getUnifiedLogoSrc());
621  };
622
623  injectUnifiedNav();
624  applyNavTheme();
625  setLogoForTheme();
626  $(window).on("resize", setLogoForTheme);
627
628  $("#insurance").owlCarousel({
629    loop: true,
630    margin: 20,
631    nav: true,
632    pagination: false,
633
634    responsive: {
635      0: {
636        items: 1
637      },
638      600: {
639        items: 2
640      },
641      1000: {
642        items: 4
643      }
644    }
645
646
647
648  });
649  var owl = $('#staff');
650  owl.owlCarousel({
651    margin: 20,
652    dots: false,
653    nav: true,
654    navText: [
655      "<i class='fa fa-arrow-left'></i>",
656      "<i class='fa fa-arrow-right'></i>"
657    ],
658    autoplay: true,
659    autoplayHoverPause: true,
660    responsive: {
661      0: {
662        items: 1
663      },
664      600: {
665        items: 2
666      },
667      1000: {
668        items: 2
669      },
670      1200: {
671        items: 4
672      }
673    }
674  });
675
676  // Product and Marketing ST
677  var owl = $('#productmarketing');
678  owl.owlCarousel({
679    margin: 20,
680    dots: false,
681    nav: true,
682    navText: [
683      "<i class='fa fa-arrow-left'></i>",
684      "<i class='fa fa-arrow-right'></i>"
685    ],
686    autoplay: true,
687    autoplayHoverPause: true,
688    responsive: {
689      0: {
690        items: 1
691      },
692      600: {
693        items: 2
694      },
695      1000: {
696        items: 2
697      },
698      1200: {
699        items: 4
700      }
701    }
702  });
703  // Product and Marketing ED
704
705
706  // HR and Operations ST
707  var owl = $('#hrandoperations');
708  owl.owlCarousel({
709    margin: 20,
710    dots: false,
711    nav: true,
712    navText: [
713      "<i class='fa fa-arrow-left'></i>",
714      "<i class='fa fa-arrow-right'></i>"
715    ],
716    autoplay: true,
717    autoplayHoverPause: true,
718    responsive: {
719      0: {
720        items: 1
721      },
722      600: {
723        items: 2
724      },
725      1000: {
726        items: 2
727      },
728      1200: {
729        items: 4
730      }
731    }
732  });
733  // HR and Operations ED
734
735
736  var owl = $('#course');
737  owl.owlCarousel({
738    margin: 20,
739    dots: false,
740    nav: false,
741    loop: true,
742
743    stagePadding: 100,
744    responsive: {
745      0: {
746        items: 1,
747        stagePadding: 0,
748        margin: 10,
749      },
750      600: {
751        items: 1,
752        stagePadding: 0,
753        margin: 10,
754      },
755      1000: {
756        items: 1
757      },
758      1200: {
759        items: 2,
760
761      }
762    }
763  });
764
765  var owl = $('#testimonial');
766  owl.owlCarousel({
767    margin: 20,
768    dots: false,
769    nav: true,
770    loop: true,
771    navText: [
772      "<i class='fa fa-chevron-left'></i>",
773      "<i class='fa fa-chevron-right'></i>"
774    ],
775
776    responsive: {
777      0: {
778        items: 1,
779        nav: false,
780      },
781      600: {
782        items: 2,
783        nav: false,
784      },
785      1000: {
786        items: 1
787      },
788      1200: {
789        items: 1
790      }
791    }
792  });
793  var owl = $('#family');
794  owl.owlCarousel({
795    margin: 20,
796    dots: true,
797    nav: false,
798    navText: [
799      "<i class='fa fa-chevron-left'></i>",
800      "<i class='fa fa-chevron-right'></i>"
801    ],
802
803    responsive: {
804      0: {
805        items: 1
806      },
807      600: {
808        items: 1
809      },
810      1000: {
811        items: 1
812      },
813      1200: {
814        items: 1
815      }
816    }
817  });
818  var owl = $('#blog');
819  owl.owlCarousel({
820    margin: 10,
821    dots: false,
822    nav: true,
823
824
825    responsive: {
826      0: {
827        items: 1,
828        nav: false,
829      },
830      600: {
831        items: 1,
832        nav: false
833      },
834      1000: {
835        items: 2
836      },
837      1200: {
838        items: 3
839      }
840    }
841  });
842  $(window).scroll(function () {
843    var scroll = $(window).scrollTop();
844    var boxHeight = $(".header-text").height() || 0;
845    var headerEl = $("header");
846    var headerHeight = headerEl.height() || 0;
847
848    if (boxHeight && scroll >= boxHeight - headerHeight) {
849      headerEl.addClass("background-header");
850    } else {
851      headerEl.removeClass("background-header");
852    }
853
854    setLogoForTheme();
855  });
856
857  // Mobile menu dropdown
858  $(".submenu").on("click", function () {
859    var width = $(window).width();
860    if (width < 992) {
861      $(".submenu ul").toggleClass("active");
862    }
863  });
864
865  // Scroll animation init
866  window.sr = new scrollReveal();
867
868  // Menu Dropdown Toggle
869  // Create a shared mobile backdrop once
870  $(function () {
871    if (!$(".mobile-nav-backdrop").length) {
872      $("body").append('<div class="mobile-nav-backdrop"></div>');
873    }
874  });
875
876  $(document).on("click", ".menu-trigger", function () {
877    $(this).toggleClass("active");
878    var isOpen = $("body").hasClass("nav-open");
879    if (isOpen) {
880      $("body").removeClass("nav-open");
881      $(".tools-menu").removeClass("clicked");
882      $(".dropdown").removeClass("is-open");
883      $(".dropdown-content").slideUp(150);
884    } else {
885      $("body").addClass("nav-open");
886      injectMobileQuickLinks();
887      // Services expanded by default when the drawer opens
888      var $services = $(".header-area .main-nav .nav > li.dropdown").first();
889      if ($services.length && !$services.hasClass("is-open")) {
890        $services.addClass("is-open");
891        $services.find(".dropdown-content").first().show();
892      }
893    }
894  });
895
896  // Close mobile nav when tapping backdrop
897  $(document).on("click", ".mobile-nav-backdrop", function () {
898    $("body").removeClass("nav-open");
899    $(".menu-trigger").removeClass("active");
900    $(".dropdown").removeClass("is-open").find(".dropdown-content").slideUp(150);
901    $(".tools-menu").removeClass("clicked");
902  });
903
904  $(function () {
905    // Toggle tools mega menu on tap for mobile; keep desktop click fallback
906    $('.mega-drop-down').on('click', function (e) {
907      var $targetToggle = $(e.target).closest('.dropbtn-container');
908      if ($(window).width() < 992) {
909        if ($targetToggle.length) {
910          e.preventDefault();
911          e.stopPropagation();
912          var $menu = $(this).find('.tools-menu').first();
913          $('.tools-menu').not($menu).removeClass('clicked');
914          $menu.toggleClass('clicked');
915        }
916        return;
917      }
918      if ($targetToggle.length) {
919        $('.mega-menu').toggleClass('clicked');
920      }
921    });
922
923    // Mobile dropdown toggles for standard dropdowns (About, Products, Learn)
924    $(document).on('click', '.dropdown > .dropbtn-container > .dropbtn', function (e) {
925      if ($(window).width() >= 992) {
926        return;
927      }
928      var $dropdown = $(this).closest('.dropdown');
929      if ($dropdown.hasClass('tools-mega')) {
930        return;
931      }
932      e.preventDefault();
933      e.stopPropagation();
934      var $content = $dropdown.find('.dropdown-content').first();
935      var isOpen = $dropdown.hasClass('is-open');
936      $('.dropdown').not($dropdown).removeClass('is-open').find('.dropdown-content').slideUp(150);
937      if (isOpen) {
938        $dropdown.removeClass('is-open');
939        $content.slideUp(150);
940      } else {
941        $dropdown.addClass('is-open');
942        $content.slideDown(180);
943      }
944    });
945
946    // Mobile: level-2 group toggles inside nav panels (collapsed by default)
947    $(document).on('click', '.nav-panel .nav-col-label', function () {
948      if ($(window).width() >= 992) {
949        return;
950      }
951      var $col = $(this).closest('.nav-col');
952      var $links = $col.find('.nav-col-links').first();
953      if ($col.hasClass('nav-col-open')) {
954        $col.removeClass('nav-col-open');
955        $links.slideUp(160);
956      } else {
957        $col.addClass('nav-col-open');
958        $links.slideDown(180);
959      }
960    });
961
962    // Close nav after selecting a non-dropdown link on mobile
963    $(document).on('click', '.header-area .nav li:not(.dropdown) > a', function () {
964      if ($(window).width() >= 992) {
965        return;
966      }
967      $(".menu-trigger").removeClass("active");
968      $("body").removeClass("nav-open");
969      $(".dropdown").removeClass("is-open").find('.dropdown-content').hide();
970      $(".tools-menu").removeClass("clicked");
971    });
972
973    // Close nav when selecting a dropdown item or tool item on mobile
974    $(document).on('click', '.header-area .dropdown-content a, .header-area .tools-menu .mega-link', function () {
975      if ($(window).width() >= 992) {
976        return;
977      }
978      $(".menu-trigger").removeClass("active");
979      $("body").removeClass("nav-open");
980      $(".dropdown").removeClass("is-open").find('.dropdown-content').hide();
981      $(".tools-menu").removeClass("clicked");
982    });
983
984    // Reset mobile nav state on resize to desktop
985    $(window).on('resize', function () {
986      if ($(window).width() >= 992) {
987        $("body").removeClass("nav-open");
988        $(".menu-trigger").removeClass("active");
989        $(".dropdown").removeClass("is-open").find('.dropdown-content').removeAttr('style');
990        $(".tools-menu").removeClass("clicked");
991      }
992      injectMobileQuickLinks();
993    });
994  });
995
996  // Menu elevator animation
997  $("a[href*=\\#]:not([href=\\#])").on("click", function () {
998    if (
999      location.pathname.replace(/^\//, "") ==
1000      this.pathname.replace(/^\//, "") &&
1001      location.hostname == this.hostname
1002    ) {
1003      var target = $(this.hash);
1004      target = target.length ? target : $("[name=" + this.hash.slice(1) + "]");
1005      if (target.length) {
1006        var width = $(window).width();
1007        if (width < 991) {
1008          $(".menu-trigger").removeClass("active");
1009          $(".header-area .nav").slideUp(200);
1010        }
1011        $("html,body").animate(
1012          {
1013            scrollTop: target.offset().top - 80
1014          },
1015          700
1016        );
1017        return false;
1018      }
1019    }
1020  });
1021
1022  $(document).ready(function () {
1023    $(document).on("scroll", onScroll);
1024
1025    //smoothscroll
1026    $('a[href^="#"]').on("click", function (e) {
1027      e.preventDefault();
1028      $(document).off("scroll");
1029
1030      $("a").each(function () {
1031        $(this).removeClass("active");
1032      });
1033      $(this).addClass("active");
1034
1035      var target = this.hash,
1036        menu = target;
1037      var target = $(this.hash);
1038      $("html, body")
1039        .stop()
1040        .animate(
1041          {
1042            scrollTop: target.offset().top - 79
1043          },
1044          500,
1045          "swing",
1046          function () {
1047            window.location.hash = target;
1048            $(document).on("scroll", onScroll);
1049          }
1050        );
1051    });
1052  });
1053
1054  function onScroll(event) {
1055    var scrollPos = $(document).scrollTop();
1056    $(".nav a").each(function () {
1057      var currLink = $(this);
1058
1059      try {
1060        var refElement = $(currLink.attr("href"));
1061        if (
1062          refElement.length &&
1063          refElement.position().top <= scrollPos &&
1064          refElement.position().top + refElement.height() > scrollPos
1065        ) {
1066          $(".nav ul li a").removeClass("active");
1067          currLink.addClass("active");
1068        } else {
1069          currLink.removeClass("active");
1070        }
1071      } catch (e) {
1072        // Ignore href='javascript:;'
1073      }
1074    });
1075  }
1076
1077  var Accordion = {
1078    settings: {
1079      // Expand the first item by default
1080      first_expanded: false,
1081      // Allow items to be toggled independently
1082      toggle: false
1083    },
1084
1085    openAccordion: function (toggle, content) {
1086      if (content.children.length) {
1087        toggle.classList.add("is-open");
1088        var final_height = Math.floor(content.children[0].offsetHeight);
1089        content.style.height = final_height + "px";
1090      }
1091    },
1092
1093    closeAccordion: function (toggle, content) {
1094      toggle.classList.remove("is-open");
1095      content.style.height = 0;
1096    },
1097
1098    init: function (el) {
1099      var _this = this;
1100
1101      // Override default settings with classes
1102      var is_first_expanded = _this.settings.first_expanded;
1103      if (el.classList.contains("is-first-expanded")) is_first_expanded = true;
1104      var is_toggle = _this.settings.toggle;
1105      if (el.classList.contains("is-toggle")) is_toggle = true;
1106
1107      // Loop through the accordion's sections and set up the click behavior
1108      var sections = el.getElementsByClassName("accordion");
1109      var all_toggles = el.getElementsByClassName("accordion-head");
1110      var all_contents = el.getElementsByClassName("accordion-body");
1111      for (var i = 0; i < sections.length; i++) {
1112        var section = sections[i];
1113        var toggle = all_toggles[i];
1114        var content = all_contents[i];
1115
1116        // Click behavior
1117        toggle.addEventListener("click", function (e) {
1118          if (!is_toggle) {
1119            // Hide all content areas first
1120            for (var a = 0; a < all_contents.length; a++) {
1121              _this.closeAccordion(all_toggles[a], all_contents[a]);
1122            }
1123
1124            // Expand the clicked item
1125            _this.openAccordion(toggle, content);
1126          } else {
1127            // Toggle the clicked item
1128            if (toggle.classList.contains("is-open")) {
1129              _this.closeAccordion(toggle, content);
1130            } else {
1131              _this.openAccordion(toggle, content);
1132            }
1133          }
1134        });
1135
1136        // Expand the first item
1137        if (i === 0 && is_first_expanded) {
1138          _this.openAccordion(toggle, content);
1139        }
1140      }
1141    }
1142  };
1143
1144  (function () {
1145    // Initiate all instances on the page
1146    var accordions = document.getElementsByClassName("accordions");
1147    for (var i = 0; i < accordions.length; i++) {
1148      Accordion.init(accordions[i]);
1149    }
1150  })();
1151
1152  // Home seperator
1153  if ($(".home-seperator").length) {
1154    $(".home-seperator .left-item, .home-seperator .right-item").imgfix();
1155  }
1156
1157  // Home number counterup
1158  if ($(".count-item").length) {
1159    $(".count-item strong").counterUp({
1160      delay: 10,
1161      time: 1000
1162    });
1163  }
1164
1165  // Page loading animation
1166  $(window).on("load", function () {
1167    if ($(".cover").length) {
1168      $(".cover").parallax({
1169        imageSrc: $(".cover").data("image"),
1170        zIndex: "1"
1171      });
1172    }
1173
1174    $("#preloader").animate(
1175      {
1176        opacity: "0"
1177      },
1178      600,
1179      function () {
1180        setTimeout(function () {
1181          $("#preloader")
1182            .css("visibility", "hidden")
1183            .fadeOut();
1184        }, 300);
1185      }
1186    );
1187  });
1188
1189
1190  var TabBlock = {
1191    s: {
1192      animLen: 200
1193    },
1194
1195    init: function () {
1196      TabBlock.bindUIActions();
1197      TabBlock.hideInactive();
1198    },
1199
1200    bindUIActions: function () {
1201      $('.tabBlock-tabs').on('click', '.tabBlock-tab', function () {
1202        TabBlock.switchTab($(this));
1203      });
1204    },
1205
1206    hideInactive: function () {
1207      var $tabBlocks = $('.tabBlock');
1208
1209      $tabBlocks.each(function (i) {
1210        var
1211          $tabBlock = $($tabBlocks[i]),
1212          $panes = $tabBlock.find('.tabBlock-pane'),
1213          $activeTab = $tabBlock.find('.tabBlock-tab.is-active');
1214
1215        $panes.hide();
1216        $($panes[$activeTab.index()]).show();
1217      });
1218    },
1219
1220    switchTab: function ($tab) {
1221      var $context = $tab.closest('.tabBlock');
1222
1223      if (!$tab.hasClass('is-active')) {
1224        $tab.siblings().removeClass('is-active');
1225        $tab.addClass('is-active');
1226
1227        TabBlock.showPane($tab.index(), $context);
1228      }
1229    },
1230
1231    showPane: function (i, $context) {
1232      var $panes = $context.find('.tabBlock-pane');
1233
1234      // Normally I'd frown at using jQuery over CSS animations, but we can't transition between unspecified variable heights, right? If you know a better way, I'd love a read it in the comments or on Twitter @johndjameson
1235      $panes.slideUp(TabBlock.s.animLen);
1236      $($panes[i]).slideDown(TabBlock.s.animLen);
1237    }
1238  };
1239
1240  $(function () {
1241    TabBlock.init();
1242  });
1243
1244  var buildUnifiedFooterMarkup = function () {
1245    var footerMedium = getFooterMedium();
1246    var calendlyFooterUrl = `https://calendly.com/finnovate/financial-fitness-consultation?utm_origin=Organic&utm_source=Website&utm_medium=${footerMedium}&utm_campaign=footer_call_cta&utm_term=footer_button&utm_content=Book%20a%20Call`;
1247    var appLinkAndroid = buildAppLink(footerMedium, "footer_app_download", "android");
1248    var appLinkIos = buildAppLink(footerMedium, "footer_app_download", "ios");
1249    var currentYear = new Date().getFullYear();
1250    // Years of trust since Finnovate was founded on 7 July 2007 (auto-updates each anniversary).
1251    var yearsOfTrust = (function () {
1252      var now = new Date();
1253      var y = now.getFullYear() - 2007;
1254      if (now.getMonth() < 6 || (now.getMonth() === 6 && now.getDate() < 7)) { y--; }
1255      return y;
1256    })();
1257    return `
1258      <div class="footer-shell container">
1259        <div class="footer-top">
1260          <div class="footer-brand">
1261              <a href="/" class="footer-logo" aria-label="Finnovate home">
1262                <img src="/assets/images/logo-white.svg" alt="Finnovate Financial Services logo">
1263              </a>
1264              <p class="footer-tagline">
1265                Finnovate is a financial fitness planning platform that helps successful professionals stay disciplined on their journey to financial independence.
1266              </p>
1267              <a class="footer-cta-btn footer-tagline-cta" href="javascript:;" onclick="return window.openCalendlyFooter && window.openCalendlyFooter('${calendlyFooterUrl}');" rel="noopener">
1268                Schedule a Call
1269              </a>
1270              <div class="footer-metrics">
1271                <div class="footer-metric">
1272                  <span class="metric-value">${yearsOfTrust}+</span>
1273                  <span class="metric-label">Years of trust</span>
1274                </div>
1275                <div class="footer-metric">
1276                  <span class="metric-value">35,000+</span>
1277                  <span class="metric-label">Families Empowered</span>
1278                </div>
1279                
1280              </div>
1281
1282           
1283              <div class="footer-cta-inline">
1284                <p class="footer-store-copy">
1285                  Track your investments, talk with our advisors, and plan your financial life from anywhere.
1286                </p>
1287                
1288                <div class="footer-cta-actions">
1289                  <div class="appBtn footer-app-buttons">
1290                    <a href="${appLinkAndroid}" target="_blank" rel="noopener" data-track-click="footer_app_download_android">
1291                      <img src="/assets/images/playstore.png" alt="Get it on Google Play">
1292                    </a>
1293                    <a href="${appLinkIos}" target="_blank" rel="noopener" data-track-click="footer_app_download_ios">
1294                      <img src="/assets/images/appstore.png" alt="Download on the App Store">
1295                    </a>
1296                  </div>
1297                </div>
1298              </div>
1299              
1300            </div>
1301            <div class="footer-links-grid">
1302            <div class="footer-link-group">
1303              <p class="link-label">Services</p>
1304              <ul class="footer-list">
1305                <li><a href="https://www.finnovate.in/advisory/financial-planning">Financial Planning</a></li>
1306                <li><a href="https://www.finnovate.in/advisory/wealth-management">Wealth Management</a></li>
1307                <li><a href="https://www.finnovate.in/advisory/tax-planning">Tax Services</a></li>
1308                <li><a href="https://www.finnovate.in/advisory/estate-planning">Estate Planning</a></li>
1309                <li><a href="https://www.finnovate.in/advisory/retirement-planning">Retirement Planning</a></li>
1310              </ul>
1311            </div>
1312            <div class="footer-link-group">
1313              <p class="link-label">Platforms</p>
1314              <ul class="footer-list">
1315                <li><a href="https://www.finnovate.in/learn/finnversity">FinnVersity</a></li>
1316                <li><a href="https://www.finnovate.in/transact-page">FinnVest</a></li>
1317                <li><a href="https://www.finnovate.in/track-page">FinnTrack</a></li>
1318                <li><a href="https://www.finnovate.in/services/insurance-planning">FinnSure</a></li>
1319              </ul>
1320            </div>
1321            <div class="footer-link-group">
1322              <p class="link-label">Company</p>
1323              <ul class="footer-list">
1324                <li><a href="https://www.finnovate.in/about-us">Our Story</a></li>
1325                <li><a href="/partners">Partners</a></li>
1326                <li><a href="https://careers.finnovate.in" target="_blank" rel="noopener">Careers</a></li>
1327                <li><a href="https://www.finnovate.in/contact-us">Contact Us</a></li>
1328                <li><a href="https://www.finnovate.in/testimonials">Testimonials</a></li>
1329              </ul>
1330            </div>
1331            <div class="footer-link-group">
1332              <p class="link-label">Legal</p>
1333              <ul class="footer-list">
1334                <li><a href="/terms-conditions">Terms &amp; Conditions</a></li>
1335                <li><a href="/privacy-policy">Privacy Policy</a></li>
1336                <li><a href="/refund-policy">Refund Policy</a></li>
1337              </ul>
1338            </div>
1339            <div class="footer-link-group">
1340              <p class="link-label">Investment Adviser</p>
1341              <ul class="footer-list">
1342                <li><a href="/sebi-investor-charter">Investor Charter</a></li>
1343                <li><a href="/complaints">Complaints Status</a></li>
1344                <li><a href="/Lodge-Complaints">Lodge a Complaint</a></li>
1345                <li><a href="/Compliant-redressal">Complaint Redressal</a></li>
1346                <li><a href="javascript:;" onclick="regulatory_disclosure_popup()">Regulatory Disclosure</a></li>
1347                <li><a href="https://scores.sebi.gov.in" target="_blank" rel="noopener">SEBI SCORES</a></li>
1348                <li><a href="https://smartodr.in/" target="_blank" rel="noopener">SmartODR</a></li>
1349              </ul>
1350            </div>
1351            <div class="footer-link-group">
1352              <p class="link-label">PMS</p>
1353              <ul class="footer-list">
1354                <li><a href="/pms/">Portfolio Management (PMS)</a></li>
1355                <li><a href="/pms/investor-charter">PMS Investor Charter</a></li>
1356                <li><a href="/pms/complaints">PMS Complaints</a></li>
1357                <li><a href="/pms/disclosure-documents">Disclosure Documents</a></li>
1358                <li><a href="/pms/accredited-investors">Accredited Investors</a></li>
1359                <li><a href="/pms/fee-calculator">PMS Fee Calculator</a></li>
1360                <li><a href="https://scores.sebi.gov.in" target="_blank" rel="noopener">SEBI SCORES</a></li>
1361              </ul>
1362            </div>
1363          </div>
1364        </div>
1365        <div class="footer-seo-links">
1366          <div class="footer-seo-row">
1367            <span class="footer-seo-label">Top Searched Schemes:</span>
1368            <a href="${ROOT_URL}/mutual-funds/hdfc-flexi-cap-fund-g">HDFC Flexi Cap Fund</a>
1369            <a href="${ROOT_URL}/mutual-funds/hdfc-balanced-advantage-fund-g">HDFC Balanced Advantage Fund</a>
1370            <a href="${ROOT_URL}/mutual-funds/parag-parikh-flexi-cap-fund-g">Parag Parikh Flexi Cap Fund</a>
1371            <a href="${ROOT_URL}/mutual-funds/nippon-india-small-cap-fund-g">Nippon India Small Cap Fund</a>
1372            <a href="${ROOT_URL}/mutual-funds/sbi-small-cap-fund-g">SBI Small Cap Fund</a>
1373            <a href="${ROOT_URL}/mutual-funds/motilal-oswal-midcap-fund-g">Motilal Oswal Midcap Fund</a>
1374            <a href="${ROOT_URL}/mutual-funds/uti-nifty-50-index-fund-g">UTI Nifty 50 Index Fund</a>
1375            <a href="${ROOT_URL}/mutual-funds/quant-small-cap-fund-g">Quant Small Cap Fund</a>
1376          </div>
1377          <div class="footer-seo-row">
1378            <span class="footer-seo-label">Important Tools &amp; Calculators:</span>
1379            <a href="${ROOT_URL}/sip-calculator">SIP Calculator</a>
1380            <a href="${ROOT_URL}/step-up-sip-calculator">Step-up SIP Calculator</a>
1381            <a href="${ROOT_URL}/swp-calculator">SWP Calculator</a>
1382            <a href="${ROOT_URL}/xirr-calculator">XIRR Calculator</a>
1383            <a href="${ROOT_URL}/cagr-calculator">CAGR Calculator</a>
1384            <a href="${ROOT_URL}/emi-calculator">EMI Calculator</a>
1385            <a href="${ROOT_URL}/capital-gain-tax-calculator">Capital Gains Tax Calculator</a>
1386            <a href="${ROOT_URL}/retirement-calculator">Retirement Calculator</a>
1387            <a href="${ROOT_URL}/mutual-funds/overlap-calculator">MF Overlap Calculator</a>
1388            <a href="${ROOT_URL}/calculators">All Calculators</a>
1389          </div>
1390          <div class="footer-seo-row">
1391            <span class="footer-seo-label">Learn More About Mutual Funds:</span>
1392            <a href="${ROOT_URL}/mutual-funds/">Explore Mutual Funds</a>
1393            <a href="${ROOT_URL}/mutual-funds.html">About Mutual Funds</a>
1394            <a href="${ROOT_URL}/learn/finnversity">FinnVersity</a>
1395            <a href="${ROOT_URL}/learn/blog-listing">Mutual Fund Blogs</a>
1396          </div>
1397        </div>
1398        <p class="footer-meta-head">Finnovate operates two separate SEBI-registered entities.</p>
1399        <div class="footer-meta footer-meta--entities">
1400          <div class="meta-card entity-card">
1401            <p class="entity-badge">Investment Adviser</p>
1402            <p class="entity-name">Finnovate Financial Services Pvt Ltd</p>
1403            <p class="entity-reg">SEBI RIA &middot; INA000013518</p>
1404            <p class="mc-sub addr">Registered Office: The Summit Business Park, 7th Floor, Unit No. 703, Andheri Kurla Road, Andheri East, Mumbai 400093.</p>
1405            <p class="mc-sub">Fee payments (validated UPI): <b>finnovatefinancial.ia@validicici</b></p>
1406            <p class="mc-person">Nehal Mota<span class="mc-role">Principal Officer</span></p>
1407            <p class="mc-sub"><a href="mailto:[email protected]">[email protected]</a> &middot; <a href="tel:9223380009">9223380009</a></p>
1408            <p class="mc-person">Priyanka Kelkar<span class="mc-role">Compliance Officer</span></p>
1409            <p class="mc-sub"><a href="mailto:[email protected]">[email protected]</a></p>
1410            <p class="mc-sub">Grievance: <a href="mailto:[email protected]">[email protected]</a> &middot; <a href="tel:8369625478">8369625478</a></p>
1411          </div>
1412          <div class="meta-card entity-card">
1413            <p class="entity-badge">Portfolio Manager</p>
1414            <p class="entity-name">Finnovate Investment Managers Pvt Ltd</p>
1415            <p class="entity-reg">SEBI PMS &middot; INP000010104</p>
1416            <p class="mc-sub addr">Registered Office: 703, The Summit Business Bay, Gundavali, Chakala MIDC, Mumbai 400093.</p>
1417            <p class="mc-person">Naveen Kumar Singh<span class="mc-role">Principal Officer</span></p>
1418            <p class="mc-sub"><a href="mailto:[email protected]">[email protected]</a> &middot; <a href="tel:9867325874">9867325874</a></p>
1419            <p class="mc-person">Pravin Mayekar<span class="mc-role">Compliance Officer</span></p>
1420            <p class="mc-sub"><a href="mailto:[email protected]">[email protected]</a> &middot; <a href="tel:9619783006">9619783006</a></p>
1421          </div>
1422          <div class="meta-card entity-card">
1423            <p class="entity-badge">Need help?</p>
1424            <p class="entity-name">Talk to us</p>
1425            <p class="mc-sub">Write to <a href="mailto:[email protected]">[email protected]</a> or call <a href="tel:+919240941082">+91 92409 41082</a>.</p>
1426            <p class="mc-sub">You can also explore the Finnovate app to manage your investments on the go.</p>
1427          </div>
1428        </div>
1429        <div class="footer-bottom">
1430          <p>
1430Copyright &copy; 2007-${currentYear} | Finnovate Financial Services Pvt Ltd. All rights reserved.</p>
1431          <ul class="footer-social">
1432            <li><a href="https://www.facebook.com/Finnovate" target="_blank" rel="noopener" aria-label="Facebook"><i class="fab fa-facebook-f"></i></a></li>
1433            <li><a href="https://twitter.com/FinnovateLive" target="_blank" rel="noopener" aria-label="Twitter"><i class="fab fa-twitter"></i></a></li>
1434            <li><a href="https://www.linkedin.com/company/finnovateofficial" target="_blank" rel="noopener" aria-label="LinkedIn"><i class="fab fa-linkedin-in"></i></a></li>
1435            <li><a href="https://www.instagram.com/finnovate.in" target="_blank" rel="noopener" aria-label="Instagram"><i class="fab fa-instagram"></i></a></li>
1436            <li><a href="https://www.youtube.com/channel/UCbeqQ9zocbH3bT_ZbodPBpQ?sub_confirmation=1" target="_blank" rel="noopener" aria-label="YouTube"><i class="fab fa-youtube"></i></a></li>
1437          </ul>
1438        </div>
1439        <div class="footer-disclaimer entry-content">
1440          <p>Disclaimer: Wealth Management Firm in India. Registration granted by SEBI, membership of BSE, and certification from NISM in no way guarantee performance of the intermediary or provide any assurance of returns to investors.</p>
1441          <p>Mutual Fund investments are subject to market risks, read all scheme related documents carefully.</p>
1442          <p>Past performance is not indicative of future returns. Please consider your specific investment requirements, risk tolerance, goal, time frame, risk and reward balance and the cost associated with the investment before choosing a fund, or designing a portfolio that suits your needs. Performance and returns of any investment portfolio can neither be predicted nor guaranteed.</p>
1443          <p>SEBI RIA Registration No: INA000013518 | Type of Registration: Non-Individual | Validity of registration: June 19, 2019 - Perpetual | Corresponding Local SEBI Office: Office of Investor Assistance and Education, SEBI Bhavan Plot No. C4-A, G Block, Bandra Kurla Complex, Bandra (E), Mumbai 400051.</p>
1444          <p>AMFI Registered Distributor - ARN 52128 | BSE Reg. No: 1401 | Platform Partner: BSE (Member code 17548) | IRDAI Corporate Agency: CA0703 | CIN: U67190MH2007PTC172272 | GST No: 27AABCF1124C2ZC | Website: <a href="https://www.finnovate.in" target="_blank" rel="noopener">www.finnovate.in</a> | Email: <a href="mailto:[email protected]">[email protected]</a></p>
1445          <p>Portfolio Management Services (PMS) are offered by Finnovate Investment Managers Private Limited, a separate legal entity | SEBI PMS Registration No: INP000010104. PMS investments are subject to market risks; please read the <a href="/pms/disclosure-documents">Disclosure Document</a> carefully before investing. Regulatory disclosures: <a href="/pms/investor-charter">Investor Charter</a> | <a href="/pms/complaints">Complaints Status</a>.</p>
1446        </div>
1447      </div>
1448    `;
1449  };
1450
1451  var buildRegulatoryDisclosureMarkup = function () {
1452    return `
1453      <div id="enquirypopup" class="modal fade regulatory-modal" role="dialog" aria-labelledby="regulatoryDisclosureTitle" aria-modal="true">
1454        <div class="modal-dialog modal-lg modal-dialog-centered" role="document">
1455          <div class="modal-content">
1456            <button type="button" class="reg-close" data-dismiss="modal" aria-label="Close disclosure">
1457              <span aria-hidden="true">&times;</span>
1458            </button>
1459            <div class="modal-body">
1460              <div class="regulatory-heading">
1461                <div class="reg-badge"><i class="fa-solid fa-shield-check"></i><span>SEBI RIA &middot; INA000013518</span></div>
1462                <h3 id="regulatoryDisclosureTitle">Regulatory Disclosure</h3>
1463                <p>Finnovate Financial Services Pvt Ltd is a SEBI Registered Investment Advisor and Wealth Management Firm in India. We publish our complaint status in line with SEBI guidance for complete transparency.</p>
1464                <div class="reg-meta">
1465                  <span class="reg-pill"><i class="fa-regular fa-calendar"></i><span id="regAsOnText">As on 31 Oct 2025</span></span>
1466                  <span class="reg-pill"><i class="fa-regular fa-circle-check"></i>Published monthly</span>
1467                </div>
1468              </div>
1469              <div class="reg-grid">
1470                <div class="reg-card reg-card--accent">
1471                  <h5>Current snapshot</h5>
1472                  <p class="reg-hint">Every ticket is acknowledged and tracked until closure.</p>
1473                  <div class="reg-stat-grid">
1474                    <div class="reg-stat">
1475                      <div class="label">Open</div>
1476                      <div class="value">0</div>
1477                      <div class="hint">Pending to be resolved</div>
1478                    </div>
1479                    <div class="reg-stat">
1480                      <div class="label">Received this month</div>
1481                      <div class="value">0</div>
1482                      <div class="hint">New complaints</div>
1483                    </div>
1484                    <div class="reg-stat">
1485                      <div class="label">Resolved this month</div>
1486                      <div class="value">0</div>
1487                      <div class="hint">Closed with client confirmation</div>
1488                    </div>
1489                    <div class="reg-stat">
1490                      <div class="label">Carry forward</div>
1491                      <div class="value">0</div>
1492                      <div class="hint">At the beginning of month</div>
1493                    </div>
1494                  </div>
1495                  <div class="reg-footnote"><i class="fa-regular fa-envelope"></i>Need help? Reach us at <a href="mailto:[email protected]">[email protected]</a></div>
1496                </div>
1497              </div>
1498            </div>
1499          </div>
1500        </div>
1501      </div>
1502    `;
1503  };
1504
1505  var bindRegulatoryDisclosureEvents = function (modalEl) {
1506    if (!modalEl || modalEl.dataset.regulatoryBound === "true") {
1507      return;
1508    }
1509    modalEl.dataset.regulatoryBound = "true";
1510    if (window.jQuery && window.jQuery.fn && window.jQuery.fn.modal) {
1511      window.jQuery(modalEl).on("shown.bs.modal", function () {
1512        document.body.classList.add("regulatory-disclosure-open");
1513      });
1514      window.jQuery(modalEl).on("hidden.bs.modal", function () {
1515        document.body.classList.remove("regulatory-disclosure-open");
1516      });
1517    }
1518  };
1519
1520  var ensureRegulatoryDisclosureModal = function () {
1521    var modalEl = document.getElementById("enquirypopup");
1522    if (modalEl) {
1523      bindRegulatoryDisclosureEvents(modalEl);
1524      return modalEl;
1525    }
1526    if (!document.body) {
1527      return null;
1528    }
1529    var wrapper = document.createElement("div");
1530    wrapper.innerHTML = buildRegulatoryDisclosureMarkup().trim();
1531    modalEl = wrapper.firstElementChild;
1532    if (!modalEl) {
1533      return null;
1534    }
1535    document.body.appendChild(modalEl);
1536    bindRegulatoryDisclosureEvents(modalEl);
1537    return modalEl;
1538  };
1539
1540  if (!window.regulatory_disclosure_popup) {
1541    window.regulatory_disclosure_popup = function () {
1542      var modalEl = ensureRegulatoryDisclosureModal();
1543      if (!modalEl) {
1544        return;
1545      }
1546      if (window.jQuery && window.jQuery.fn && window.jQuery.fn.modal) {
1547        window.jQuery(modalEl).modal("show");
1548        return;
1549      }
1550      modalEl.classList.add("show");
1551      modalEl.style.display = "block";
1552      modalEl.setAttribute("aria-hidden", "false");
1553      document.body.classList.add("modal-open", "regulatory-disclosure-open");
1554    };
1555  }
1556
1557  var initRegulatoryDisclosureModal = function () {
1558    ensureRegulatoryDisclosureModal();
1559    updateRegulatoryDisclosureDate();
1560  };
1561
1562  var updateRegulatoryDisclosureDate = function () {
1563    var target = document.getElementById("regAsOnText");
1564    if (!target) {
1565      return;
1566    }
1567    var now = new Date();
1568    // Last day of the previous month, using UTC to avoid timezone shifts.
1569    var asOf = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), 0));
1570    var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
1571    var day = asOf.getUTCDate();
1572    var month = months[asOf.getUTCMonth()];
1573    var year = asOf.getUTCFullYear();
1574    target.textContent = "As on " + day + " " + month + " " + year;
1575  };
1576
1577  var injectUnifiedFooter = function () {
1578    var footerNodes = document.querySelectorAll('footer');
1579    if (!footerNodes.length) {
1580      return;
1581    }
1582    var markup = buildUnifiedFooterMarkup();
1583    for (var i = 0; i < footerNodes.length; i++) {
1584      var footerEl = footerNodes[i];
1585      // Allow pages to opt out of the unified footer
1586      if (footerEl.classList.contains('no-unified-footer') || footerEl.getAttribute('data-static-footer') === 'true') {
1587        continue;
1588      }
1589      footerEl.innerHTML = markup;
1590      footerEl.classList.add('site-footer');
1591      if (!footerEl.getAttribute('role')) {
1592        footerEl.setAttribute('role', 'contentinfo');
1593      }
1594    }
1595  };
1596
1597  var slugifyTrackingValue = function (value) {
1598    return (value || "")
1599      .toString()
1600      .trim()
1601      .toLowerCase()
1602      .replace(/[^a-z0-9]+/g, "_")
1603      .replace(/^_+|_+$/g, "");
1604  };
1605
1606  var getNearestTrackingSection = function (element) {
1607    if (!element || !element.closest) {
1608      return "";
1609    }
1610
1611    var panel = element.closest('.content > div[id], [data-track-section], section[id], form[id]');
1612    if (!panel) {
1613      return "";
1614    }
1615
1616    if (panel.getAttribute && panel.getAttribute('data-track-section')) {
1617      return panel.getAttribute('data-track-section');
1618    }
1619
1620    var anchor = panel.querySelector('.tab-anchor[id]');
1621    if (anchor && anchor.id) {
1622      return anchor.id;
1623    }
1624
1625    return panel.id || "";
1626  };
1627
1628  var getTrackingPayload = function (element) {
1629    if (!element) {
1630      return null;
1631    }
1632
1633    var text = "";
1634    if (element.getAttribute) {
1635      text =
1636        element.getAttribute("data-track-label") ||
1637        element.getAttribute("aria-label") ||
1638        element.getAttribute("title") ||
1639        "";
1640    }
1641    if (!text) {
1642      text = element.innerText || element.textContent || "";
1643    }
1644    text = text.replace(/\s+/g, " ").trim();
1645
1646    var section = "";
1647    if (element.getAttribute) {
1648      section = element.getAttribute("data-track-section") || "";
1649    }
1650    if (!section) {
1651      section = getNearestTrackingSection(element);
1652    }
1653
1654    var explicitName = "";
1655    if (element.getAttribute) {
1656      explicitName = element.getAttribute("data-track-click") || "";
1657    }
1658
1659    var buttonName = explicitName;
1660    if (!buttonName) {
1661      var textSlug = slugifyTrackingValue(text) || "unnamed_cta";
1662      var sectionSlug = slugifyTrackingValue(section);
1663      buttonName = sectionSlug ? textSlug + "_" + sectionSlug : textSlug;
1664    }
1665
1666    return {
1667      event: "cta_clicked",
1668      button_name: buttonName,
1669      button_text: text,
1670      button_id: element.id || "",
1671      button_class: typeof element.className === "string" ? element.className : "",
1672      button_tag: element.tagName ? element.tagName.toLowerCase() : "",
1673      section: section,
1674      page_path: window.location.pathname,
1675      page_title: document.title,
1676      link_url: element.getAttribute && element.getAttribute("href") ? element.getAttribute("href") : ""
1677    };
1678  };
1679
1680  var sendTrackingEvent = function (payload) {
1681    if (!payload) {
1682      return;
1683    }
1684
1685    if (window.dataLayer && typeof window.dataLayer.push === "function") {
1686      window.dataLayer.push(payload);
1687    }
1688
1689    if (typeof window.gtag === "function") {
1690      window.gtag("event", "cta_clicked", {
1691        button_name: payload.button_name,
1692        button_text: payload.button_text,
1693        button_id: payload.button_id,
1694        button_class: payload.button_class,
1695        button_tag: payload.button_tag,
1696        section: payload.section,
1697        page_path: payload.page_path,
1698        page_title: payload.page_title,
1699        link_url: payload.link_url
1700      });
1701    }
1702  };
1703
1704  var initClickTracking = function () {
1705    if (document.body && document.body.dataset.ctaTrackingBound === "true") {
1706      return;
1707    }
1708    if (!document.body) {
1709      return;
1710    }
1711
1712    document.body.dataset.ctaTrackingBound = "true";
1713    document.addEventListener("click", function (event) {
1714      var target = event.target;
1715      if (!target || !target.closest) {
1716        return;
1717      }
1718
1719      var clickable = target.closest(
1720        '[data-track-click], button, a.btn, a.main-button, a.main-button-2, a.glass-cta, .CalendlyPopup'
1721      );
1722      if (!clickable) {
1723        return;
1724      }
1725
1726      var payload = getTrackingPayload(clickable);
1727      if (!payload || !payload.button_text) {
1728        return;
1729      }
1730
1731      sendTrackingEvent(payload);
1732    });
1733  };
1734
1735  if (document.readyState === "loading") {
1736    document.addEventListener("DOMContentLoaded", injectUnifiedFooter);
1737    document.addEventListener("DOMContentLoaded", initRegulatoryDisclosureModal);
1738    document.addEventListener("DOMContentLoaded", initClickTracking);
1739  } else {
1740    injectUnifiedFooter();
1741    initRegulatoryDisclosureModal();
1742    initClickTracking();
1743  }
1744})(window.jQuery);
1745
1746// JavaScript used to set randomness for particles.
1747// Sparkle Could be done via SSR
1748
1749var RANDOM = function (min, max) {
1750  return Math.floor(Math.random() * (max - min + 1) + min);
1751};
1752var PARTICLES = document.querySelectorAll('.particle');
1753if (PARTICLES && PARTICLES.length) {
1754  for (var p = 0; p < PARTICLES.length; p++) {
1755    var node = PARTICLES[p];
1756    if (!node || !node.setAttribute) {
1757      continue;
1758    }
1759    var styles = ''
1760      + '--x: ' + RANDOM(20, 80) + ';'
1761      + '--y: ' + RANDOM(20, 80) + ';'
1762      + '--duration: ' + RANDOM(6, 20) + ';'
1763      + '--delay: ' + RANDOM(1, 10) + ';'
1764      + '--alpha: ' + (RANDOM(40, 90) / 100) + ';'
1765      + '--origin-x: ' + (Math.random() > 0.5 ? RANDOM(300, 800) * -1 : RANDOM(300, 800)) + '%;'
1766      + '--origin-y: ' + (Math.random() > 0.5 ? RANDOM(300, 800) * -1 : RANDOM(300, 800)) + '%;'
1767      + '--size: ' + (RANDOM(40, 90) / 100) + ';';
1768    node.setAttribute('style', styles);
1769  }
1770}
1771
1772
1773$(document).ready(function () {
1774  $("#show_hide_password a").on('click', function (event) {
1775    event.preventDefault();
1776    if ($('#show_hide_password input').attr("type") == "text") {
1777      $('#show_hide_password input').attr('type', 'password');
1778      $('#show_hide_password i').addClass("fa-eye-slash");
1779      $('#show_hide_password i').removeClass("fa-eye");
1780    } else if ($('#show_hide_password input').attr("type") == "password") {
1781      $('#show_hide_password input').attr('type', 'text');
1782      $('#show_hide_password i').removeClass("fa-eye-slash");
1783      $('#show_hide_password i').addClass("fa-eye");
1784    }
1785  });
1786});

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.