PageSourceSearch

https://nurturenow.pathfactory.com/pathfactory-overview--1/pathfac…&utm_content=product-tour&lb-mode=overlay

html pathfactory.com collected 2026-10-02 06:26:49 UTC 237,984 bytes, 6,987 lines download raw bytes

1<!doctype html>
2<html lang="en">
3  <head>
4    <meta charset="utf-8">
5<meta content="width=device-width, initial-scale=1" name="viewport">
6<meta property="og:type" content="website">
7<meta property="og:title" content="PathFactory Overview: Product Tour">
8<meta property="og:description" content="PathFactory Overview: Product Tour">
9<meta property="og:image" content="https://cdn.pathfactory.com/assets/146/thumbnails/932696/ca8257a0-118b-4078-8e19-3fd7a2c80de1.png">
10<meta property="og:url" content="https://nurturenow.pathfactory.com/pathfactory-overview--1/pathfactory_product_tour">
11<meta name="twitter:card" content="summary_large_image">
12<meta name="twitter:title" content="PathFactory Overview: Product Tour">
13<meta name="twitter:description" content="PathFactory Overview: Product Tour">
14<meta name="twitter:image" content="https://cdn.pathfactory.com/assets/146/thumbnails/932696/ca8257a0-118b-4078-8e19-3fd7a2c80de1.png">
15<meta name="robots" content="noindex, follow">
16<link rel="canonical" href="https://nurturenow.pathfactory.com/pathfactory-overview--1/pathfactory_product_tour">
17<link rel="icon" type="image/x-icon" href="https://cdn.pathfactory.com/assets/146/icons/460327/ddc2c6d9-1c2b-4d64-b7a2-7ae13299e9c6.png">
18<title> PathFactory Overview: Product Tour </title>
19<meta name="description" content="PathFactory Overview: Product Tour">
20
21
22<meta property="article:published_time" content="2024-11-18T15:41:47-05:00">
23
24
25
26
27<script>
28  const jukeboxApiHost = "https://jukebox.pathfactory.com";
29  const clientId = "LB-931336C1-146";
30  function pfCamelize(str) {
31  return str.replace(/(_\w)/g, function (match) {
32    return match[1].toUpperCase();
33  });
34}
35
36const pfPluralize = (word) => word.endsWith('s') ? word : word + 's';
37
38const pfFilterKeys = (obj, validKeys) => validKeys.reduce((acc, key) => {
39  if (key in obj) acc[key] = obj[key];
40  return acc
41}, {});
42
43function pfUpdateUrlParams(url, params) {
44  const urlObj = new URL(url, window.location.origin);
45  const searchParams = urlObj.searchParams;
46
47  Object.entries(params).forEach(([key, values]) => {
48    if (Array.isArray(values) && values.length > 0) {
49      searchParams.set(key, values.join(","));
50    } else if (["string", "number"].includes(typeof values)) {
51      searchParams.set(key, values);
52    }else {
53      searchParams.delete(key);
54    }
55  });
56
57  urlObj.search = searchParams.toString();
58  return urlObj.toString();
59}
60
61
62const convertToQueryParams = (paramObject) => {
63  const keys = Object.keys(paramObject);
64  const keyValuePairs = keys.filter(k => paramObject[k].length).map(key => {
65    return key + '=' + paramObject[key];
66  });
67  return keyValuePairs.join('&');
68}
69
70const pfWaitForVidCookie = () =>
71  new Promise((resolve) => {
72    const visitorId = pfGetCookie("vid");
73    if (visitorId) {
74      resolve(visitorId);
75      return;
76    }
77
78    const interval = setInterval(() => {
79      const visitorId = pfGetCookie("vid");
80
81      if (visitorId) {
82        clearInterval(interval);
83        clearTimeout(timeout);
84        resolve(visitorId);
85      }
86    }, 200);
87
88    const timeout = setTimeout(() => {
89      clearInterval(interval);
90      resolve(null);
91    }, 3000);
92  });
93
94function fetchKsToken(clientId, baseUrl) {
95  if (!clientId || !baseUrl) {
96    return Promise.resolve(null);
97  }
98
99  if (typeof window.ksValue !== "undefined") {
100    return Promise.resolve(window.ksValue);
101  }
102
103  if (window.__pfKsTokenPromise) {
104    return window.__pfKsTokenPromise;
105  }
106
107  window.__pfKsTokenPromise = pfWaitForVidCookie().then((visitorId) => {
108    if (!visitorId) {
109      return null;
110    }
111
112    return fetch(`${baseUrl}/api/public/v3/kaltura_accounts/generate_ks_token`, {
113      method: "POST",
114      credentials: "include",
115      headers: {
116        "Content-Type": "application/json",
117        Accept: "application/json"
118      },
119      body: JSON.stringify({
120        client_id: clientId,
121        user_id: visitorId
122      })
123    }).then((response) => {
124      if (!response.ok) {
125        return null;
126      }
127      return response.json().then((data) => data?.ks || null).catch(() => null);
128    }).catch(() => null);
129  }).then((ks) => {
130    window.ksValue = ks;
131    return ks;
132  }).finally(() => {
133    delete window.__pfKsTokenPromise;
134  });
135
136  return window.__pfKsTokenPromise;
137}
138
139</script>
139
140
141
142<script>
143  let dimensions = [];
144  
145    dimensions = `[{"label":"Topics","value":"topics","is_default":true},{"label":"Business Units","value":"business_units","is_default":true},{"label":"Personas","value":"personas","is_default":true},{"label":"Industries","value":"industries","is_default":true},{"label":"Products","value":"products","is_default":true},{"label":"Solutions","value":"solutions","is_default":true},{"label":"Use Cases","value":"use_cases","is_default":false},{"label":"Use In Recommendations?","value":"use_in_recommendations","is_default":false},{"label":"From The Nook?","value":"from_the_nook","is_default":false}]` ? JSON.parse(`[{"label":"Topics","value":"topics","is_default":true},{"label":"Business Units","value":"business_units","is_default":true},{"label":"Personas","value":"personas","is_default":true},{"label":"Industries","value":"industries","is_default":true},{"label":"Products","value":"products","is_default":true},{"label":"Solutions","value":"solutions","is_default":true},{"label":"Use Cases","value":"use_cases","is_default":false},{"label":"Use In Recommendations?","value":"use_in_recommendations","is_default":false},{"label":"From The Nook?","value":"from_the_nook","is_default":false}]`) : []
146  
147  const contentTagCategories = dimensions;
148  const customCategories = contentTagCategories?.filter(item => item?.is_default === false) || [];
149  const customCategoryKeys = customCategories.map(item => item.value);
150  const DIMENSION_FILTER_TYPES = [
151    "business_units",
152    "funnel_stages",
153    "industries",
154    "personas",
155    "products",
156    "solutions",
157    "topics",
158    ...customCategoryKeys
159  ];
160  const NON_DIMENSION_FILTER_TYPES = [
161    "languages",
162    "content_types"
163  ];
164  const PF_FILTER_TYPES = [
165    ...NON_DIMENSION_FILTER_TYPES,
166    ...DIMENSION_FILTER_TYPES
167  ];
168</script>
168
169
170
171<script>
172  function pfDebounce(func, timeout = 500){
173    let timer;
174    return (...args) => {
175      clearTimeout(timer);
176      timer = setTimeout(() => { func.apply(this, args); }, timeout);
177    };
178  }
179
180  function pfGetCookie(namePattern){
181    const cookies = document.cookie.split("; ");
182    const cookie = cookies.find((cookie) => {
183      const cookieName = cookie.split("=")[0];
184      return !!cookieName.match(namePattern)
185    }) || "";
186    return cookie.split("=")[1];
187  }
188</script>
188
189
190
191<!-- Google tag (gtag.js) -->
192<script async type="javascript/pathfactory">
193  google_analytics_measurement_id = "G-6SYSEVSDWF";
194  (function() {
195    var script = document.createElement('script');
196    script.type = 'text/javascript';
197    script.src = 'https://www.googletagmanager.com/gtag/js?id=' + google_analytics_measurement_id;
198    script.async = true;
199    document.head.appendChild(script);
200  })();
201</script>
vendor: 1 bytes, line 201
201
202<script type="javascript/pathfactory">
203  
vendor: 134 bytes, lines 203-207
203window.dataLayer = window.dataLayer || [];
204  function gtag(){dataLayer.push(arguments);}
205  gtag('js', new Date());
206
207  gtag('config', "
207G-6SYSEVSDWF
vendor: 4 bytes, line 207
207");
208</script>
208
209
210
211
212
213  
213<script type="javascript/pathfactory">
214   (function() {
215     var didInit = false;
216     function initMunchkin() {
217       if(didInit === false) {
218         didInit = true;
219         Munchkin.init('186-UMU-338');
220
221          var webpageTrackTriggered = false;
222          var totalTimeSpent = 0;
223          const threshold = 150;
224          const totalTimer = setInterval(() => {
225            if (!webpageTrackTriggered && !window.formModalOpen && !document.hidden) {
226              totalTimeSpent++;
227              if (totalTimeSpent >= threshold) {
228                trackWebPage(true);
229                webpageTrackTriggered = true;
230                clearInterval(totalTimer);
231              }
232            }
233          }, 1000);
234       }
235     }
236     function trackWebPage(thresholdPassed) {
237       var url = document.location.pathname;
238       var params = "topic=Product&amp;business_unit=Marketing&amp;funnel_stage=Top of Funnel&amp;business_unit=Product&amp;industry=B2B&amp;persona=CMO/VP&amp;persona=ABM Lead&amp;persona=Content Lead&amp;persona=Demand Gen Lead&amp;persona=Marketing Ops Lead&amp;use_cases=ABM&amp;use_cases=Demand Gen&amp;use_cases=Content Strategy&amp;use_cases=Buyer Enablement&amp;use_in_recommendatio=Yes - ONLY if assets should be used for ChatFactory &amp; Website Tools Recommendations&amp;topic=product&amp;business_unit=marketing&amp;funnel_stage=top-of-funnel&amp;business_unit=product&amp;industry=b2b&amp;persona=cmo-vp&amp;persona=abm-lead&amp;persona=content-lead&amp;persona=demand-gen-lead&amp;persona=marketing-ops-lead&amp;use_cases=abm&amp;use_cases=demand-gen&amp;use_cases=content-strategy&amp;use_cases=buyer-enablement&amp;use_in_recommendatio=yes-only-if-assets-should-be-used-for-chatfactory-website-tools-recommendations&amp;content_type=Product Tour&amp;content_type=product-tour";
239       var queryString = "";
240
241       if (thresholdPassed) {
242         url = url + ", Met Threshold";
243         params = "threshold_passed=true" + (params ? "&" + params : "");
244       }
245       params = params + (queryString ? "&" + queryString : "");
246
247       window.mktoMunchkinFunction('visitWebPage', {
248         url: url,
249         params: params
250       });
251     }
252     var s = document.createElement('script');
253     s.type = 'text/javascript';
254     s.async = true;
255     s.src = '//munchkin.marketo.net/munchkin.js';
256     s.onreadystatechange = function() {
257       if (this.readyState == 'complete' || this.readyState == 'loaded') {
258         initMunchkin();
259       }
260     };
261     s.onload = initMunchkin;
262     document.getElementsByTagName('head')[0].appendChild(s);
263   })();
264  </script>
264
265
266
267
268
269
270<script src="https://cdn.pathfactory.com/templated-experiences/glide.js"></script>
270
271
272
273<link rel="stylesheet" href="https://cdn.pathfactory.com/templated-experiences/glide.core.css">
274<link rel="stylesheet" href="https://cdn.pathfactory.com/templated-experiences/glide.theme.css">
275
276
277<script defer src="https://cdn.pathfactory.com/templated-experiences/alpine.js"></script>
277
278
279
280
281  
281<script src="https://cdn.pathfactory.com/templated-experiences/values.js"></script>
281
282
283
284
285
286  
287  
287<script src="https://cdn.pathfactory.com/templated-experiences/brightcove-player-loader.min.js"></script>
287
288  
288<script src="https://cdn.pathfactory.com/templated-experiences/reactplayer.standalone.js"></script>
288
289  
289<script src="https://cdn.pathfactory.com/templated-experiences/youtube-iframe-api.js"></script>
289
290  
290<script src="https://cdn.pathfactory.com/templated-experiences/vimeo-player.js"></script>
290
291  
291<script src="https://cdn.pathfactory.com/templated-experiences/vidyard-embed-v4.js"></script>
291
292  
292<script src="https://cdn.pathfactory.com/templated-experiences/wistia-e-v1.js"></script>
292
293  
293<script defer src="https://cdn.pathfactory.com/templated-experiences/parmonic-aw-single.js"></script>
293
294  
294<script defer src="https://cdn.pathfactory.com/templated-experiences/parmonic-aw-init.js"></script>
294
295
296
297
298<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.1/css/all.min.css">
299
300
301
302  
302<script>
303    var primaryColor = new Values("#5555FF");
304    var primaryShades = primaryColor.all(18).map((shade) => shade.hexString());
305    let sectionPadding = "px-[0px] sm:px-[0px] py-[0px] sm:py-[0px]";
306      if (true) {
307        sectionPadding = "py-12 px-4 sm:px-6 lg:py-16 lg:px-8";
308      };
309    window.__unocss = {
310      theme: {
311        colors: {
312          primary: {
313            DEFAULT: primaryShades[5],
314            50: primaryShades[0],
315            100: primaryShades[1],
316            200: primaryShades[2],
317            300: primaryShades[3],
318            400: primaryShades[4],
319            500: primaryShades[5],
320            600: primaryShades[6],
321            700: primaryShades[7],
322            800: primaryShades[8],
323            900: primaryShades[9]
324          },
325          on: {
326            primary: "#ffffff"
327          }
328        }
329      },
330      shortcuts: {
331        "section-display": "flex justify-center mx-auto",
332        "section-padding": `${sectionPadding} flex justify-center mx-auto`,
333        "section-base": "container",
334        "section-heading": "text-3xl font-bold leading-tight tracking-tight text-gray-900 md:text-4xl",
335        "btn": "inline-block w-full px-4 py-2 text-base font-medium leading-4 text-center border rounded-md shadow-sm focus:ring-2 focus:ring-opacity-50 md:text-lg",
336        "btn-lg": "px-6 py-4",
337        "btn-md": "px-4 py-2",
338        "btn-sm": "px-2 py-1",
339        "btn-primary": "bg-primary-500 border-primary-500 text-on-primary hover:bg-primary-600 focus:ring-primary-500",
340        "btn-outline": "text-gray-800 bg-white border border-gray-400 hover:bg-gray-200 focus:ring-gray-200"
341      }
342    };
343  </script>
343
344
345
346
347
348  <style>
349    [un-cloak] {
350      display: none;
351    }
352  </style>
353  
353<script defer src="https://cdn.pathfactory.com/templated-experiences/attributify.global.js"></script>
353
354
355
356
357
358  
358<script src="https://cdn.pathfactory.com/templated-experiences/tailwind.js"></script>
358
359
360
361
362<script>
363  function pfInitOzmenu(sectionClass) {
364    const section = document.querySelector(`.${sectionClass}`);
365
366    if (!section) return;
367
368    const openMenu = section.querySelector(".menu-open");
369    const closeMenu = section.querySelector(".menu-close");
370    const menuDiv = section.querySelector(".ozmenu");
371    const menu = section.querySelector(".ozmenu-nav");
372
373    if (!openMenu || !closeMenu || !menuDiv || !menu) return;
374
375    const dropDowns = menu.getElementsByClassName("nav-dropdown");
376    const dropDownsChild = menu.querySelectorAll('.dropdown .nav-dropdown');
377    const ozmenuOverlayClass = `ozmenu-${sectionClass}`;
378
379    openMenu.addEventListener("click", menuToggle);
380    closeMenu.addEventListener("click", menuToggle);
381
382    // menu-overlay covers up the rest of the page with an overlay when menu open
383    if (!document.querySelector(`.${ozmenuOverlayClass}#menu-overlay`)) {
384      document.body.insertAdjacentHTML("beforeend", `<div id='menu-overlay' class='${ozmenuOverlayClass}'></div>`);
385      document.querySelector(`.${ozmenuOverlayClass}#menu-overlay`).addEventListener("click", menuToggle);
386    }
387
388    function menuToggle() {
389      menuDiv.classList.toggle("active");
390      document.body.classList.toggle("hide-scrolling");
391      document.body.classList.toggle("mobile-menu-active");
392      document.querySelector(`.${ozmenuOverlayClass}#menu-overlay`).classList.toggle("show");
393      document.querySelectorAll(".pf-header").forEach((header) => {
394        if (!header.contains(openMenu)) {
395          header.classList.toggle("z-[10000]");
396        }
397      });
398    }
399
400    for (var i = 0; i < dropDownsChild.length; i++) {
401      dropDownsChild[i].classList.add('child');
402      dropDownsChild[i].addEventListener("click", function() {
403        this.classList.toggle('opened');
404      });
405    }
406    for (var i = 0; i < dropDowns.length; i++) {
407      if(!dropDowns[i].classList.contains("child")){
408        dropDowns[i].classList.add('parent');
409        dropDowns[i].addEventListener("click", function() {
410          this.classList.toggle('opened');
411        });
412      }
413    }
414  };
415
416  function pfOzmenuCycleFocus(sectionClass) {
417    const pfOzmenu = document.querySelector(`.${sectionClass} .ozmenu`);
418    const focusableElements = pfOzmenu.querySelectorAll("a, button, input");
419    const firstFocusableEl = focusableElements[0];
420    const lastFocusableEl = focusableElements[focusableElements.length - 1];
421    pfOzmenu.addEventListener("keydown", (e) => {
422      if (!window.matchMedia('(max-width: 993px)').matches) return;
423      
424      if (e.key === "Tab") {
425        if ( e.shiftKey ) /* shift + tab */ {
426          if (document.activeElement === firstFocusableEl) {
427            lastFocusableEl.focus();
428            e.preventDefault();
429          }
430        } else /* tab */ {
431          if (document.activeElement === lastFocusableEl) {
432            firstFocusableEl.focus();
433            e.preventDefault();
434          }
435        }
436      }
437    });
438  }
439
440  function pfOzmenuEscClose(sectionClass) {
441    document.addEventListener("keydown", (e) => {
442      const pfOzmenu = document.querySelector(`.${sectionClass} .ozmenu`);
443      if (e.key === "Escape" && pfOzmenu.classList.contains("active")) {
444        document.querySelector(`.${sectionClass} .menu-close`).click();
445      }
446      if (!window.matchMedia('(max-width: 993px)').matches) {
447        if (event.key === 'Escape') {
448          document.querySelectorAll('.dropdown').forEach((dropdown) => {
449            dropdown.style.display = 'none';
450          });
451        }
452      };
453    });
454  }
455</script>
455
456
457<script>
458  document.addEventListener("DOMContentLoaded", () => {
459    document.querySelectorAll(".pf-header").forEach((header) => {
460      const nodeId = header.dataset.pfThemeBlockId;
461      const sectionClass = `section-${nodeId || ""}`;
462      pfInitOzmenu(sectionClass);
463    });
464  });
465</script>
465
466<link rel="stylesheet" href="https://cdn.pathfactory.com/templated-experiences/ozmenu-styles.css">
467
468
469  
470  
470<script src="https://cdn-app.pathfactory.com/libraries/overlay/overlay.js"></script>
470
471  <link href="https://cdn-app.pathfactory.com/libraries/overlay/overlay.css" rel="stylesheet" type="text/css">
472
473
474
475<script defer>
476  window.pfGlides = {};
477  window.carouselConfiguration = {};
478  window.pfGlideAssets = {};
479  const detectGlideAndMount = (count = 0) => {
480    const glides = document.querySelectorAll(".glide");
481    if (glides.length === 0 && count <= 20) {
482      setTimeout(() => detectGlideAndMount(count + 1), 1000);
483    } else {
484      glides.forEach((glide) => {
485        const glideSlides = window.pfGlideAssets[glide?.dataset?.carouselGlideId] || [];
486        if (glideSlides.length === 0) {
487          window.pfGlideAssets[glide?.dataset?.carouselGlideId] = glide.querySelectorAll(".asset");
488        }
489        window.carouselConfiguration[glide?.dataset?.carouselGlideId] = {
490          type: "slider",
491          animationDuration: 1000,
492          autoplay: glide.dataset.autoplay === "no"
493            ? false
494            : glide.dataset.autoplayInterval * 1000,
495          gap: glide.dataset.gap || 0,
496          perView: glide.dataset.tilesPerRow,
497          peek: glide.dataset.peek || 0,
498          breakpoints: {
499            640: {
500              perView: 1
501            },
502            1024: {
503              perView: glide.dataset.tilesPerRow === "1" ? 1 : 2
504            }
505          }
506        };
507        window.pfGlides[glide.dataset.carouselGlideId] = new Glide(glide, window.carouselConfiguration[glide?.dataset?.carouselGlideId]);
508        window.pfGlides[glide.dataset.carouselGlideId].on(['mount.after', 'run'], () => {
509          const bullets = glide.querySelectorAll('.glide__bullet');
510          const slides = glide.querySelectorAll('.glide__slide');
511          const activeIndex = window.pfGlides[glide.dataset.carouselGlideId].index;
512          // Dynamically get perView based on the current screen width
513          const viewportWidth = window.innerWidth;
514          let perView = parseInt(glide.dataset.tilesPerRow, 10);
515          if (viewportWidth <= 640) 
516            perView = 1;
517          else if (viewportWidth <= 1024) 
518            perView = Math.min(perView, 2);
519          const totalSlides = slides.length;
520          bullets.forEach((bullet, index) => {
521            bullet.setAttribute('aria-current', index === activeIndex);
522            bullet.setAttribute("tabindex", bullet.classList.contains("glide__bullet--between") ? "-1" : "0");
523          });
524          slides.forEach((slide, index) => {
525            const isVisible =
526              activeIndex + perView <= totalSlides
527                ? index >= activeIndex && index < activeIndex + perView
528                : index >= activeIndex && index < totalSlides;
529            slide.setAttribute('aria-hidden', !isVisible);
530            const slideButtons = slide.querySelectorAll("button, a");
531            slideButtons.forEach(button => {
532              button.setAttribute("tabindex", isVisible ? "0" : "-1");
533            });
534          });
535        });
536        window.pfGlides[glide.dataset.carouselGlideId].mount();
537      });
538      for (let count = 0; count < 10; count++) {
539        setTimeout(() => window.dispatchEvent(new Event('resize')), 500 * count);
540      }
541    }
542  }
543  document.addEventListener("DOMContentLoaded", () => {
544    detectGlideAndMount();
545  });
546</script>
546
547
548
549
550
551
552<script>
553  
554
555async function pfFetchFilters(sectionNodeId) {
556  const isContentPage = true;
557  const urlParams = new URLSearchParams(window.location.search);
558  const sectionSelector = `.section-${sectionNodeId}`;
559  const contentPlayUuid = urlParams.get("pf_cpid");
560  const campaignUuid = urlParams.get("pf_cid");
561  const landingPageId = "" || urlParams.get("pflpid");
562  const lpSectionNodeId = isContentPage ? urlParams.get("pfsid") : sectionNodeId;
563  const segmentGroupId = "";
564  const contentPageParams = isContentPage ? {
565    isContentPage: true,
566    contentSource: "experience",
567    templatedExperienceId: "26766"
568  } : {};
569  const apiUrl = new URL(`${jukeboxApiHost}/api/public/v3/get_filter_options`);
570  const params = {
571    ...contentPageParams,
572    landingPageId,
573    sectionNodeId: lpSectionNodeId,
574    clientId,
575    segmentGroupId,
576    pf_cpid: contentPlayUuid,
577    pf_cid: campaignUuid
578  };
579  apiUrl.search = new URLSearchParams(params);
580
581  const response = await fetch(apiUrl);
582  const result = await response.json();
583  
584  return result;
585}
586
587function pfBuildFilters({
588  filters = {},
589  sectionSelector,
590  sectionNodeId,
591  fetchCurrentParams,
592  handleParamsChange
593}) {
594  // The following classes must be present
595  const allFiltersContainerClass = "pf-resource-center-filters";
596  const filterOptionClass = "pf-options";
597  const templateClass = "pf-template";
598  const optionLabelClass = "pf-label";
599  const optionCheckboxClass = "pf-checkbox";
600  const clearOptionsClass = "pf-clear-options";
601  const clearOptionsClassAlt = "pf-clear-checked_filters-selector";
602  const clearAllClass = "clear-all-filters";
603  const optionsWrapperSelector = (filterType) => {
604    let selector = `.pf-options-wrapper-${filterType}`;
605    if (["languages", "content_types"].includes(filterType)) {
606      const filterTypeSingular = filterType.replace(/s$/, "");
607      selector += `, .pf-options-wrapper-${filterTypeSingular}`;
608    }
609    return selector;
610  };
611  const filterSelector = (filterType) => {
612    let selector = `.select-${filterType}`;
613    if (["languages", "content_types"].includes(filterType)) {
614      const filterTypeSingular = filterType.replace(/s$/, "");
615      selector += `, .select-${filterTypeSingular}`;
616    }
617    return selector;
618  };
619
620  const section = document.querySelector(sectionSelector);
621
622  // This should handle for both mobile and desktop, hence there's more than 1 allFiltersContainerClass
623  section.querySelectorAll(`.${allFiltersContainerClass}`).forEach((filtersWrapper) => {
624    const filterOptionTemplate = filtersWrapper.querySelector(`.${filterOptionClass}.${templateClass}`);
625    const clearAllFilters = filtersWrapper.querySelector(`.${clearAllClass}`);
626
627    if (clearAllFilters) {
628      clearAllFilters.addEventListener("click", (e) => {
629        e.stopPropagation();
630        const updates = {};
631        PF_FILTER_TYPES.forEach((ft) => { updates[ft] = [] });
632        handleParamsChange(updates);
633      });
634    }
635
636    PF_FILTER_TYPES.forEach((filterType) => {
637      const filterContainer = filtersWrapper.querySelector(filterSelector(filterType));
638      const optionsWrapper = filtersWrapper.querySelector(optionsWrapperSelector(filterType));
639      const clearOptionsButtons = filterContainer?.querySelectorAll(`.${clearOptionsClass}, .${clearOptionsClassAlt}`) || [];
640
641      if (!optionsWrapper || !filterContainer) return;
642
643      const filterOptionsAvailable = NON_DIMENSION_FILTER_TYPES.includes(filterType)
644        ? (filters[pfCamelize(filterType)] || []).length > 0
645        : (filters.dimensions[filterType] || []).length > 0;
646
647      if (!filterOptionsAvailable) {
648        filterContainer.style.display = "none";
649      } else {
650        filterContainer.style.display = "";
651        optionsWrapper.innerHTML = "";
652        options = NON_DIMENSION_FILTER_TYPES.includes(filterType)
653          ? filters[pfCamelize(filterType)]
654          : filters.dimensions[filterType];
655        options.forEach((option) => {
656          const optionNode = filterOptionTemplate.cloneNode(true);
657          const optionLabel = optionNode.querySelector(`.${optionLabelClass}`);
658          const optionCheckbox = optionNode.querySelector(`.${optionCheckboxClass}`);
659          const screenType = optionNode.querySelector(".pf-checkbox")?.getAttribute("data-screen");
660          const labelSlug = option.label.replace(/\s/g, "");
661          const idPrefix =
662            screenType && screenType === "desktop"
663              ? `${filterType}-${labelSlug}-desktop`
664              : `${filterType}-${labelSlug}`;
665          optionNode.style.display = "";
666          optionLabel.textContent = option.label;
667          optionLabel.setAttribute("for", `${idPrefix}-${[sectionNodeId]}`);
668          optionCheckbox.id = `${idPrefix}-${[sectionNodeId]}`;
669          optionCheckbox.name = option.value;
670          optionCheckbox.dataset.label = option.label;
671          optionCheckbox.addEventListener("change", (event) => {
672            const currentParams = fetchCurrentParams() || {};
673            const currentTypeCheckedValues = currentParams[filterType] || [];
674            const newCurrentTypeCheckedValues =
675              event.target.checked
676                ? [...currentTypeCheckedValues, option.value]
677                : currentTypeCheckedValues.filter(x => x !== option.value);
678            const updateParams = { [filterType]: newCurrentTypeCheckedValues };
679            handleParamsChange(updateParams);
680          });
681          optionsWrapper.appendChild(optionNode);
682        });
683
684        clearOptionsButtons.forEach((clearOptionsButton) => {
685          clearOptionsButton.addEventListener("click", (e) => {
686            e.stopPropagation();
687            handleParamsChange({ [filterType]: [] });
688          });
689        });
690      }
691    });
692  });
693}
694
695function pfAddPaginationEvents({
696  sectionSelector,
697  contentsPerPage,
698  handleParamsChange,
699  fetchTotalContents,
700  fetchCurrentParams
701}) {
702  // If lazy loading, need either of these classes
703  const lazyLoadClass = "pf-lazy-load-button";
704  const scrollXContainerClass = "pf-bottombar-scroller";
705  // If pagination, need these classes
706  const previousButtonClass = "pf-pagination-item-previous";
707  const nextButtonClass = "pf-pagination-item-next";
708  const pageButtonClass = "pf-pagination-item";
709
710  const section = document.querySelector(sectionSelector);
711  const lazyLoadButton = section.querySelector(`.${lazyLoadClass}`);
712  const scrollXContainer = section.querySelector(`.${scrollXContainerClass}`);
713  const previousButton = section.querySelector(`.${previousButtonClass}`);
714  const nextButton = section.querySelector(`.${nextButtonClass}`);
715  const pageButtons = section.querySelectorAll(`.${pageButtonClass}`);
716
717  if (lazyLoadButton) {
718    lazyLoadButton.addEventListener("click", () => {
719      const currentPage = fetchCurrentParams().page || 1;
720      const nextPage = currentPage + 1;
721      handleParamsChange({ page: nextPage }, "lazy_load");
722    });
723  }
724
725  if (scrollXContainer) {
726    scrollXContainer.addEventListener("scroll", pfDebounce((event) => {
727      const scrollableWidth = event.target.scrollWidth - event.target.clientWidth;
728      const fullyScrolledToRight = event.target.scrollLeft >= scrollableWidth - 1;
729      const totalContents = fetchTotalContents();
730      const totalPages = Math.ceil(totalContents / contentsPerPage);
731      const currentPage = fetchCurrentParams().page || 1;
732      const morePagesToLoad = currentPage < totalPages;
733
734      if (fullyScrolledToRight && morePagesToLoad) {
735        const nextPage = currentPage + 1;
736        handleParamsChange({ page: nextPage }, "lazy_load");
737      }
738    }, 500));
739  }
740
741  if (previousButton) {
742    previousButton.addEventListener("click", (event) => {
743      const currentPage = fetchCurrentParams().page || 1;
744      const newPage = Math.max(currentPage - 1, 1);
745      handleParamsChange({ page: newPage });
746    });
747  }
748  
749  if (nextButton) {
750    nextButton.addEventListener("click", (event) => {
751      const currentPage = fetchCurrentParams().page || 1;
752      const totalContents = fetchTotalContents();
753      const totalPages = Math.ceil(totalContents / contentsPerPage);
754      const newPage = Math.min(currentPage + 1, totalPages);
755      handleParamsChange({ page: newPage });
756    });
757  }
758
759  pageButtons.forEach((pageButton, index) => {
760    pageButton.addEventListener("click", (event) => {
761      if (pageButton.textContent === "...") return;
762
763      const newPage = parseInt(pageButton.textContent);
764      handleParamsChange({ page: newPage });
765    });
766  });
767}
768
769function pfAddSearchEvent({ sectionSelector, handleParamsChange }) {
770  // The following classes are required
771  const searchInputClass = "pf-content-list-search";
772
773  const section = document.querySelector(sectionSelector);
774  const searchInput = section?.querySelector(`.${searchInputClass}`);
775  searchInput?.addEventListener("input", pfDebounce((event) => {
776    handleParamsChange({ search: event.target.value });
777  }), 1000);
778}
779
780function pfAddSortEvents({ sectionSelector, handleParamsChange }) {
781  // The following classes are required
782  const sortContainerClass = "pf-sort";
783  const optionClass = "pf-sort-selection";
784  const clearOptionsClass = "clear-options";
785  const labelSelector = "button";
786
787  const section = document.querySelector(sectionSelector);
788  const sortContainer = section?.querySelector(`.${sortContainerClass}`);
789  const label = sortContainer?.querySelector(labelSelector);
790  const clearSortButton = sortContainer?.querySelector(`.${clearOptionsClass}`);
791  const options = sortContainer?.querySelectorAll(`.${optionClass}`) || [];
792
793  clearSortButton?.addEventListener("click", (event) => {
794    event.stopPropagation();
795    
796    label.textContent = "Sort by...";
797    sortContainer.click(); // closes the dropdown
798    handleParamsChange({ sort: "" });
799  });
800
801  options.forEach((option) => {
802    option.addEventListener("click", (event) => {
803      label.textContent = `${event.target.innerHTML}`;
804      sortContainer.click(); // closes the dropdown
805      handleParamsChange({ sort: event.target.dataset.value });
806    });
807  });
808}
809
810function pfUpdateFilters({ sectionSelector, params }) {
811  // All of the following classes need to be present
812  const optionsCountClass = "pf-selected-options-count";
813  const checkboxClass = "pf-checkbox";
814  const totalCountClass = "pf-total-checked-filters-count"; // optional
815  const filterSelector = (type) => {
816    let filterTypeSelector = `.select-${type}`;
817
818    if (["languages", "content_types"].includes(type)) {
819      const filterTypeSingular = type.replace(/s$/, "");
820      filterTypeSelector += `, .select-${filterTypeSingular}`
821    }
822    
823    return filterTypeSelector;
824  };
825
826  const section = document.querySelector(sectionSelector);
827
828  if (!section) return;
829
830  // Update checked filters count for that filter type
831  PF_FILTER_TYPES.forEach((filterType) => {
832    const filterTypeSelector = filterSelector(filterType);
833    section.querySelectorAll(filterTypeSelector).forEach((filterTypeWrapper) => {
834      const filterCountNode = filterTypeWrapper.querySelector(`.${optionsCountClass}`);
835      const checkedIdsForType = params[filterType] || [];
836      const checkedFiltersCount = checkedIdsForType.length;
837      filterCountNode.textContent = checkedFiltersCount || "";
838      filterCountNode.style.display = checkedFiltersCount > 0 ? "inline-block" : "none";
839
840      // Ensure the checkboxes are correctly checked or unchecked
841      const checkboxes = filterTypeWrapper.querySelectorAll(`.${checkboxClass}`);
842      checkboxes.forEach((checkbox) => {
843        const checkboxFilterId = parseInt(checkbox.name);
844        checkbox.checked = checkedIdsForType.includes(checkboxFilterId);
845      });
846    });
847  });
848
849  // Update overall total checked filters count if applicable
850  section.querySelectorAll(`.${totalCountClass}`).forEach((overallFiltersCountNode) => {
851    const totalCheckedFilters = (params.content_types || []).length
852      + (params.languages || []).length
853      + (params.dimensions || []).flat().length;
854    if (overallFiltersCountNode) {
855      overallFiltersCountNode.textContent = totalCheckedFilters || "";
856      overallFiltersCountNode.style.display = totalCheckedFilters > 0 ? "" : "none";
857    }
858  });
859}
860
861function pfGeneratePageOptions({ page, totalPages, maxSlots = 7 }) {
862  let pageOptions = [];
863  if (totalPages <= maxSlots) {
864    for (let i = 1; i <= totalPages; i++) {
865      pageOptions.push(i);
866    }
867  } else {
868    pageOptions = [page];
869    let pagesSlotted = 1;
870    for (let i = 1; pagesSlotted < maxSlots; i++) {
871      const leadingPage = page - i;
872      const trailingPage = page + i;
873      if (leadingPage >= 1) {
874        pageOptions = [leadingPage, ...pageOptions];
875        pagesSlotted++;
876      }
877      if (trailingPage <= totalPages) {
878        pageOptions = [...pageOptions, trailingPage];
879        pagesSlotted++;
880      }
881    }
882    if (pageOptions[0] !== 1) {
883      pageOptions[0] = 1;
884    }
885    if (pageOptions[pageOptions.length - 1] !== totalPages) {
886      pageOptions[pageOptions.length - 1] = totalPages;
887    }
888    if (pageOptions[1] > 2) {
889      pageOptions[1] = "...";
890    }
891    if (pageOptions[pageOptions.length - 2] < totalPages - 1) {
892      pageOptions[pageOptions.length - 2] = "...";
893    }
894  }
895
896  return pageOptions;
897}
898
899function pfUpdatePagination({
900  sectionSelector,
901  params,
902  totalContents,
903  currentContents = [],
904  contentsPerPage
905}) {
906  // The following classes are needed if lazy loading
907  const lazyLoadClass = "pf-lazy-load-button";
908  // The following classes are needed if paginated
909  const nextClass = "pf-pagination-item-next";
910  const previousClass = "pf-pagination-item-previous";
911  const pageNumberClass = "pf-pagination-item";
912
913  const currentPage = params.page || 1;
914  const totalPages = Math.ceil(totalContents / contentsPerPage);
915  const pageNumbers = pfGeneratePageOptions({ page: currentPage, totalPages });
916  const section = document.querySelector(sectionSelector);
917  const lazyLoadButton  = section.querySelector(`.${lazyLoadClass}`);
918  const nextButton = section.querySelector(`.${nextClass}`);
919  const prevButton = section.querySelector(`.${previousClass}`);
920  const contentsLoaded = currentContents.length;
921  const allContentsLoaded = contentsLoaded === totalContents;
922
923  if (lazyLoadButton) {
924    if (totalPages === currentPage || totalContents === 0 || allContentsLoaded) {
925      lazyLoadButton.style.display = "none";
926    } else {
927      lazyLoadButton.style.display = "";
928    }
929  }
930  
931  if (prevButton && nextButton) {
932    if (currentPage == 1 || totalContents == 0) {
933      prevButton.setAttribute("aria-disabled", true);
934      prevButton.style.display = "none";
935    } else {
936      prevButton.setAttribute("aria-disabled", false);
937      prevButton.style.display = "";
938    }
939
940    if (currentPage == totalPages || totalContents == 0) {
941      nextButton.setAttribute("aria-disabled", true);
942      nextButton.style.display = "none";
943    } else {
944      nextButton.setAttribute("aria-disabled", false);
945      nextButton.style.display = "";
946    }
947  }
948
949  const activePageClasses = "flex rounded-full items-center justify-center bg-[#5555FF] text-[#ffffff] w-7 h-7".split(' ');     
950  section.querySelectorAll(`.${pageNumberClass}`).forEach((pageNumber, index) => {
951    pageNumber.textContent = pageNumbers[index];
952    pageNumber.style.display = "";
953
954    if (pageNumbers[index] !== "...") {
955      pageNumber.setAttribute("aria-label", `Page ${pageNumbers[index]} of recommended assets`);
956    }
957
958    if (pageNumbers[index] === currentPage) {
959      pageNumber.classList.add(...activePageClasses);
960      pageNumber.setAttribute("aria-current", "page");
961    } else {
962      pageNumber.classList.remove(...activePageClasses);
963      pageNumber.removeAttribute("aria-current");
964    }
965      
966    if (index + 1 > pageNumbers.length || (allContentsLoaded && index > 0)) {
967      pageNumber.style.display = "none";
968    }
969  });
970}
971
972function pfApplyQueryParams({ handleParamsChange, filtersConfig = {}, enabledFilters = [] }) {
973  const isContentPage = true;
974  const queryParamsApi = new URLSearchParams(window.location.search);
975  const allQueryParams = Object.fromEntries(queryParamsApi);
976  const validParamsList = ["page"].concat(
977    enabledFilters.map((ef) =>
978      ["language", "content_type"].includes(ef) ? pfPluralize(ef) : ef
979    )
980  );
981  const queryParams = pfFilterKeys(allQueryParams, validParamsList);
982  queryParams.page = parseInt(queryParams.page || "1");
983
984  if (Object.keys(queryParams).length === 0) return;
985
986  // convert param values to ids. Will work for any language
987  Object.keys(queryParams).forEach((param) => {
988    if (PF_FILTER_TYPES.includes(param)) {
989      const filterLabels = (queryParams[param] || "").split(",");
990      const filterIds = filterLabels.map((label) => {
991        const filterOption = (filtersConfig[param] || filtersConfig[pfCamelize(param)] || [])
992          .find((filterOption) => filterOption.label == label);
993        return filterOption?.value;
994      }).filter((id) => id != undefined);
995      queryParams[param] = filterIds;
996    }
997  });
998
999  if (Object.keys(queryParams).length == 1 && queryParams.page == 1) return;
1000
1001  handleParamsChange(queryParams, "page_load");
1002}
1003
1004
1005  
1006
1007async function pfFetchContents({
1008  sectionNodeId = "",
1009  params = {},
1010  loadedContentUuids = [],
1011  contentsPerPage = 0,
1012  fetchType = "currentPage" // valid values: currentPage, upToPage
1013}) {
1014  const apiUrl = `https://jukebox.pathfactory.com/api/public/v3/get_contents/${window.location.search}`;
1015  const urlParams = new URLSearchParams(window.location.search);
1016  const isContentPage = true;
1017  const landingPageId = isContentPage ? urlParams.get("pflpid") : "";
1018  const lpSectionNodeId = isContentPage ? urlParams.get("pfsid") : sectionNodeId;
1019  const body = {
1020    ...params,
1021    landingPageId,
1022    sectionNodeId: lpSectionNodeId,
1023    clientId: "LB-931336C1-146",
1024    baseUrl: "https://nurturenow.pathfactory.com",
1025    visitorUuid: pfGetCookie("vid"),
1026    sessionId: (pfGetCookie(/_pf_id.+/) || "").split(".")[5],
1027    segmentGroupId: "",
1028    loadedContentUuids: params.page === 1 ? [] : loadedContentUuids,
1029    // needed by content page
1030    isContentPage: true,
1031    templatedExperienceId: "26766" || undefined,
1032    contentSource: "experience" || undefined
1033  };
1034
1035  if (fetchType === "upToPage") {
1036    body.page = 1;
1037    body.limit = (params.page || 1) * contentsPerPage;
1038  }
1039
1040  const response = await fetch(apiUrl, {
1041    method: "POST",
1042    headers: { "Content-Type": "application/json" },
1043    body: JSON.stringify(body)
1044  });
1045  const result = await response.json();
1046
1047  return result;
1048}
1049
1050function pfBuildCards({
1051  sectionSelector = "",
1052  contents = [],
1053  isLazyLoad = false,
1054  currentParams = {},
1055  isCarousel = false
1056}) {
1057  // Either of these wrapper classes are needed
1058  const contentsWrapperClass = "pf-resource-center-cards-wrapper";
1059  const sidebarContentsWrapperClass = "pf-cards-wrapper";
1060  // The following classes are needed
1061  const cardClass = "pf-content-card";
1062  const templateClass = "template";
1063  const titleClass = "pf-content-card-title";
1064  const linkClass = "pf-content-card-link";
1065  // The following classes are optional
1066  const descriptionClass = "pf-content-card-description";
1067  const cardCtaClass = "pf-content-card-cta";
1068  const thumbnailClass = "pf-content-card-thumbnail";
1069  const cardIconClass = "pf-card-icon";
1070
1071  const currentPage = currentParams.page;
1072  const section = document.querySelector(sectionSelector);
1073  const contentListWrappers = section.querySelectorAll(`.${contentsWrapperClass}, .${sidebarContentsWrapperClass}`);
1074  contentListWrappers.forEach((contentListWrapper) => {
1075    const contentCardTemplate = contentListWrapper.querySelector(`.${cardClass}.${templateClass}`)
1076      || section.querySelector(`.${cardClass}.${templateClass}`);
1077
1078    if (!contentCardTemplate) return;
1079
1080    if (!isLazyLoad || currentPage == 1) {
1081      contentListWrapper.innerHTML = "";
1082      if (!isCarousel) {
1083        contentListWrapper.appendChild(contentCardTemplate);
1084      }
1085    }
1086
1087    (contents || []).forEach((c) => {
1088      const contentCard = contentCardTemplate.cloneNode(true);
1089      const cardTitle = contentCard.querySelector(`.${titleClass}`);
1090      const cardDescription = contentCard.querySelector(`.${descriptionClass}`);
1091      const cardThumbnail = contentCard.querySelector(`.${thumbnailClass}`);
1092      const cardLink = contentCard.querySelector(`.${linkClass}`);
1093      const cardCTA = contentCard.querySelector(`.${cardCtaClass}`);
1094      const cardIcon = contentCard.querySelector(`.${cardIconClass}`);
1095
1096      contentCard.dataset.uuid = c.uuid;
1097      cardTitle.textContent = c.title;
1098      cardLink.href = c.url;
1099      contentCard.classList.remove(templateClass);
1100
1101      if (cardThumbnail) {
1102        cardThumbnail.src = c.thumbnail;
1103        cardThumbnail.setAttribute("alt", c.alt_text);
1104      }
1105
1106      if (cardIcon) {
1107        const iconClass = {
1108          webpage: "fa-globe",
1109          pdf: "fa-file-pdf",
1110          image: "fa-file-image",
1111          video: "fa-play-circle"
1112        }[c.mediaType] || "fa-globe";
1113        cardIcon.className = cardIcon.className.replace(/\bfa-[^\s]+\b/g, "").trim();
1114        cardIcon.classList.add(iconClass);
1115      }
1116
1117      if (cardLink.dataset.hasOwnProperty("lookbookOverlayHref")) {
1118        cardLink.dataset.lookbookOverlayHref = c.url;
1119      }
1120
1121      if (cardDescription && c.description) {
1122        cardDescription.textContent = c.description;
1123        cardDescription.parentElement.style.display = "";
1124      }
1125
1126      if (cardCTA) {
1127        cardCTA.textContent = c.ctaLabel;
1128      }
1129
1130      pfAppendTagsToLpCard({ contentCard, content: c});
1131
1132      contentCard.style.display = "";
1133      contentListWrapper.appendChild(contentCard);
1134    });
1135  });
1136}
1137
1138function pfAppendTagsToLpCard({ contentCard, content: c }) {
1139  // The following classes are needed if is landing page
1140  const tagsOnCardWrapperClass = "pf-content-tag-on-card-wrapper";
1141  const tagsBelowCardWrapperClass = "pf-content-tag-below-card-wrapper";
1142  const tagOnCardClass = "pf-content-tag-on-card";
1143  const tagBelowCardClass = "pf-content-tag-below-card";
1144  // The following classes are needed if is content page
1145  const sidebarCardTagsWrapperClass = "pf-content-tags-wrapper";
1146  const sidebarTagClass = "pf-content-tag";
1147  // The following classes are needed
1148  const pinnedClass = "pf-pinned-content-tag";
1149
1150  const tagsOnCardWrapper = contentCard.querySelector(`.${tagsOnCardWrapperClass}`);
1151  const tagsBelowCardWrapper = contentCard.querySelector(`.${tagsBelowCardWrapperClass}`);
1152  const sidebarCardTagsWrapper = contentCard.querySelector(`.${sidebarCardTagsWrapperClass}`);
1153
1154  if (c.isPinned) {
1155    const pinnedTag = contentCard.querySelector(`.${pinnedClass}`);
1156    pinnedTag.style.display = "";
1157  }
1158
1159  if (tagsOnCardWrapper) {
1160    const tagOnCardTemplate = tagsOnCardWrapper.querySelector(`.${tagOnCardClass}`);
1161    const enabledTagTypes = tagOnCardTemplate.dataset.enabledTags.split(",");
1162
1163    if (c.contentType && enabledTagTypes.includes("content_type")) {
1164      const contentTypeTag = tagOnCardTemplate.cloneNode();
1165      contentTypeTag.textContent = c.contentType;
1166      tagsOnCardWrapper.appendChild(contentTypeTag);
1167    }
1168
1169    if (c.language && enabledTagTypes.includes("language")) {
1170      const languageTag = tagOnCardTemplate.cloneNode();
1171      languageTag.textContent = c.language;
1172      tagsOnCardWrapper.appendChild(languageTag);
1173    }
1174
1175    if (c.isPinned) {
1176      tagsOnCardWrapper.style.display = "flex";
1177    }
1178
1179    tagOnCardTemplate.remove();
1180  }
1181
1182  if (tagsBelowCardWrapper) {
1183    const tagBelowCardTemplate = tagsBelowCardWrapper.querySelector(`.${tagBelowCardClass}`);
1184    const enabledTagTypes = tagBelowCardTemplate.dataset.enabledTags.split(",");
1185
1186    const customCategoryDimensionsByType = customCategoryKeys.reduce((acc, item) => {
1187      const camelizedKey = pfCamelize(item);
1188      if (c && c[camelizedKey]) {
1189        acc[item] = c[camelizedKey];
1190      }
1191      return acc;
1192    }, {});
1193
1194    const dimensionsByType = {
1195      business_units: c.businessUnits,
1196      funnel_stages: c.funnelStages,
1197      industries: c.industries,
1198      personas: c.personas,
1199      products: c.products,
1200      solutions: c.solutions,
1201      topics: c.topics,
1202      ...customCategoryDimensionsByType 
1203    };
1204
1205    if (Object.values(dimensionsByType).flat().length > 0) {
1206      enabledTagTypes.forEach((type) => {
1207        const dimensions = dimensionsByType[type] || [];
1208        dimensions.forEach((d) => {
1209          const dimensionTag = tagBelowCardTemplate.cloneNode();
1210          dimensionTag.textContent = d;
1211          tagsBelowCardWrapper.appendChild(dimensionTag);
1212        });
1213      });
1214    }
1215
1216    tagBelowCardTemplate.remove();
1217  }
1218
1219  if (sidebarCardTagsWrapper) {
1220    const tagTemplate = sidebarCardTagsWrapper.querySelector(`.${sidebarTagClass}`);
1221    const enabledTagTypes = tagTemplate.dataset.enabledContentTags.split(",");
1222    enabledTagTypes.forEach((tagType) => {
1223      const tags = [c[pfCamelize(tagType)] || []].flat();
1224      tags.forEach((tag) => {
1225        const newTagNode = tagTemplate.cloneNode();
1226        newTagNode.textContent = tag;
1227        newTagNode.style.display = "";
1228        sidebarCardTagsWrapper.appendChild(newTagNode);
1229      });
1230    });
1231  }
1232}
1233
1234// This is for content-list section. Function hides/unhides cards
1235function pfUpdateDisplayedContents({
1236  sectionSelector = "",
1237  contents = [],
1238  isLazyLoad = false,
1239  currentParams = {}
1240}) {
1241  // The following classes are needed if is glide carousel
1242  const glideContainerClass = "glide";
1243
1244  const section = document.querySelector(sectionSelector);
1245  const glideCarousel = section.querySelector(`.${glideContainerClass}`);
1246
1247  if (glideCarousel) {
1248    const glideId = glideCarousel?.dataset?.carouselGlideId;
1249    const glideConfig = window.carouselConfiguration?.[glideId];
1250    let glideApi = window.pfGlides?.[glideId];
1251    const glideReady = glideConfig && glideApi;
1252
1253    if (!glideReady) return;
1254
1255    glideApi.destroy();
1256    pfBuildCards({ sectionSelector, contents, isLazyLoad, currentParams, isCarousel: true });
1257    glideApi = new Glide(glideCarousel, glideConfig)
1258    window.pfGlides[glideId] = glideApi;
1259    glideApi.mount();
1260    pfUpdateGlideControls({ sectionSelector, currentContents: contents });
1261  } else {
1262    pfBuildCards({ sectionSelector, contents, isLazyLoad, currentParams });
1263  }
1264}
1265
1266function pfUpdateGlideControls({ sectionSelector, currentContents = [] }) {
1267  // The following classes are needed for glide carousel
1268  const glideContainerClass = "glide";
1269  const glideArrowsContainerClass = "glide__arrows";
1270  const glideBulletClass = "glide__bullet";
1271  const hiddenBulletClass = "glide__bullet--between";
1272
1273  const section = document.querySelector(sectionSelector);
1274  const glideContainer = section.querySelector(`.${glideContainerClass}`);
1275  const glideArrowsContainer = section.querySelector(`.${glideArrowsContainerClass}`);
1276  const visibleGlideBullets = section.querySelectorAll(`.${glideBulletClass}:not(.${hiddenBulletClass})`);
1277  let tilesPerRow = glideContainer?.dataset?.tilesPerRow;
1278  if (window.innerWidth > 640 && window.innerWidth <= 1024 && tilesPerRow != 1) {
1279    tilesPerRow = 2;
1280  } else if (window.innerWidth <= 640) {
1281    tilesPerRow = 1;
1282  }
1283
1284  if (!glideContainer || !tilesPerRow) return;
1285
1286  if (glideArrowsContainer) {
1287    glideArrowsContainer.style.display = currentContents.length <= tilesPerRow
1288      ? "none"
1289      : "";
1290  }
1291
1292  visibleGlideBullets.forEach((bullet) => {
1293    const bulletIndex = (bullet.dataset.glideDir || "0").match(/\d+/)[0] || 0;
1294    const hide = bulletIndex >= currentContents.length || currentContents.length <= tilesPerRow;
1295    bullet.style.display = hide ? "none" : "";
1296    bullet.setAttribute("tabindex", hide ? -1 : 0);
1297  });
1298}
1299
1300function pfUpdateContentsStatus({
1301  sectionSelector,
1302  contents = []
1303}) {
1304  // The following classes are required
1305  const statusContainerClass = "pf-no-results"
1306  const visuallyHiddenClass = "visually-hidden";
1307
1308  const section = document.querySelector(sectionSelector);
1309  const statusContainers = section?.querySelectorAll(`.${statusContainerClass}`) || [];
1310  statusContainers.forEach((statusContainer) => {
1311    if (contents.length === 0) {
1312      statusContainer.classList.remove(visuallyHiddenClass);
1313      statusContainer.textContent = "No results match the search/filter criteria.";
1314    } else {
1315      statusContainer.classList.add(visuallyHiddenClass);
1316      statusContainer.textContent = `${contents.length} results found`;
1317    }
1318  });
1319}
1320
1321function pfUpdateQueryStrings({ sectionSelector, currentParams = {}, filtersConfig = {} }) {
1322  const paramsMappedToLabels = { page: currentParams.page || 1 };
1323  PF_FILTER_TYPES.forEach((filterType) => {
1324    const selectedIdsForType = currentParams[filterType] || [];
1325    paramsMappedToLabels[filterType] = selectedIdsForType.map((id) => {
1326      const optionsForType = filtersConfig[filterType] || [];
1327      const option = optionsForType.find((option) => option.value == id);
1328      return option?.label;
1329    }).filter((label) => label);
1330  });
1331
1332  const newBrowserUrl = pfUpdateUrlParams(window.location.href, paramsMappedToLabels);
1333  history.replaceState({}, "", newBrowserUrl);
1334  pfUpdateContentSectionQueryStrings({ sectionSelector, params: paramsMappedToLabels });
1335}
1336
1337function pfUpdateContentSectionQueryStrings({ sectionSelector, params = {} }) {
1338  // The following classes are needed
1339  const cardClass = "pf-content-card";
1340  // Classes not strictly needed
1341  const templateClass = "template";
1342
1343  const section = document.querySelector(sectionSelector);
1344  const contentLinks = section.querySelectorAll(`.${cardClass}:not(.${templateClass}) a`);
1345  contentLinks.forEach((link) => {
1346    link.href = pfUpdateUrlParams(link.href || "", params);
1347  });
1348}
1349
1350function pfGetContentsOnPage({ sectionSelector }) {
1351  // The following classes are needed
1352  const contentCardClass = "pf-content-card";
1353  const templateClass = "template";
1354
1355  const section = document.querySelector(sectionSelector);
1356
1357  if (!section) return [];
1358
1359  const cards = Array.from(section.querySelectorAll(`.${contentCardClass}:not(.${templateClass})`));
1360  const contentsData = cards.map((card) => ({ uuid: card.dataset.uuid }));
1361  const seen = new Set();
1362  // To account for presence of desktop & mobile cards
1363  const uniqueContentsData = contentsData.filter((content) => {
1364    if (seen.has(content.uuid)) return false;
1365    seen.add(content.uuid);
1366    return true;
1367  });
1368  
1369  return uniqueContentsData;
1370}
1371
1372// ---------- custom on-image tag overlay due to zigzag layout ----------
1373function pfMoveOnCardTags(contentCard) {
1374  const imageContainer = contentCard.querySelector('.image-container');
1375  const onCardWrapper =
1376    contentCard.querySelector('.content-container .pf-content-tag-on-card-wrapper') ||
1377    contentCard.querySelector('.pf-content-tag-on-card-wrapper');
1378
1379  if (!imageContainer || !onCardWrapper) return;
1380
1381  if (getComputedStyle(imageContainer).position === 'static') {
1382    imageContainer.style.position = 'relative';
1383  }
1384
1385  let overlayHost = imageContainer.querySelector('.pf-tags-overlay');
1386  if (!overlayHost) {
1387    overlayHost = document.createElement('div');
1388    overlayHost.className = 'pf-tags-overlay';
1389    imageContainer.appendChild(overlayHost);
1390  }
1391  if (onCardWrapper.parentElement !== overlayHost) {
1392    overlayHost.appendChild(onCardWrapper);
1393  }
1394  onCardWrapper.classList.add('in-overlay');
1395
1396  // ensure visible if it has chips
1397  onCardWrapper.style.display   = onCardWrapper.childElementCount ? 'inline-flex' : 'none';
1398  onCardWrapper.style.margin    = '0';
1399  onCardWrapper.style.width     = 'auto';
1400  onCardWrapper.style.maxWidth  = '100%';
1401
1402  // place at the image's top-left corner (slightly outside), regardless of side
1403  requestAnimationFrame(() => {
1404    overlayHost.style.right = '';
1405    if (!window.matchMedia('(min-width: 768px)').matches) {
1406      overlayHost.style.left = '10px'; // mobile: inside
1407      return;
1408    }
1409    overlayHost.style.left = '-8px';   // desktop: small left bleed
1410  });
1411}
1412
1413function pfHydrateOnCardTags(sectionEl) {
1414  const cards = sectionEl.querySelectorAll('.content-list-card-side');
1415  cards.forEach(pfMoveOnCardTags);
1416}
1417
1418function pfRepositionAllOverlays(sectionEl) {
1419  const cards = sectionEl.querySelectorAll('.content-list-card-side');
1420  cards.forEach(pfMoveOnCardTags);
1421}
1422
1423function pfBuildZigzagCards({
1424  sectionSelector = "",
1425  contents = [],
1426  isLazyLoad = false,
1427  currentParams = {}
1428}) {
1429  const contentsWrapperClass = "pf-resource-center-cards-wrapper";
1430  const sidebarContentsWrapperClass = "pf-cards-wrapper";
1431  const cardClass = "pf-content-card";
1432  const templateClass = "template";
1433  const titleClass = "pf-content-card-title";
1434  const linkClass = "pf-content-card-link";
1435  const descriptionClass = "pf-content-card-description";
1436  const cardCtaClass = "pf-content-card-cta";
1437  const thumbnailClass = "pf-content-card-thumbnail";
1438  const cardIconClass = "pf-card-icon";
1439
1440  let section = document.querySelector(sectionSelector);
1441  if (!section) {
1442    if (!sectionSelector.startsWith("section-") && !sectionSelector.startsWith(".section-")) {
1443      section = document.querySelector(`.section-${sectionSelector.replace(/^\./, '')}`);
1444    }
1445    if (!section) {
1446      const nodeId = sectionSelector.replace(/^\.?section-/, '');
1447      section = document.querySelector(`[data-section-id="${nodeId}"]`);
1448    }
1449    if (!section) return;
1450  }
1451
1452  const contentWrapper = section.querySelector(`.${contentsWrapperClass}, .${sidebarContentsWrapperClass}`);
1453  if (!contentWrapper) return;
1454
1455  const contentCardTemplate = contentWrapper.querySelector(`.${cardClass}.${templateClass}`) || 
1456                              section.querySelector(`.${cardClass}.${templateClass}`);
1457  if (!contentCardTemplate) return;
1458
1459  if (!isLazyLoad || currentParams.page == 1) {
1460    const templateCopy = contentCardTemplate.cloneNode(true);
1461    contentWrapper.innerHTML = "";
1462    contentWrapper.appendChild(templateCopy);
1463  }
1464
1465  const noResultsClass = "pf-no-results";
1466  const visuallyHiddenClass = "visually-hidden";
1467  const statusContainers = section.querySelectorAll(`.${noResultsClass}, .no-results`) || [];
1468  statusContainers.forEach(statusContainer => {
1469    if (contents.length === 0) {
1470      statusContainer.classList.remove(visuallyHiddenClass);
1471      statusContainer.textContent = "No results match the search/filter criteria";
1472    } else {
1473      statusContainer.classList.add(visuallyHiddenClass);
1474      statusContainer.textContent = `${contents.length} results found`;
1475    }
1476  });
1477
1478  (contents || []).forEach((c, index) => {
1479    const contentCard = contentCardTemplate.cloneNode(true);
1480    const isEven = (index + 1) % 2 === 0;
1481
1482    contentCard.classList.remove(templateClass);
1483    contentCard.style.display = "block";
1484    contentCard.style.visibility = "visible";
1485    contentCard.dataset.uuid = c.uuid;
1486
1487    contentCard.dataset.contentId = c.id || '';
1488    contentCard.dataset.title = c.title || '';
1489    contentCard.dataset.isPinned = c.isPinned || false;
1490
1491    if (c.topics) contentCard.dataset.topics = JSON.stringify(c.topics);
1492    if (c.language) contentCard.dataset.language = c.language;
1493    if (c.personas) contentCard.dataset.personas = JSON.stringify(c.personas);
1494    if (c.businessUnits) contentCard.dataset.businessUnits = JSON.stringify(c.businessUnits);
1495    if (c.industries) contentCard.dataset.industries = JSON.stringify(c.industries);
1496    if (c.products) contentCard.dataset.products = JSON.stringify(c.products);
1497    if (c.solutions) contentCard.dataset.solutions = JSON.stringify(c.solutions);
1498    if (c.contentType) contentCard.dataset.contentType = c.contentType;
1499    if (c.funnelStages) contentCard.dataset.funnelStages = JSON.stringify(c.funnelStages);
1500
1501    const cardTitle = contentCard.querySelector(`.${titleClass}`);
1502    const cardDescription = contentCard.querySelector(`.${descriptionClass}`);
1503    const cardThumbnail = contentCard.querySelector(`.${thumbnailClass}`);
1504    const cardLink = contentCard.querySelector(`.${linkClass}`);
1505    const cardCTA = contentCard.querySelector(`.${cardCtaClass}`);
1506    const cardIcon = contentCard.querySelector(`.${cardIconClass}`);
1507
1508    if (cardTitle) cardTitle.textContent = c.title;
1509    if (cardLink) cardLink.href = c.url;
1510
1511    if (cardThumbnail) {
1512      cardThumbnail.src = c.thumbnail;
1513      cardThumbnail.setAttribute("alt", c.alt_text || c.title);
1514    }
1515    const thumbnails = contentCard.querySelectorAll(`.${thumbnailClass}`);
1516    thumbnails.forEach(img => {
1517      img.src = c.thumbnail;
1518      img.alt = c.alt_text || c.title;
1519    });
1520
1521    if (cardIcon) {
1522      const iconClass = {
1523        webpage: "fa-globe",
1524        pdf: "fa-file-pdf",
1525        image: "fa-file-image",
1526        video: "fa-play-circle"
1527      }[c.mediaType] || "fa-globe";
1528      cardIcon.className = cardIcon.className.replace(/\bfa-[^\s]+\b/g, "").trim();
1529      cardIcon.classList.add(iconClass);
1530    }
1531
1532    if (cardLink && cardLink.dataset.hasOwnProperty("lookbookOverlayHref")) {
1533      cardLink.dataset.lookbookOverlayHref = c.url;
1534    }
1535
1536    if (cardDescription && c.description) {
1537      cardDescription.textContent = c.description;
1538      const descContainer = cardDescription.closest('[style*="display:none"]');
1539      if (descContainer) descContainer.style.display = '';
1540    }
1541
1542    if (cardCTA && c.ctaLabel) {
1543      cardCTA.textContent = c.ctaLabel;
1544    }
1545
1546    const zigzagWrapper = document.createElement('div');
1547    zigzagWrapper.className = isEven ? 'zigzag-item zigzag-even' : 'zigzag-item zigzag-odd';
1548
1549    try {
1550      pfAppendTagsToLpCard({ contentCard, content: c });
1551    } catch (e) {
1552      console.error("Error appending tags:", e);
1553    }
1554
1555    zigzagWrapper.appendChild(contentCard);
1556    contentWrapper.appendChild(zigzagWrapper);
1557
1558    // place on-image tags
1559    pfMoveOnCardTags(contentCard);
1560  });
1561
1562  // after building all cards, ensure placement is correct
1563  pfRepositionAllOverlays(section);
1564}
1565
1566
1567  class PfContentsApi {
1568    static initialParams = {
1569      sort: "",
1570      page: 1,
1571      search: "",
1572      dimensions: [],
1573      languages: [],
1574      content_types: []
1575    };
1576    static blankSectionState = {
1577      currentParams: PfContentsApi.initialParams,
1578      currentContents: [],
1579      totalScopedContents: 0,
1580      totalContents: 0,
1581      contentsPerPage: 9,
1582      enablePagination: true,
1583      enableQueryParams: false,
1584      enabledFilters: [],
1585      filtersConfig: {}
1586    };
1587    static state = {};
1588    static presets = {
1589      resourceCenter: {},
1590      contentList: {
1591        buildCards: pfUpdateDisplayedContents
1592      },
1593      contentPage: {}
1594    };
1595
1596    constructor({
1597      // required
1598      sectionNodeId,
1599      // required if not resource-center section
1600      preset = "resourceCenter",
1601      // optional overrides
1602      sectionSelector,
1603      fetchContents,
1604      buildCards,
1605      updateQueryStrings,
1606      updateFilters,
1607      updateStatus,
1608      updatePagination,
1609      fetchFilters,
1610      buildFilters,
1611      addPaginationEvents,
1612      addSearchEvent,
1613      addSortEvents,
1614      applyQueryParams,
1615      getContentsOnPage
1616    }) {
1617      this.preset = preset;
1618      this.sectionNodeId = sectionNodeId;
1619      this.sectionSelector = sectionSelector || `.section-${this.sectionNodeId}`;
1620      this.fetchContents = fetchContents || pfFetchContents;
1621      this.buildCards = buildCards || PfContentsApi.presets[preset]?.buildCards || pfBuildCards;
1622      this.updateQueryStrings = updateQueryStrings || pfUpdateQueryStrings;
1623      this.updateFilters = updateFilters || pfUpdateFilters;
1624      this.updateStatus = updateStatus || pfUpdateContentsStatus;
1625      this.updatePagination = updatePagination || pfUpdatePagination;
1626      this.fetchFilters = fetchFilters || pfFetchFilters;
1627      this.buildFilters = buildFilters || pfBuildFilters;
1628      this.addPaginationEvents = addPaginationEvents || pfAddPaginationEvents;
1629      this.addSearchEvent = addSearchEvent || pfAddSearchEvent;
1630      this.addSortEvents = addSortEvents || pfAddSortEvents;
1631      this.applyQueryParams = applyQueryParams || pfApplyQueryParams;
1632      this.getContentsOnPage = getContentsOnPage || pfGetContentsOnPage;
1633
1634      // Functions used in event listeners (outside a class instance) must bind "this"
1635      this.handleParamsChange = this.handleParamsChange.bind(this);
1636
1637    }
1638
1639    setSectionState(arg1, value) {
1640      const stateUpdates = typeof arg1 === "string" ? { [arg1]: value } : arg1;
1641      PfContentsApi.state[this.sectionNodeId] = {
1642        ...(PfContentsApi.state[this.sectionNodeId] || PfContentsApi.blankSectionState),
1643        ...stateUpdates
1644      };
1645    }
1646
1647    get sectionState() {
1648      return PfContentsApi.state[this.sectionNodeId] || PfContentsApi.blankSectionState;
1649    }
1650
1651    setCurrentContents(contents = [], isLazyLoad = false) {
1652      const updatedContents = isLazyLoad
1653        ? [...this.sectionState.currentContents, ...contents]
1654        : contents;
1655      this.setSectionState("currentContents", updatedContents);
1656    }
1657    
1658    setCurrentParams(params = {}) {
1659      const currentParams = this.sectionState.currentParams;
1660      const groupedCheckedDimensions = DIMENSION_FILTER_TYPES.map((filterType) =>
1661        params[filterType] || currentParams[filterType] || []
1662      );
1663      const newParams = {
1664        ...currentParams,
1665        ...params,
1666        dimensions: groupedCheckedDimensions,
1667        page: params.page || 1
1668      };
1669      if (!this.sectionState.enablePagination) {
1670        newParams.page = 1;
1671        newParams.limit = this.sectionState.totalContents;
1672      }
1673      this.setSectionState("currentParams", newParams);
1674    }
1675
1676    // valid values of context: page_load, lazy_load, undefined
1677    async handleParamsChange(params = {}, context = undefined) {
1678      this.setCurrentParams(params);
1679      const response = await this.fetchContents({
1680        sectionNodeId: this.sectionNodeId,
1681        params: this.sectionState.currentParams,
1682        loadedContentUuids: this.sectionState.currentContents.map((c) => c.uuid),
1683        contentsPerPage: this.sectionState.contentsPerPage,
1684        fetchType: context == "page_load" && this.sectionState.paginationType == "lazy_load" ? "upToPage" : "currentPage"
1685      }) || [];
1686      const contents = response.contents || []
1687      this.setCurrentContents(contents, context == "lazy_load");
1688      this.setSectionState("totalScopedContents", response.totalContents || 0);
1689
1690      this.buildCards({
1691        sectionSelector: this.sectionSelector,
1692        contents: contents,
1693        isLazyLoad: context == "lazy_load",
1694        currentParams: this.sectionState.currentParams
1695      });
1696
1697      this.updateFilters({
1698        sectionSelector: this.sectionSelector,
1699        params: this.sectionState.currentParams
1700      });
1701      this.updateStatus({
1702        sectionSelector: this.sectionSelector,
1703        contents: this.sectionState.currentContents
1704      });
1705      this.updatePagination({
1706        sectionSelector: this.sectionSelector,
1707        params: this.sectionState.currentParams,
1708        totalContents: this.sectionState.totalScopedContents,
1709        currentContents: this.sectionState.currentContents,
1710        contentsPerPage: this.sectionState.contentsPerPage
1711      });
1712      // Don't want to update query strings on page load because query strings
1713      // are supposed to apply to multiple sections. Once one section applies the
1714      // query params, it must not update the query params based on its own valid
1715      // filters, or else other sections might not get filtered by those values.
1716      // On subsequent filtering from using the UI, then we can update the query
1717      // params because filters UI only meant to apply to its own section.
1718      if (this.sectionState.enableQueryParams && context !== "page_load") {
1719        this.updateQueryStrings({
1720          sectionSelector: this.sectionSelector,
1721          currentParams: this.sectionState.currentParams,
1722          filtersConfig: this.sectionState.filtersConfig
1723        });
1724      }
1725    }
1726
1727    async initializeContentControls() {
1728      const filters = await this.fetchFilters(this.sectionNodeId);
1729      this.setSectionState({
1730        totalScopedContents: filters.totalContents || 0,
1731        totalContents: filters.totalContents || 0,
1732        contentsPerPage: (!filters.enablePagination && filters.totalContents) || filters.contentsPerPage || 0,
1733        enablePagination: filters.enablePagination,
1734        paginationType: filters.paginationType,
1735        enableQueryParams: filters.enableQueryParams,
1736        enabledFilters: filters.enabledFilters || [],
1737        filtersConfig: {
1738          ...(filters.dimensions || {}),
1739          contentTypes: filters.contentTypes,
1740          content_types: filters.contentTypes,
1741          languages: filters.languages
1742        },
1743        currentContents: this.getContentsOnPage({ sectionSelector: this.sectionSelector })
1744      });
1745
1746      this.buildFilters({
1747        filters,
1748        sectionSelector: this.sectionSelector,
1749        sectionNodeId: this.sectionNodeId,
1750        fetchCurrentParams: () => this.sectionState.currentParams,
1751        handleParamsChange: this.handleParamsChange
1752      });
1753      this.addPaginationEvents({
1754        sectionSelector: this.sectionSelector,
1755        contentsPerPage: this.sectionState.contentsPerPage,
1756        handleParamsChange: this.handleParamsChange,
1757        fetchTotalContents: () => this.sectionState.totalScopedContents,
1758        fetchCurrentParams: () => this.sectionState.currentParams
1759      });
1760      this.updatePagination({
1761        sectionSelector: this.sectionSelector,
1762        params: this.sectionState.currentParams,
1763        totalContents: this.sectionState.totalScopedContents,
1764        currentContents: this.sectionState.currentContents,
1765        contentsPerPage: this.sectionState.contentsPerPage
1766      });
1767      this.addSearchEvent({
1768        sectionSelector: this.sectionSelector,
1769        handleParamsChange: this.handleParamsChange
1770      });
1771      this.addSortEvents({
1772        sectionSelector: this.sectionSelector,
1773        handleParamsChange: this.handleParamsChange
1774      });
1775      if (this.sectionState.enableQueryParams) {
1776        this.applyQueryParams({
1777          handleParamsChange: this.handleParamsChange,
1778          filtersConfig: this.sectionState.filtersConfig,
1779          enabledFilters: this.sectionState.enabledFilters
1780        });
1781      }
1782    }
1783  }
1784</script>
1784
1785
1786
1787
1788<script>
1789  const reconstructUrl = (newFilterQueryParams) => {
1790    const isContentPage = true;
1791    if (isContentPage) {
1792      const allowedFilters = ["topics", "languages", "personas", "business_units", "industries", "products", "solutions", "content_types", "funnel_stages", "current_page", ...customCategoryKeys];
1793      const allParams = new URLSearchParams(window.location.search);
1794      const allParamsAsObject = Object.fromEntries(allParams);
1795      const nonFilterParams = Object.keys(allParamsAsObject).
1796        filter((key) => !allowedFilters.includes(key)).
1797        reduce((cur, key) => { return Object.assign(cur, { [key]: allParamsAsObject[key] })}, {});
1798      const nonFilterQueryParams = convertToQueryParams(nonFilterParams);
1799      const currentUrl = window.location.href;
1800      const path = currentUrl.substring(0, currentUrl.indexOf('?'));
1801      history.replaceState({}, "", `${path}?${nonFilterQueryParams}&${newFilterQueryParams}`);
1802      const allContentLinks = document.querySelectorAll(".assets-content-page a");
1803      for (let i = 0; i < allContentLinks.length; i++) {
1804        const contentUrl = allContentLinks[i].href.split("?")[0];
1805        allContentLinks[i].href = (`${contentUrl}?${nonFilterQueryParams}&${newFilterQueryParams}`.replace("&lb-mode=overlay", ""));
1806      }
1807    }
1808  };
1809
1810  function pfUpdateCheckedFiltersCount(sectionNodeId) {
1811    const section = document.querySelector(`.section-${sectionNodeId}`);
1812    const optionWrappers = section.querySelectorAll("ul[class*='pf-options-wrapper-']");
1813    optionWrappers.forEach((wrapper) => {
1814      const f = wrapper.closest("[class*=select-container]");
1815
1816      if (!f) return;
1817
1818      const checkboxes = Array.from(f.querySelectorAll(".pf-checkbox"));
1819      const checkedOptionsCount = checkboxes.reduce((total, cb) => {
1820        return cb.checked ? total + 1 : total;
1821      }, 0);
1822      const countLabel = f.querySelector(".pf-selected-options-count");
1823      countLabel.style.display = checkedOptionsCount === 0 ? "none" : "inline-block";
1824      countLabel.textContent = checkedOptionsCount > 0 ? checkedOptionsCount : "";
1825    });
1826    const filterContainers = section.querySelectorAll(".pf-resource-center-filters");
1827    filterContainers.forEach((filterContainer) => {
1828      const totalCheckedFiltersLabel = filterContainer.querySelector(".pf-total-checked-filters-count");
1829      const overallFiltersLabel = filterContainer.querySelector(".pf-filters-label");
1830      if (totalCheckedFiltersLabel && overallFiltersLabel) {
1831        const totalChecked = Array.from(filterContainer.querySelectorAll(".pf-checkbox")).reduce((total, cb) => {
1832          return cb.checked ? total + 1 : total;
1833        }, 0);
1834        totalCheckedFiltersLabel.textContent = totalChecked;
1835        if (totalChecked > 0) {
1836          totalCheckedFiltersLabel.style.display = "";
1837          overallFiltersLabel.textContent = "Filter by:";
1838        } else {
1839          totalCheckedFiltersLabel.style.display = "none";
1840          overallFiltersLabel.textContent = "Filter by";
1841        }
1842      }
1843    });
1844  }
1845
1846  function pfUpdateUrlsWithFilterParams(sectionNodeId) {
1847    const filterOptions = window.pfAllFilterOptions || {};
1848    const selectedFilters = window.pfResourceCenterParams?.[sectionNodeId] || {};
1849    const userDefinedCategoryParams = customCategoryKeys.reduce((acc, key) => {
1850      acc[key] = selectedFilters?.[key]?.map((id) => filterOptions?.dimensions?.[key]?.find((t) => t.value == id)?.label)?.filter((x) => x) || [];
1851      return acc;
1852    }, {});
1853    reconstructUrl(convertToQueryParams({
1854      topics: selectedFilters.topics?.map((id) => filterOptions.dimensions?.topics?.find((t) => t.value == id)?.label)?.filter((x) => x) || [],
1855      languages: selectedFilters.languages?.map((id) => filterOptions.languages?.find((t) => t.value == id)?.label)?.filter((x) => x) || [],
1856      personas: selectedFilters.personas?.map((id) => filterOptions.dimensions?.personas?.find((t) => t.value == id)?.label)?.filter((x) => x) || [],
1857      business_units: selectedFilters.business_units?.map((id) => filterOptions.dimensions?.business_units?.find((t) => t.value == id)?.label)?.filter((x) => x) || [],
1858      industries: selectedFilters.industries?.map((id) => filterOptions.dimensions?.industries?.find((t) => t.value == id)?.label)?.filter((x) => x) || [],
1859      products: selectedFilters.products?.map((id) => filterOptions.dimensions?.products?.find((t) => t.value == id)?.label)?.filter((x) => x) || [],
1860      solutions: selectedFilters.solutions?.map((id) => filterOptions.dimensions?.solutions?.find((t) => t.value == id)?.label)?.filter((x) => x) || [],
1861      content_types: selectedFilters.content_types?.map((id) => filterOptions.contentTypes?.find((t) => t.value == id)?.label)?.filter((x) => x) || [],
1862      funnel_stages: selectedFilters.funnel_stages?.map((id) => filterOptions.dimensions?.funnel_stages?.find((t) => t.value == id)?.label)?.filter((x) => x) || [],
1863      current_page: `${selectedFilters.page}`,
1864      ...userDefinedCategoryParams
1865    }));
1866  }
1867
1868  async function pfGetContents({
1869    sectionNodeId,
1870    isLoadMore = false,
1871    updateParams = {}
1872  }) {
1873    const sectionSelector = `.section-${sectionNodeId}`;
1874    const contents = Array.from(document.querySelectorAll(`.section-${sectionNodeId} .pf-content-card`));
1875    const contentUuids = contents.map((c) => c.dataset.uuid).filter((x) => x);
1876    const landingPageId = "";
1877    const segmentGroupId = "";
1878    const api_url = `${jukeboxApiHost}/api/public/v3/get_contents/${window.location.search}`;
1879    const initialParams = {
1880      sort: "",
1881      page: 1,
1882      search: "",
1883      dimensions: [],
1884      languages: [],
1885      content_types: []
1886    };
1887    const newParams = {
1888      ...(window.pfResourceCenterParams?.[sectionNodeId] || initialParams),
1889      ...updateParams
1890    };
1891    window.pfResourceCenterParams = {
1892      ...(window.pfResourceCenterParams || {}),
1893      [sectionNodeId]: newParams
1894    };
1895    const body = {
1896      ...newParams,
1897      landingPageId,
1898      sectionNodeId,
1899      clientId,
1900      baseUrl: "https://nurturenow.pathfactory.com",
1901      visitorUuid: pfGetCookie("vid"),
1902      sessionId: (pfGetCookie(/_pf_id.+/) || "").split(".")[5],
1903      segmentGroupId,
1904      loadedContentUuids: newParams.page === 1 ? [] : contentUuids
1905    };
1906    const response = await fetch(api_url, {
1907      method: "POST",
1908      headers: { "Content-Type": "application/json" },
1909      body: JSON.stringify(body)
1910    });
1911    const result = await response.json();
1912
1913    window.pfResourceCenterParams[sectionNodeId] = {
1914      ...window.pfResourceCenterParams[sectionNodeId],
1915      totalContents: result.totalContents
1916    };
1917    window.document.dispatchEvent(new CustomEvent('pageMetadataUpdated', { detail: sectionNodeId }));
1918
1919    const section = document.querySelector(sectionSelector);
1920    const contentListWrapper = section.querySelector(".pf-resource-center-cards-wrapper");
1921    const contentCardTemplate = section.querySelector(".pf-content-card.template");
1922
1923    if (!contentCardTemplate || !contentListWrapper) return;
1924
1925    if (!isLoadMore) contentListWrapper.innerHTML = "";
1926
1927    const noResultsMessage = document.querySelector(".pf-no-results");
1928    if ((result.contents || []).length === 0 && !isLoadMore) {
1929      noResultsMessage.style.display = "";
1930    } else {
1931      noResultsMessage.style.display = "none";
1932    }
1933
1934    // This is for dynamically updating filter status message for screen reader
1935    const resultCountMessage = document.querySelector(`${sectionSelector} .results-count`);
1936    if(resultCountMessage) {
1937       const numberOfResults = result && result.contents ? (result.contents).length : 0;
1938       resultCountMessage.textContent = `${numberOfResults} result${numberOfResults !== 1 ? 's' : ''} found`;
1939    }  
1940
1941    (result.contents || []).forEach((c) => {
1942      const contentCard = contentCardTemplate.cloneNode(true);
1943      contentCard.dataset.uuid = c.uuid;
1944      contentCard.querySelector(".pf-content-card-title").textContent = c.title;
1945      contentCard.querySelector(".pf-content-card-thumbnail").src = c.thumbnail;
1946      contentCard.querySelector(".pf-content-card-thumbnail").setAttribute("alt", c.alt_text);
1947      contentCard.querySelector(".pf-content-card-link").href = c.url;
1948      const linkNode = contentCard.querySelector(".pf-content-card-link");
1949      if (linkNode.dataset.hasOwnProperty("lookbookOverlayHref")) {
1950        linkNode.dataset.lookbookOverlayHref = c.url;
1951      }
1952      const descriptionNode = contentCard.querySelector(".pf-content-card-description");
1953      if (descriptionNode && c.description) {
1954        descriptionNode.textContent = c.description;
1955        descriptionNode.parentElement.style.display = "";
1956      }
1957      const ctaLabelNode = contentCard.querySelector(".pf-content-card-cta");
1958      if (ctaLabelNode) {
1959        ctaLabelNode.textContent = c.ctaLabel;
1960      }
1961
1962      const tagsOnCardWrapper = contentCard.querySelector(".pf-content-tag-on-card-wrapper");
1963      const tagsBelowCardWrapper = contentCard.querySelector(".pf-content-tag-below-card-wrapper");
1964
1965      if (tagsOnCardWrapper || tagsBelowCardWrapper) {
1966        const tagOnCardTemplate = tagsOnCardWrapper?.querySelector(".pf-content-tag-on-card");
1967        const tagBelowCardTemplate = tagsBelowCardWrapper?.querySelector(".pf-content-tag-below-card");
1968        const enabledTagTypes = (tagBelowCardTemplate || tagOnCardTemplate).dataset.enabledTags.split(",");
1969        if (c.contentType && tagsOnCardWrapper && enabledTagTypes.includes("content_type")) {
1970          const contentTypeTag = tagOnCardTemplate.cloneNode();
1971          contentTypeTag.textContent = c.contentType;
1972          tagsOnCardWrapper.appendChild(contentTypeTag);
1973        }
1974        if (c.language && tagsOnCardWrapper && enabledTagTypes.includes("language")) {
1975          const languageTag = tagOnCardTemplate.cloneNode();
1976          languageTag.textContent = c.language;
1977          tagsOnCardWrapper.appendChild(languageTag);
1978        }
1979        const customCategoryDimensionsByType = customCategoryKeys.reduce((acc, item) => {
1980          const camelizedKey = item.replace(/(_\w)/g, function (match) {
1981            return match[1].toUpperCase();
1982          })
1983          if (c && c[camelizedKey]) {
1984            acc[item] = c[camelizedKey];
1985          }
1986          return acc;
1987        }, {});
1988
1989        const dimensionsByType = {
1990          business_units: c.businessUnits,
1991          funnel_stages: c.funnelStages,
1992          industries: c.industries,
1993          personas: c.personas,
1994          products: c.products,
1995          solutions: c.solutions,
1996          topics: c.topics,
1997          ...customCategoryDimensionsByType 
1998        };    
1999        if (Object.values(dimensionsByType).flat().length > 0 && tagsBelowCardWrapper) {
2000          enabledTagTypes.forEach((type) => {
2001            const dimensions = dimensionsByType[type] || [];
2002            dimensions.forEach((d) => {
2003              const dimensionTag = tagBelowCardTemplate.cloneNode();
2004              dimensionTag.textContent = d;
2005              tagsBelowCardWrapper.appendChild(dimensionTag);
2006            });
2007          });
2008        }
2009        if(tagOnCardTemplate) tagOnCardTemplate.remove();
2010        if(tagBelowCardTemplate) tagBelowCardTemplate.remove();
2011        if (c.isPinned) {
2012          const pinnedTag = tagsOnCardWrapper.querySelector(".pf-pinned-content-tag");
2013          pinnedTag.style.display = "";
2014          tagsOnCardWrapper.style.display = "flex";
2015        }
2016      }
2017
2018      contentCard.style.display = "";
2019      contentListWrapper.appendChild(contentCard);
2020    });
2021    pfUpdateCheckedFiltersCount(sectionNodeId);
2022    if (!isLoadMore) section.scrollIntoView();
2023  }
2024
2025  async function pfGetFilters(sectionNodeId) {
2026    console.log("Warning: You are using a legacy version of the resource-center which is no longer supported.");
2027    const isContentPage = true;
2028    const urlParams = new URLSearchParams(window.location.search);
2029    const sectionSelector = `.section-${sectionNodeId}`;
2030    const contentPlayUuid = urlParams.get("pf_cpid");
2031    const campaignUuid = urlParams.get("pf_cid");
2032    const landingPageId =
2033      isContentPage
2034        ? urlParams.get("pflpid")
2035        : "";
2036    const lpSectionNodeId =
2037      isContentPage
2038        ? urlParams.get("pfsid")
2039        : sectionNodeId;
2040    const segmentGroupId = "";
2041
2042    const contentPageParams = isContentPage ? {
2043      isContentPage: true,
2044      contentSource: "experience",
2045      templatedExperienceId: "26766"
2046    } : {};
2047
2048    const apiUrl = new URL(`${jukeboxApiHost}/api/public/v3/get_filter_options`);
2049    const params = { ...contentPageParams, landingPageId, sectionNodeId: lpSectionNodeId, clientId, segmentGroupId, pf_cpid: contentPlayUuid, pf_cid: campaignUuid };
2050    apiUrl.search = new URLSearchParams(params);
2051    const response = await fetch(apiUrl);
2052    const result = await response.json();
2053    window.pfAllFilterOptions = result;
2054
2055    if (typeof result?.totalContents === "number") {
2056      window.pfResourceCenterParams = {
2057        ...(window.pfResourceCenterParams || {}),
2058        [sectionNodeId]: {
2059          ...(window.pfResourceCenterParams?.[sectionNodeId] || {}),
2060          totalContents: result.totalContents || 0
2061        }
2062      };
2063      window.document.dispatchEvent(new CustomEvent('pageMetadataUpdated', { detail: sectionNodeId }));
2064    }
2065
2066    const section = document.querySelector(sectionSelector);
2067    const allFiltersWrapper = section.querySelectorAll(".pf-resource-center-filters");
2068
2069    if (allFiltersWrapper.length === 0) return;
2070
2071    allFiltersWrapper.forEach((filtersWrapper) => {
2072      const filterOptionTemplate = filtersWrapper.querySelector(".pf-options.pf-template");
2073      const contentTypeOptionsWrapper =
2074        filtersWrapper.querySelector(".pf-options-wrapper-content_type")
2075          || filtersWrapper.querySelector(".pf-options-wrapper-content_types");
2076      const languageOptionsWrapper =
2077        filtersWrapper.querySelector(".pf-options-wrapper-language")
2078          || filtersWrapper.querySelector(".pf-options-wrapper-languages");
2079
2080      if (contentTypeOptionsWrapper) {
2081        if (result.contentTypes.length === 0) {
2082          filtersWrapper.querySelector("[class*='select-content_type']").style.display = "none";
2083        } else {
2084          filtersWrapper.querySelector("[class*='select-content_type']").style.display = "";
2085          contentTypeOptionsWrapper.innerHTML = "";
2086        }
2087        result.contentTypes.forEach((ct) => {
2088          const contentTypeOption = filterOptionTemplate.cloneNode(true);
2089          const screenType = contentTypeOption?.querySelector(".pf-checkbox")?.getAttribute("data-screen");
2090          const labelSlug = ct.label.replace(/\s/g, "");
2091          const idPrefix =
2092            screenType && screenType === "desktop"
2093              ? `content_types-${labelSlug}-desktop`
2094              : `content_types-${labelSlug}`;
2095          contentTypeOption.querySelector(".pf-label").textContent = ct.label;
2096          contentTypeOption.querySelector(".pf-label").setAttribute("for", `${idPrefix}-${[sectionNodeId]}`);
2097          contentTypeOption.querySelector(".pf-checkbox").id =`${idPrefix}-${[sectionNodeId]}`;
2098          contentTypeOption.querySelector(".pf-checkbox").name = ct.value;
2099          contentTypeOption.querySelector(".pf-checkbox").dataset.label = ct.label;
2100          contentTypeOption.style.display = "";
2101          contentTypeOption.querySelector(".pf-checkbox").addEventListener("change", (event) => {
2102            const currentCheckedValues = window.pfResourceCenterParams?.[
2102sectionNodeId]?.["content_types"] || [];
2103            const checkedContentTypes =
2104              event.target.checked
2105                ? [...currentCheckedValues, ct.value]
2106                : currentCheckedValues.filter(x => x !== ct.value);
2107            const newParams = { ["content_types"]: checkedContentTypes, page: 1 };
2108            if (isContentPage) {
2109              pfGetContentPageContents({ sectionNodeId, updateParams: newParams });
2110            } else {
2111              pfGetContents({ sectionNodeId, updateParams: newParams });
2112            }
2113          });
2114          contentTypeOptionsWrapper.appendChild(contentTypeOption);
2115        });
2116      }
2117
2118      if (languageOptionsWrapper) {
2119        if (result.languages.length === 0) {
2120          filtersWrapper.querySelector("[class*='select-language']").style.display = "none";
2121        } else {
2122          filtersWrapper.querySelector("[class*='select-language']").style.display = "";
2123          languageOptionsWrapper.innerHTML = "";
2124        }
2125        result.languages.forEach((l) => {
2126          const languageOption = filterOptionTemplate.cloneNode(true);
2127          const screenType = languageOption?.querySelector(".pf-checkbox")?.getAttribute("data-screen");
2128          const labelSlug = l.label.replace(/\s/g, "");
2129          const idPrefix =
2130            screenType && screenType === "desktop"
2131              ? `languages-${labelSlug}-desktop`
2132              : `languages-${labelSlug}`;
2133          languageOption.querySelector(".pf-label").textContent = l.label;
2134          languageOption.querySelector(".pf-label").setAttribute("for", `${idPrefix}-${[sectionNodeId]}`);
2135          languageOption.querySelector(".pf-checkbox").id = `${idPrefix}-${[sectionNodeId]}`;
2136          languageOption.querySelector(".pf-checkbox").name = l.value;
2137          languageOption.querySelector(".pf-checkbox").dataset.label = l.label;
2138          languageOption.style.display = "";
2139          languageOption.querySelector(".pf-checkbox").addEventListener("change", (event) => {
2140            const currentCheckedValues = window.pfResourceCenterParams?.[sectionNodeId]?.languages || [];
2141            const checkedLanguages =
2142              event.target.checked
2143                ? [...currentCheckedValues, l.value]
2144                : currentCheckedValues.filter(x => x !== l.value);
2145            const newParams = { ["languages"]: checkedLanguages, page: 1 };
2146            if (isContentPage) {
2147              pfGetContentPageContents({ sectionNodeId, updateParams: newParams });
2148            } else {
2149              pfGetContents({ sectionNodeId, updateParams: newParams });
2150            }
2151          });
2152          languageOptionsWrapper.appendChild(languageOption);
2153        });
2154      }
2155
2156      const dimensionTypes = [
2157        "topics",
2158        "personas",
2159        "business_units",
2160        "industries",
2161        "products",
2162        "solutions",
2163        "funnel_stages",
2164        ...customCategoryKeys
2165      ];
2166      
2167      dimensionTypes.forEach((dt) => {
2168        const optionsWrapper = filtersWrapper.querySelector(`.pf-options-wrapper-${dt}`);
2169        if (optionsWrapper && (result.dimensions[dt] || []).length === 0) {
2170          filtersWrapper.querySelector(`.select-${dt}`).style.display = "none";
2171        }
2172        if (optionsWrapper && (result.dimensions[dt] || []).length > 0) {
2173          filtersWrapper.querySelector(`.select-${dt}`).style.display = "";
2174          optionsWrapper.innerHTML = "";
2175          result.dimensions[dt].forEach((d) => {
2176            const option = filterOptionTemplate.cloneNode(true);
2177            const screenType = option.querySelector(".pf-checkbox")?.getAttribute("data-screen");
2178            const labelSlug = d.label.replace(/\s/g, "");
2179            const idPrefix =
2180              screenType && screenType === "desktop"
2181                ? `${dt}-${labelSlug}-desktop`
2182                : `${dt}-${labelSlug}`;
2183            option.querySelector(".pf-label").textContent = d.label;
2184            option.querySelector(".pf-label").setAttribute("for", `${idPrefix}-${[sectionNodeId]}`);
2185            option.querySelector(".pf-checkbox").id = `${idPrefix}-${[sectionNodeId]}`;
2186            option.querySelector(".pf-checkbox").name = d.value;
2187            option.querySelector(".pf-checkbox").dataset.label = d.label;
2188            option.style.display = "";
2189            option.querySelector(".pf-checkbox").addEventListener("change", (event) => {
2190              const currentTypeCheckedValues = window.pfResourceCenterParams?.[
2190sectionNodeId]?.[dt] || [];
2191              const newCurrentTypeCheckedValues =
2192                event.target.checked
2193                  ? [...currentTypeCheckedValues, d.value]
2194                  : currentTypeCheckedValues.filter(x => x !== d.value);
2195              const newCheckedDimensions = [
2196                ...dimensionTypes.map((type) => {
2197                  if (type !== dt) return window.pfResourceCenterParams?.[sectionNodeId]?.[type];
2198                }),
2199                newCurrentTypeCheckedValues
2200              ].filter(x => x);
2201              const newParams = {
2202                [dt]: newCurrentTypeCheckedValues,
2203                dimensions: newCheckedDimensions,
2204                page: 1
2205              };
2206              if (isContentPage) {
2207                pfGetContentPageContents({ sectionNodeId, updateParams: newParams });
2208              } else {
2209                pfGetContents({ sectionNodeId, updateParams: newParams });
2210              }
2211            });
2212            optionsWrapper.appendChild(option);
2213          });
2214        }
2215      });
2216
2217      window.document.dispatchEvent(new CustomEvent('pfFiltersRendered', { detail: sectionNodeId }));
2218    });
2219  }
2220
2221  async function pfGetContentPageContents({ isLoadMore = false, sectionNodeId, initialLimit, pageAfterInitialLimit, updateParams = {}}) {
2222    const urlParams = new URLSearchParams(window.location.search);
2223    const filterParams = ["topics", "languages", "personas", "business_units", "industries", "products", "solutions", "content_types", "funnel_stages", ...customCategoryKeys];
2224    filterParams.forEach((p) => urlParams.delete(p));
2225    const templatedExperienceId = "26766";
2226    const contentSource = "experience";
2227    const segmentGroupId = "";
2228    const landingPageId = urlParams.get("pflpid");
2229    const lpSectionNodeId = urlParams.get("pfsid");
2230    const contents = Array.from(document.querySelectorAll(`.section-${sectionNodeId} .pf-content-card`));
2231    const contentUuids = contents.map((c) => c.dataset.uuid).filter((x) => x);
2232    const api_url = `${jukeboxApiHost}/api/public/v3/get_contents/?${urlParams.toString()}`;
2233    const initialParams = {
2234      sort: "",
2235      page: 1,
2236      search: "",
2237      dimensions: [],
2238      languages: [],
2239      content_types: []
2240    };
2241    const newParams = {
2242      ...(window.pfResourceCenterParams?.[sectionNodeId] || initialParams),
2243      ...updateParams
2244    };
2245    window.pfResourceCenterParams = {
2246      ...(window.pfResourceCenterParams || {}),
2247      [sectionNodeId]: newParams
2248    };
2249    const body = {
2250      ...newParams,
2251      templatedExperienceId,
2252      contentSource,
2253      landingPageId,
2254      sectionNodeId: lpSectionNodeId,
2255      clientId,
2256      baseUrl: "https://nurturenow.pathfactory.com",
2257      visitorUuid: pfGetCookie("vid"),
2258      sessionId: (pfGetCookie(/_pf_id.+/) || "").split(".")[5],
2259      segmentGroupId,
2260      isContentPage: true,
2261      loadedContentUuids: newParams.page === 1 ? [] : contentUuids
2262    };
2263    if (!isLoadMore && initialLimit) {
2264      body.limit = initialLimit;
2265    }
2266    const response = await fetch(api_url, {
2267      method: "POST",
2268      headers: { "Content-Type": "application/json" },
2269      body: JSON.stringify(body)
2270    });
2271    const result = await response.json();
2272
2273    window.pfResourceCenterParams[sectionNodeId] = {
2274      ...window.pfResourceCenterParams[sectionNodeId],
2275      totalContents: result.totalContents
2276    };
2277
2278    if (!isLoadMore && pageAfterInitialLimit) {
2279      window.pfResourceCenterParams[sectionNodeId].page = pageAfterInitialLimit;
2280    }
2281
2282    window.document.dispatchEvent(new CustomEvent('pageMetadataUpdated', { detail: sectionNodeId }));
2283
2284    // The following will handle desktop and mobile content lists
2285    const contentListWrappers = document.querySelectorAll(".pf-cards-wrapper");
2286    contentListWrappers.forEach((contentListWrapper) => {
2287      const contentCardTemplate = contentListWrapper.querySelector(".pf-content-card.template");
2288      const loadMoreButton = contentListWrapper.querySelector(".pf-load-more");
2289
2290      if (!contentCardTemplate) return;
2291
2292      if (!isLoadMore) {
2293        contentListWrapper.innerHTML = "";
2294        contentCardTemplate.style.display = "none";
2295        contentListWrapper.appendChild(contentCardTemplate);
2296
2297        const noResultsMessages = document.querySelectorAll(".pf-no-results");
2298        if ((result.contents || []).length === 0) {
2299          noResultsMessages.forEach((noResultsMessage) => {
2300            noResultsMessage.style.display = "block";
2301          });
2302        } else {
2303          noResultsMessages.forEach((noResultsMessage) => {
2304            noResultsMessage.style.display = "none";
2305          });
2306        }
2307      };
2308
2309      (result.contents || []).forEach((c) => {
2310        const contentCard = contentCardTemplate.cloneNode(true);
2311        const thumbnail = contentCard.querySelector(".pf-content-card-thumbnail");
2312        const pinnedTag = contentCard.querySelector(".pf-pinned-content-tag");
2313        const tagTemplate = contentCard.querySelector(".pf-content-tag");
2314        contentCard.dataset.uuid = c.uuid;
2315        contentCard.classList.remove("template");
2316        contentCard.querySelector(".pf-content-card-title").textContent = c.title;
2317        if (thumbnail) { 
2318          thumbnail.src = c.thumbnail;
2319          thumbnail.setAttribute("alt", c.alt_text);
2320        }
2321        contentCard.querySelector(".pf-content-card-link").href = c.url;
2322        contentCard.querySelector(".pf-content-card-link").onclick = () => {
2323          window['initializeContentEvents'] && typeof window['initializeContentEvents'] === 'function' && window['initializeContentEvents']('contentClick', {contentId: c.id});
2324        };
2325        if (c.isPinned && pinnedTag) { pinnedTag.style.display = "" }
2326        if (tagTemplate) {
2327          const enabledTags = (tagTemplate.dataset.enabledContentTags || "").split(",").filter(x => x);
2328          if (enabledTags.length > 0) {
2329            const tagsWrapper = contentCard.querySelector(".pf-content-tags-wrapper");
2330            enabledTags.forEach((tagType) => {
2331              const camelizedKey = tagType.replace(/(_\w)/g, function (match) {
2332                return match[1].toUpperCase();
2333              });
2334              [c[camelizedKey] || []].flat().forEach((tag) => {
2335                const newTag = tagTemplate.cloneNode(true);
2336                newTag.textContent = tag;
2337                newTag.style.display = "block";
2338                tagsWrapper.appendChild(newTag);
2339              });
2340            });
2341          }
2342        }
2343        contentCard.style.display = "";
2344        contentListWrapper.appendChild(contentCard);
2345      });
2346
2347      if (loadMoreButton) {
2348        contentListWrapper.appendChild(loadMoreButton); // Moves the button back to bottom
2349        const totalPages = Math.ceil(window.pfResourceCenterParams[sectionNodeId].totalContents / window.pfResourceCenterParams[sectionNodeId].limit);
2350        if (window.pfResourceCenterParams[sectionNodeId].page == totalPages) {
2351          loadMoreButton.style.display = "none";
2352        }
2353      }
2354
2355      pfUpdateCheckedFiltersCount(sectionNodeId);
2356      pfUpdateUrlsWithFilterParams(sectionNodeId);
2357    });
2358  }
2359
2360  function handleFilterChange(nodeId) {
2361    const isDeviceMobile = window.innerWidth <= 640;
2362    const isDeviceTablet = window.innerWidth <= 1024;
2363    const mobileFilters = document.querySelector(`.section-${nodeId} .mobile-filters-container`);
2364    const mobileFiltersVisible = mobileFilters && window.getComputedStyle(mobileFilters).display !== "none";
2365    const filters =
2366      mobileFiltersVisible
2367        ? mobileFilters
2368        : document.querySelector(`.section-${nodeId} .filters-container`);
2369    const search = document.querySelector(`#search-${nodeId}`)?.value?.toLowerCase() || "";
2370    const selectedTopics = filters.querySelector(".select-topics")?.value || [];
2371    const selectedLanguages = filters.querySelector(".select-languages")?.value || [];
2372    const selectedPersonas = filters.querySelector(".select-personas")?.value || [];
2373    const selectedBusinessUnits = filters.querySelector(".select-business_units")?.value || [];
2374    const selectedIndustries = filters.querySelector(".select-industries")?.value || [];
2375    const selectedProducts = filters.querySelector(".select-products")?.value || [];
2376    const selectedSolutions = filters.querySelector(".select-solutions")?.value || [];
2377    const selectedContentTypes = filters.querySelector(".select-content_types")?.value || [];
2378    const selectedFunnelStages = filters.querySelector(".select-funnel_stages")?.value || [];
2379    const filterObj = {
2380      topics: selectedTopics,
2381      languages: selectedLanguages,
2382      personas: selectedPersonas,
2383      business_units: selectedBusinessUnits,
2384      industries: selectedIndustries,
2385      products: selectedProducts,
2386      solutions: selectedSolutions,
2387      content_types: selectedContentTypes,
2388      funnel_stages: selectedFunnelStages
2389    };
2390    const carouselArrow = document.querySelector(`.carousel-arrows-${nodeId}`);
2391    const carouselSection = document.querySelector(`.carousel-${nodeId}`);
2392    const configuredTilesPerRow = carouselSection ? carouselSection?.dataset?.tilesPerRow : "";
2393    const tabletTilesPerRow = configuredTilesPerRow === "1" ? "1" : "2";
2394    const tilesPerRow = Number(isDeviceMobile ? "1" : (isDeviceTablet ? tabletTilesPerRow : configuredTilesPerRow));
2395    
2396    customCategories.forEach(filter => {
2397      const className = `.select-${filter.value}`;
2398      const selectedValue = filters.querySelector(className)?.value || []
2399      filterObj[filter.value] = selectedValue;
2400    })
2401
2402    const newQueryString = convertToQueryParams(filterObj);
2403    reconstructUrl(newQueryString);
2404    window.assets = window.assets || {};
2405    if (!window.assets[`asset-${nodeId}`]) {
2406      window.assets[`asset-${nodeId}`] = document.querySelectorAll(`.assets-${nodeId} > .asset`);
2407    }
2408    
2409    const matches = Array.from(window.assets[`asset-${nodeId}`]).filter((asset) => {
2410      const topicMatches = selectedTopics.length == 0 || selectedTopics.findIndex((topic) => asset.dataset.topics.includes(topic)) > -1;
2411      const searchMatches = asset.dataset.title.toLowerCase().includes(search) || !search;
2412      const languageMatches = selectedLanguages.length == 0 || selectedLanguages.findIndex((language) => asset.dataset.language.includes(language)) > -1;
2413      const personaMatches = selectedPersonas.length == 0 || selectedPersonas.findIndex((persona) => asset.dataset.personas.includes(persona)) > -1;
2414      const businessUnitMatches = selectedBusinessUnits.length == 0 || selectedBusinessUnits.findIndex((value) => asset.dataset.businessUnits.includes(value)) > -1;
2415      const industryMatches = selectedIndustries.length == 0 || selectedIndustries.findIndex((value) => asset.dataset.industries.includes(value)) > -1;
2416      const productMatches = selectedProducts.length == 0 || selectedProducts.findIndex((value) => asset.dataset.products.includes(value)) > -1;
2417      const solutionMatches = selectedSolutions.length == 0 || selectedSolutions.findIndex((value) => asset.dataset.solutions.includes(value)) > -1;
2418      const contentTypeMatches = selectedContentTypes.length == 0 || selectedContentTypes.findIndex((value) => asset.dataset.contentType.includes(value)) > -1;
2419      const funnelStageMatches = selectedFunnelStages.length == 0 || selectedFunnelStages.findIndex((value) => asset.dataset.funnelStages.includes(value)) > -1;
2420
2421      const customCategoriesMatches = customCategories.every(category => {
2422        const customFilter = category.value;
2423        if (filterObj[customFilter].length === 0) return true;
2424        const dataSetKey = "data-" + customFilter.replaceAll("_", "-") 
2425        return filterObj[customFilter].some(value => asset.getAttribute(dataSetKey)?.includes(value));
2426      });
2427
2428      const isPinned = asset.dataset.isPinned == "true";
2429
2430      const assetMatchesAllFilters =
2431        isPinned ||
2432          (
2433            topicMatches && searchMatches && languageMatches && personaMatches && businessUnitMatches &&
2434              industryMatches && productMatches && solutionMatches && contentTypeMatches &&
2435              funnelStageMatches && customCategoriesMatches
2436          );
2437
2438      if (assetMatchesAllFilters) {
2439        asset.style.display = "";
2440      } else {
2441        asset.style.display = "none";
2442      }
2443      
2444      return assetMatchesAllFilters;
2445    });
2446    if (matches.length === 0) {
2447      document.querySelectorAll(`.section-${nodeId} .no-results`).forEach((noResultsMessage) => {
2448        noResultsMessage.classList.remove("hidden");
2449      });
2450
2451      // This is for dynamically updating filter status message for screen reader
2452      document.querySelectorAll(`.section-${nodeId} .results-count`)?.forEach((resultCountMessage) => {
2453        resultCountMessage.textContent  =  `${matches.length} result found`;
2454      });
2455    } else {
2456      document.querySelectorAll(`.section-${nodeId} .no-results`).forEach((noResultsMessage) => {
2457        noResultsMessage.classList.add("hidden");
2458      });
2459
2460      // This is for dynamically updating filter status message for screen reader
2461      document.querySelectorAll(`.section-${nodeId} .results-count`)?.forEach((resultCountMessage) => {
2462        resultCountMessage.textContent  =  `${matches.length} results found`;
2463      });
2464    }
2465     
2466    const updatedAssets = document.createDocumentFragment();
2467    const bulletsContainer = document.querySelector(`.carousel-${nodeId} .glide__bullets`);
2468    const showCarouselArrow = matches.length > tilesPerRow;
2469
2470    if (bulletsContainer) {
2471      const updatedBulletContainer = document.createDocumentFragment();
2472      bulletsContainer.innerHTML = '';
2473      matches.forEach((asset, index) => {
2474          updatedAssets.appendChild(matches[index]);
2475           const i = index + 1;
2476          if (tilesPerRow) {
2477            const remainder = (i + tilesPerRow)  % tilesPerRow;
2478            const buttonElement = document.createElement('button');
2479            buttonElement.className = `glide__bullet ${!(remainder == 1 || tilesPerRow == 1) && 'glide__bullet--between'}`;
2480            buttonElement.setAttribute('data-glide-dir', `=${i-1}`);
2481            buttonElement.setAttribute('aria-label', `scroll to content ${i}`);
2482            updatedBulletContainer.appendChild(buttonElement);
2483          }
2484      });
2485      const carouselContainer = document.querySelector(`.carousel-${nodeId} .assets-${nodeId}`);
2486      if (carouselContainer) {
2487        carouselContainer.innerHTML = '';
2488        carouselContainer.appendChild(updatedAssets);
2489      }
2490      updatedBulletContainer && bulletsContainer.appendChild(updatedBulletContainer);
2491      if (window.pfGlides && window.pfGlides[`glide-${nodeId}`]) {
2492        const mountAndGo = window.customThrottle(() => {
2493          window.pfGlides[`glide-${nodeId}`].destroy();
2494          const carousel = document.querySelector(`.carousel-${nodeId}`);
2495          if (carousel) {
2496            window.pfGlides[`glide-${nodeId}`] = new Glide(carousel, window.carouselConfiguration ? window.carouselConfiguration[`glide-${nodeId}`] : {});
2497            window.pfGlides[`glide-${nodeId}`].mount();
2498            window.pfGlides[`glide-${nodeId}`].go('=0');
2499          }
2500        }, 1000);
2501        mountAndGo();
2502      }
2503    }
2504
2505    function showHideCarouselActions(type) {
2506      if (bulletsContainer) {
2507        bulletsContainer.style.display = type;
2508      }
2509      if (carouselArrow?.style) {
2510        carouselArrow.style.display = type;
2511      }
2512    }
2513    showHideCarouselActions(showCarouselArrow ? "" : "none");
2514  }
2515</script>
2515
2516
2517
2518
2519<script>
2520  function trapElementFocus(wrapper, event) {
2521    if (wrapper && !wrapper.classList.contains("hidden")) {
2522      function isVisible(element) {
2523        return element.offsetParent !== null;
2524      }
2525  
2526      let wrapperElements = [
2527        ...wrapper.querySelectorAll(
2528          "button, a[href], input, select, textarea, [tabindex]:not([tabindex='-1'])"
2529        ),
2530      ].filter((el) => isVisible(el) && el.tabIndex !== -1);
2531  
2532      if (wrapperElements.length > 0) {
2533        const firstElement = wrapperElements[0];
2534        const lastElement = wrapperElements[wrapperElements.length - 1];
2535  
2536        if (event.shiftKey && document.activeElement === firstElement) {
2537          lastElement.focus();
2538          event.preventDefault();
2539        } else if (!event.shiftKey && document.activeElement === lastElement) {
2540          firstElement.focus();
2541          event.preventDefault();
2542        }
2543      }
2544    }
2545  }
2546</script>
2546
2547
2548
2549<script defer>
2550  const pfShowCookieSettingsModal = () => {
2551    const cookieSettingsContainer = document.querySelector("#qa-modal-container");
2552    const cookieSettingsModal = document.querySelector("#qa-modal-background");
2553    if (cookieSettingsModal && cookieSettingsContainer) {
2554      cookieSettingsModal.style.display = "block";
2555      cookieSettingsContainer.style.display = "block";
2556      const toggle = cookieSettingsContainer.querySelector("#optIn-checkbox");
2557      toggle.checked = pfConsentStatus();
2558    }
2559  };
2560</script>
2560
2561
2562
2563<script defer>
2564  document.addEventListener("click", (event) => {
2565    document.querySelectorAll(".select-container").forEach((select) => {
2566      if (!select.contains(event.target)) {
2567        select.querySelector(".dropdown-list").classList.add("hidden");
2568      }
2569    });
2570  });
2571</script>
2571
2572
2573
2574<script>
2575  document.addEventListener("DOMContentLoaded", () => {
2576    const hash = window.location.hash;
2577    if (hash) {
2578      const observer = new MutationObserver((mutations) => {
2579        const target = document.querySelector(hash);
2580        if (!target) return;
2581        setTimeout(() => {
2582          target.scrollIntoView({ behavior: "smooth" });
2583          observer.disconnect();
2584        }, 50);             
2585      });
2586      observer.observe(document.body, { childList: true, subtree: true });
2587    }
2588  });
2589</script>
2589
2590
2591
2592
2593
2594
2595
2596<script>
2597  (function(j,o,u,r,n,e,y){j["pfObject"]=n;j[n]=j[n]||function(){
2598    (j[n].q=j[n].q||[]).push(arguments)},j[n].l=1*new Date();e=o.createElement(u),
2599    y=o.getElementsByTagName(u)[0];e.async=1;e.src=r;y.parentNode.insertBefore(e,y)
2600  })(window,document,"script","https://cdn-app.pathfactory.com/libraries/journey/current/journey.js","pf");
2601  pf("create", "LB-931336C1-146", {
2602    appId: "01d216c5-9dcf-465b-a148-f0314ffbbbe3",
2603    collectorUrl: "spcollector.pathfactory.com",
2604    consentDeclinedCookieLifetimeDays: "1/48",
2605    contentId: '855820',
2606    contentUuid: "d64d2437-7e3c-489d-a77a-791766708af1",
2607    cookieLifetimeDays: "730",
2608    experienceId: '230169',
2609    experienceUuid: "b8cbb4cf-212e-4691-8906-8b7d57966310",
2610    gdprCookieConsentEnabled: true,
2611    marketingAutomationPlatform: "marketo",
2612    landingPageContentUuid: "",
2613    jukeboxApiHost: "https://jukebox.pathfactory.com",
2614    collectionUuid: "",
2615    childTrackExperienceUuid: "",
2616    enableDemandBase: false,
2617    enableNvidiaNcidCookie: false,
2618    baseUrl: "https://nurturenow.pathfactory.com",
2619    segmentGroupId: "",
2620    enableSixSense: true,
2621    sixSenseApiKey: "68c556039adc0a083a76b0bbdfeff500c6175795",
2622    sixSenseCustomIdToken: "PathFactory-nurturenow-68c556039adc0a083a76b0bbdfeff500c6175795",
2623    sixSenseCacheDuration: "86400",
2624    requestIp: "181.215.65.78",
2625    engagementThreshold: 150,
2626    contentTitle: "PathFactory Overview: Product Tour",
2627    contentUrl: "https://pathfactory.navattic.com/yd6k0hnh?utm_campaign=homepage-navattic-tour&utm_content=product-tour&utm_medium=website&utm_source=website",
2628    experienceTypeValue: "5",
2629    snowplowSignalsEnabled: false
2630  });
2631</script>
2631
2632
2633
2634
2635<script>
2636  const elementInView = (elem) => {
2637      if (!elem) {
2638      return;
2639      }
2640      var bounding = elem.getBoundingClientRect();
2641      return (
2642      bounding.top >= 0 &&
2643      bounding.left >= 0 &&
2644      bounding.bottom <=
2645          (window.innerHeight || document.documentElement.clientHeight) &&
2646      bounding.right <=
2647          (window.innerWidth || document.documentElement.clientWidth)
2648      );
2649  };
2650  window.customThrottle = (cb, delay) => {
2651      let wait = false;
2652      let storedArgs = null;
2653  
2654      const checkStoredArgs = () => {
2655          if (storedArgs == null) {
2656              wait = false;
2657          } else {
2658              cb(...storedArgs);
2659              storedArgs = null;
2660              setTimeout(checkStoredArgs, delay);
2661          }
2662      };
2663  
2664      return (...args) => {
2665          if (wait) {
2666              storedArgs = args;
2667              return;
2668          }
2669      
2670          cb(...args);
2671          wait = true;
2672          setTimeout(checkStoredArgs, delay);
2673      };
2674  };
2675</script>
2675
2676
2677
2678<script>
2679  window.viewedEmbedForms = [];
2680  const embedFormLoaded = (retryCount, formId, formType) => {
2681    setTimeout(() => {
2682      if (window["showForm"] && typeof window["showForm"] === "function") {
2683        window.showForm({
2684          formType: formType,
2685          formData: { value: formId }
2686        });
2687      } else if (retryCount < 5) {
2688        retryCount++;
2689        embedFormLoaded(retryCount, formId, formType);
2690      }
2691    }, 500);
2692  };
2693  const initEmbedFormShow = (formId, formType, nodeId) => {
2694    const scrollElementToView = () => {
2695      if (window.viewedEmbedForms && !window.viewedEmbedForms.includes(nodeId)) {
2696        const embedFormView = elementInView && elementInView(document.querySelector(`.embed-form-section-${nodeId} .embed-form-container`));
2697        if (embedFormView) {
2698          embedFormLoaded && embedFormLoaded(0, formId, formType);
2699          window.viewedEmbedForms.push(nodeId);
2700        }
2701      }
2702    }
2703    if (window.customThrottle) {
2704      document.addEventListener("scroll", window.customThrottle(scrollElementToView, 1000));
2705    }
2706  }
2707</script>
2707
2708
2709
2710  
2710<script src="https://cdnjs.cloudflare.com/polyfill/v3/polyfill.min.js?version=4.8.0&features=Promise"></script>
2710
2711  
2711<script>
2712    if (window.Promise) {
2713      window.pfResolveJukeboxLoaded;
2714      window.pfOnJukeboxLoad = new Promise(function (resolve) {
2715        window.pfResolveJukeboxLoaded = resolve;
2716      });
2717    }
2718  </script>
2718
2719
2720
2721
2722<script>
2723  window.getPFContact = function() {
2724    var api_host = "https://nurturenow.pathfactory.com";
2725    return fetch(`${api_host}/get_contact`);
2726  };
2727</script>
2727
2728
2729
2730<script defer>
2731  function handleOverlay(retries = 0) {
2732    var nextRetryCount = retries + 1;
2733    var rawOverlayUrl =
2734      window.location.search.substring(1).split("&").filter(function(query) {
2735        return query.indexOf("overlay_url=") == 0
2736      })[0]
2737    var overlayUrl = rawOverlayUrl ? decodeURIComponent(rawOverlayUrl.replace("overlay_url=", "")) : null;
2738    var overlayContentLink = document.querySelector(`a[data-lookbook-overlay-href^="${overlayUrl}"]`);
2739    const browserHost = new URL(window.location.href).hostname;
2740    const overlayUrlHost = (() => {
2741      try {
2742        const parsedUrl = new URL(overlayUrl);
2743        const parsedProtocol = parsedUrl.protocol;
2744        if (["https:", "http:"].includes(parsedProtocol)) {
2745          return parsedUrl.hostname;
2746        } else {
2747          return null;
2748        }
2749      } catch {
2750        return null;
2751      }
2752    })();
2753    const validOverlayUrl = !!overlayUrlHost && browserHost === overlayUrlHost;
2754    if (overlayUrl && overlayContentLink) {
2755      overlayContentLink.click()
2756    } else if (overlayUrl && validOverlayUrl) {
2757      var a = document.createElement('a');
2758      a.setAttribute("data-lookbook-overlay-href", overlayUrl);
2759      a.setAttribute("data-lookbook-close-background-color", "#5555FF");
2760      a.href = overlayUrl;
2761      a.style.display = "hidden";
2762      document.body.appendChild(a);
2763      a.click();    
2764    } else if (retries <= 10) {
2765      setTimeout(function() { handleOverlay(nextRetryCount) }, 500);
2766    }
2767  };
2768
2769  document.addEventListener("DOMContentLoaded", () => {
2770    handleOverlay();
2771  });
2772</script>
2772
2773
2774<script>
2775  function pfSelectElements({selector, indexes}, callback) {
2776    let elements = Array.from(document.querySelectorAll(selector));
2777
2778    if (Array.isArray(indexes)) {
2779      elements = elements.filter((_x, i) => indexes.includes(i));
2780    }
2781
2782    elements.forEach((e, i) => callback(e, i));
2783  }
2784
2785  function pfStripTextContent(targetNode) {
2786    let totalChars = 0;
2787
2788    function removeText(node) {
2789      if (node.nodeType === Node.TEXT_NODE) {
2790        totalChars += node.textContent.length;
2791        node.textContent = '';
2792      }
2793  
2794      if (node.nodeType === Node.ELEMENT_NODE) {
2795        if (node.tagName.toLowerCase() === "li" && node.textContent.trim() !== "") {
2796          node.style.visibility = "hidden";
2797        }
2798        node.childNodes.forEach(removeText);
2799      }
2800    }
2801
2802    removeText(targetNode);
2803
2804    return totalChars;
2805  }
2806
2807  function pfGetTextNodes(targetNode) {
2808    const textNodes = [];
2809    const treeWalker = document.createTreeWalker(
2810      targetNode,
2811      NodeFilter.SHOW_TEXT,
2812    );
2813
2814    while (treeWalker.nextNode()) {
2815      textNodes.push({ text: treeWalker.currentNode.data, textNode: treeWalker.currentNode});
2816    }
2817
2818    return textNodes;
2819  }
2820  
2821  function pfApplyTypewriterAnimation({
2822    selector,
2823    indexes = undefined,
2824    duration = 3,
2825    delay = 1,
2826    loop = false,
2827    loopDelay = 0
2828  }) {
2829    pfSelectElements({ selector, indexes }, (element, i) => {
2830      element.style.visibility = "hidden";
2831      let step = 0;
2832      setTimeout(() => {
2833        const elementOriginalHeight = element.offsetHeight;
2834        element.style["min-height"] = `${elementOriginalHeight}px`;
2835        const textNodes = pfGetTextNodes(element);
2836        const totalChars = pfStripTextContent(element);
2837        const interval = Math.floor((duration * 1000) / totalChars);
2838        element.style.visibility = "";
2839        textNodes.forEach((tn) => {
2840          for (let i = 1; i <= tn.text.length; i++) {
2841            step++;
2842            setTimeout(() => {
2843              if (tn.textNode.parentNode.closest("li")) {
2844                tn.textNode.parentNode.closest("li").style.visibility = "";
2845              }
2846              tn.textNode.textContent = tn.text.substring(0, i);
2847            }, interval * step);
2848          }
2849        });
2850
2851        setTimeout(() => {
2852          element.style["min-height"] = "";
2853        }, duration * 1000);
2854
2855        if (loop && i === 0) {
2856          setTimeout(() => {
2857            pfApplyTypewriterAnimation({ selector, indexes, duration, delay, loop, loopDelay });
2858          }, (duration + loopDelay) * 1000);
2859        }
2860      }, delay * 1000);
2861    });
2862  }
2863
2864  function pfApplySlideAnimation({
2865    selector,
2866    indexes = undefined,
2867    direction = "right",
2868    duration = 2,
2869    delay = 1,
2870    loop = false,
2871    loopDelay = 0
2872  }) {
2873    pfSelectElements({ selector, indexes }, (element, i) => {
2874      const initialState = {
2875        right: { axis: "X", axisDirection: "-", unit: "vw" },
2876        left: { axis: "X", axisDirection: "", unit: "vw" },
2877        top: { axis: "Y", axisDirection: "", unit: "vh" },
2878        bottom: { axis: "Y", axisDirection: "-", unit: "vh" }
2879      }[direction] || { axis: "X", axisDirection: "-", unit: "vw" };
2880    
2881      const section = element.closest("section");
2882      section.style.overflow = "hidden";
2883      element.style.transition = "";
2884      element.style.transform = `translate${initialState.axis}(${initialState.axisDirection}100${initialState.unit})`;
2885    
2886      setTimeout(() => {
2887        element.style.transition = `transform ${duration}s ease`;
2888        element.style.transform = `translate${initialState.axis}(0)`;
2889        element.style.transform = "";
2890
2891        setTimeout(() => {
2892          section.style.overflow = "";
2893        }, duration * 1000);
2894
2895        if (loop && i === 0) {
2896          setTimeout(() => {
2897            pfApplySlideAnimation({ selector, indexes, direction, duration, delay, loop, loopDelay });
2898          }, (duration + loopDelay) * 1000);
2899        }
2900      }, delay * 1000);
2901    });
2902  }
2903
2904  function pfApplyFadeAnimation({
2905    selector,
2906    indexes = undefined,
2907    duration = 2,
2908    delay = 1,
2909    loop = false,
2910    loopDelay = 0
2911  }) {
2912    pfSelectElements({ selector, indexes }, (element, i) => {
2913      element.style.transition = "";
2914      element.style.opacity = 0;
2915      element.offsetHeight;
2916
2917      setTimeout(() => {
2918        element.style.transition = `opacity ${duration}s ease`;
2919        element.style.opacity = 1;
2920
2921        if (loop && i === 0) {
2922          setTimeout(() => {
2923            pfApplyFadeAnimation({ selector, indexes, duration, delay, loop, loopDelay });
2924          }, (duration + loopDelay) * 1000);
2925        }
2926      }, delay * 1000);
2927    });
2928  }
2929
2930  function pfApplyExpandAnimation({
2931    selector,
2932    indexes = undefined,
2933    duration = 2,
2934    delay = 1,
2935    loop = false,
2936    loopDelay = 0
2937  }) {
2938    pfSelectElements({ selector, indexes }, (element, i) => {
2939      element.style.transition = "";
2940      element.style.transform = "scale(0)";
2941      element.style.transformOrigin = "center";
2942      element.offsetHeight;
2943
2944      setTimeout(() => {
2945        element.style.transition = `transform ${duration}s ease`;
2946        element.style.transform = "scale(1)";
2947        element.style.transform = "";
2948
2949        if (loop && i === 0) {
2950          setTimeout(() => {
2951            pfApplyExpandAnimation({ selector, indexes, duration, delay, loop, loopDelay });
2952          }, (duration + loopDelay) * 1000);
2953        }
2954      }, delay * 1000);
2955    });
2956  }
2957
2958  function pfApplySqueezeAnimation({
2959    selector,
2960    indexes = undefined,
2961    duration = 2,
2962    delay = 1,
2963    loop = false,
2964    loopDelay = 0
2965  }) {
2966    pfSelectElements({ selector, indexes }, (element, i) => {
2967      element.style.animation = "";
2968      element.style.transformOrigin = "center";
2969
2970      setTimeout(() => {
2971        element.style.animation = `squeeze ${duration}s ease`;
2972
2973        if (loop && i === 0) {
2974          setTimeout(() => {
2975            pfApplySqueezeAnimation({ selector, indexes, duration, delay, loop, loopDelay });
2976          }, (duration + loopDelay) * 1000);
2977        }
2978      }, delay * 1000);
2979    });
2980  }
2981
2982  function pfAnimationFunctions(type) {
2983    return (
2984      {
2985        typewriter: pfApplyTypewriterAnimation,
2986        expand: pfApplyExpandAnimation,
2987        squeeze: pfApplySqueezeAnimation,
2988        fade: pfApplyFadeAnimation,
2989        slide: pfApplySlideAnimation
2990      }[type] || (() => {})
2991    );
2992  }
2993</script>
2993
2994
2995<style>
2996  @keyframes squeeze {
2997    0% {
2998      transform: scale(1);
2999    }
3000    50% {
3001      transform: scale(0.5);
3002    }
3003    100% {
3004      transform: scale(1);
3005    }
3006  }
3007</style>
3008
3009
3010  
3011
3012  
3013
3014  
3015
3016  
3017
3018  
3019
3020
3021
3022<style>
3023  .glide__arrow {
3024    color: rgba(25, 25, 25, 0.5);
3025    top: 40%;
3026    border: none;
3027    box-shadow: none;
3028  }
3029  .glide__arrow--left {
3030    left: -40px;
3031  }
3032  .glide__arrow--right {
3033    right: -40px;
3034  }
3035  .glide__bullets {
3036    bottom: 0;
3037  }
3038  .glide__bullet {
3039    width: 15px;
3040    height: 15px;
3041    background-color: rgba(125, 125, 125, 0.5);
3042  }
3043  .glide__bullet--active {
3044    background-color: #5555FF;
3045  }
3046  .glide__bullet:hover,
3047  .glide__bullet:focus {
3048    background-color: #5555FF;
3049  }
3050  .glide__bullet--between {
3051    display: none;
3052  }
3053  .glide__bullet--between.glide__bullet--active {
3054    display: block;
3055    position: relative;
3056    left: -23px;
3057    margin-right: -19px;
3058  }
3059</style>
3060
3061
3062
3063<style>
3064  #content-page {
3065    height: calc(100vh - 5.1rem);
3066  }
3067  .video-js { width: 100%; height: 100% }
3068</style>
3069
3070
3071<style>
3072  .pf-full-width-rte .pf-rte-wrapper {
3073    width: 100%;
3074  }
3075  .pf-rte-wrapper ul, .pf-rte-wrapper ol {
3076    list-style: revert;
3077    list-style-position: inside;
3078    margin: revert;
3079    padding: revert;
3080  }
3081  .pf-rte-wrapper menu {
3082    list-style: revert !important;
3083    margin: revert !important;
3084    padding: revert !important;
3085  }
3086  .pf-rte-wrapper ul p, .pf-rte-wrapper ol p {
3087    display: inline;
3088  }
3089</style>
3090
3091
3092<style>
3093  .pf-aem-fragment .container {
3094    max-width: none;
3095  }
3096</style>
3097
3098
3099<style>
3100  html {
3101    scroll-behavior: smooth;
3102  }
3103</style>
3104
3105
3106<style>
3107  .lookbook-overlay {
3108    z-index: 10000000;
3109  }
3110</style>
3111
3112
3113<style>
3114  body:has(div[class*='pf-modal'][style*='display: block']) {
3115    overflow: hidden;
3116  }
3117</style>
3118
3119
3120<style>
3121  .pf-ai-response ul {
3122    list-style: revert;
3123    margin: revert;
3124    padding: revert;
3125  }
3126</style>
3127
3128
3129<style>
3130  .visually-hidden {
3131      clip: rect(0 0 0 0);
3132      clip-path: inset(50%);
3133      height: 1px;
3134      overflow: hidden;
3135      position: absolute;
3136      white-space: nowrap;
3137      width: 1px;
3138  }
3139</style>
3140
3141
3142<style>
3143  header:has(.pf-modal[style*="display: block"]) ~ header {
3144    position: relative;
3145    z-index: 0;
3146  }
3147  header:hover ~ header {
3148    position: relative;
3149    z-index: 0;
3150  }
3151</style>
3152
3153
3154<link rel="preconnect" href="https://fonts.googleapis.com">
3155<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
3156<link rel="preload" as="style" href="https://fonts.googleapis.com/css2?family=Raleway:wght@300;400;500;600;700&family=Roboto:wght@300;400;500;700&family=Lato:wght@300;400;700&display=swap" onload="this.onload=null;this.rel='stylesheet'">
3157<noscript><link href="https://fonts.googleapis.com/css2?family=Raleway:wght@300;400;500;600;700&family=Roboto:wght@300;400;500;700&family=Lato:wght@300;400;700&display=swap" rel="stylesheet"></noscript>
3158
3159<style>
3160	@font-face {
3161    font-family: BrownProRegular;
3162    src: url('https://app.cdn.lookbookhq.com/lbhq-production/2/fonts/09488fc4-25de-4f23-9e48-9659bc49e0a4.otf') format('opentype');
3163  }
3164	@font-face {
3165    font-family: BrownProBold;
3166    src: url('https://app.cdn.lookbookhq.com/lbhq-production/2/fonts/b7425fd2-659a-420b-938e-a76c031702a4.otf') format('opentype');
3167  }
3168	@font-face {
3169    font-family: GE;
3170    src: url('https://cdn.pathfactory.com/assets/146/fonts/b1ab02a3-ec4b-42b4-bd89-5494cff79117.ttf') format('truetype');
3171  }
3172	@font-face {
3173    font-family: BrownProLight;
3174    src: url('https://cdn.pathfactory.com/assets/2/fonts/714996b2-be29-462a-ab07-bb29f3e466f4.otf') format('opentype');
3175  }
3176	@font-face {
3177    font-family: BrownProItalic;
3178    src: url('https://cdn.pathfactory.com/assets/2/fonts/e435c662-e1ca-4b92-8fd1-1c17f004c892.otf') format('opentype');
3179  }
3180	@font-face {
3181    font-family: BrownProLightItalic;
3182    src: url('https://cdn.pathfactory.com/assets/2/fonts/e9414c1d-5704-49e8-8839-5a1e5c9c60b6.otf') format('opentype');
3183  }
3184	@font-face {
3185    font-family: BrownProBoldItalic;
3186    src: url('https://cdn.pathfactory.com/assets/2/fonts/a59a87a9-7f47-4521-8159-b9dc7af82fb9.otf') format('opentype');
3187  }
3188	@font-face {
3189    font-family: BrownProBoldAlt;
3190    src: url('https://cdn.pathfactory.com/assets/2/fonts/fdd2ac55-9847-41ea-9cc8-7407bc060d3a.otf') format('opentype');
3191  }
3192	@font-face {
3193    font-family: MonaSansRegular;
3194    src: url('https://cdn.pathfactory.com/assets/2/fonts/0c2fee49-1465-4d85-a598-a06be27b3651.ttf') format('truetype');
3195  }
3196	@font-face {
3197    font-family: MonaSansBold;
3198    src: url('https://cdn.pathfactory.com/assets/2/fonts/eb1dbfb0-4a6f-4b20-944a-77b5c01dcff7.ttf') format('truetype');
3199  }
3200	@font-face {
3201    font-family: MonaSansLight;
3202    src: url('https://cdn.pathfactory.com/assets/2/fonts/2a6bfdb5-6582-4b87-8f87-0811554c5ef8.ttf') format('truetype');
3203  }
3204	@font-face {
3205    font-family: MonaSansSemiBold;
3206    src: url('https://cdn.pathfactory.com/assets/2/fonts/ca40901b-fccf-492b-9fae-6acedc936f13.ttf') format('truetype');
3207  }
3208	@font-face {
3209    font-family: MonaSansMedium;
3210    src: url('https://cdn.pathfactory.com/assets/2/fonts/94dd92fc-d5b0-4e47-b039-eea38c8208e7.ttf') format('truetype');
3211  }
3212	@font-face {
3213    font-family: OpenSansSemiBold;
3214    src: url('https://cdn.pathfactory.com/assets/2/fonts/1df957b6-9e30-4233-8ce9-8a49bcb58cb7.ttf') format('truetype');
3215  }
3216	@font-face {
3217    font-family: OpenSansBold;
3218    src: url('https://cdn.pathfactory.com/assets/2/fonts/b710636c-06de-4d91-ba49-33ee3d38d813.ttf') format('truetype');
3219  }
3220	@font-face {
3221    font-family: PlusJakartaSansBold;
3222    src: url('https://cdn.pathfactory.com/assets/2/fonts/f1b350a7-b187-4925-a9c2-3afdedb8dec0.ttf') format('truetype');
3223  }
3224	@font-face {
3225    font-family: PlusJakartaSansBoldItalic;
3226    src: url('https://cdn.pathfactory.com/assets/2/fonts/2bf26a58-11ad-4695-804b-b3bec7f0691f.ttf') format('truetype');
3227  }
3228	@font-face {
3229    font-family: PlusJakartaSansLight;
3230    src: url('https://cdn.pathfactory.com/assets/2/fonts/43a91c81-8427-4005-9c4a-bb90a126a308.ttf') format('truetype');
3231  }
3232	@font-face {
3233    font-family: PlusJakartaSansMedium;
3234    src: url('https://cdn.pathfactory.com/assets/2/fonts/47b37680-773b-4990-aabb-c8c99039412e.ttf') format('truetype');
3235  }
3236	@font-face {
3237    font-family: PlusJakartaSansExtraBold;
3238    src: url('https://cdn.pathfactory.com/assets/2/fonts/0d742b44-a343-4dd1-aa4c-711a5edec86f.ttf') format('truetype');
3239  }
3240	@font-face {
3241    font-family: PlusJakartaSansExtraBoldItalic;
3242    src: url('https://cdn.pathfactory.com/assets/2/fonts/c31db46b-6615-4420-9c85-b8efccf9069a.ttf') format('truetype');
3243  }
3244	@font-face {
3245    font-family: PlusJakartaSansExtraLight;
3246    src: url('https://cdn.pathfactory.com/assets/2/fonts/a0850b9c-234b-4111-a39f-7a9943a5cd9c.ttf') format('truetype');
3247  }
3248	@font-face {
3249    font-family: PlusJakartaSansExtraLightItalic;
3250    src: url('https://cdn.pathfactory.com/assets/2/fonts/8caecf64-f557-4211-bb4e-f6c0080a5f47.ttf') format('truetype');
3251  }
3252	@font-face {
3253    font-family: PlusJakartaSansItalic;
3254    src: url('https://cdn.pathfactory.com/assets/2/fonts/5047bf1f-ab9d-4702-a1da-574fd6fcbd11.ttf') format('truetype');
3255  }
3256	@font-face {
3257    font-family: PlusJakartaSansLightItalic;
3258    src: url('https://cdn.pathfactory.com/assets/2/fonts/4df0b5ca-3726-4dc9-9fe3-2e41c0a6e1d9.ttf') format('truetype');
3259  }
3260	@font-face {
3261    font-family: PlusJakartaSansMediumItalic;
3262    src: url('https://cdn.pathfactory.com/assets/2/fonts/ef084e6d-f495-4e58-b620-8798194e2814.ttf') format('truetype');
3263  }
3264	@font-face {
3265    font-family: PlusJakartaSansRegular;
3266    src: url('https://cdn.pathfactory.com/assets/2/fonts/fb417894-10c8-4c02-8c45-62b3ebf75ee5.ttf') format('truetype');
3267  }
3268	@font-face {
3269    font-family: PlusJakartaSansSemiBold;
3270    src: url('https://cdn.pathfactory.com/assets/2/fonts/d268ad46-7153
3270-4b41-a21e-352dccadfd2d.ttf') format('truetype');
3271  }
3272	@font-face {
3273    font-family: PlusJakartaSansSemiBoldItalic;
3274    src: url('https://cdn.pathfactory.com/assets/2/fonts/35c76fa5-afd9-4972-bee4-c4831b4c7044.ttf') format('truetype');
3275  }
3276	@font-face {
3277    font-family: OutfitBold;
3278    src: url('https://cdn.pathfactory.com/assets/2/fonts/f5c9eb13-2b83-4b16-9160-3bbe48862056.ttf') format('truetype');
3279  }
3280	@font-face {
3281    font-family: OutfitBlack;
3282    src: url('https://cdn.pathfactory.com/assets/2/fonts/052d12f4-6bd0-4bee-bea5-086dec770806.ttf') format('truetype');
3283  }
3284	@font-face {
3285    font-family: OutfitExtraBold;
3286    src: url('https://cdn.pathfactory.com/assets/2/fonts/db0f4396-f418-4ec6-8437-daf3e7bb3d69.ttf') format('truetype');
3287  }
3288	@font-face {
3289    font-family: OutfitExtraLight;
3290    src: url('https://cdn.pathfactory.com/assets/2/fonts/d02e278f-b30a-44e3-967a-4246a000d2f7.ttf') format('truetype');
3291  }
3292	@font-face {
3293    font-family: OutfitLight;
3294    src: url('https://cdn.pathfactory.com/assets/2/fonts/f4c917ef-4c8f-43f8-82fd-d4714d037127.ttf') format('truetype');
3295  }
3296	@font-face {
3297    font-family: OutfitMedium;
3298    src: url('https://cdn.pathfactory.com/assets/2/fonts/aeb12346-8c48-41fa-af71-eee268d37521.ttf') format('truetype');
3299  }
3300	@font-face {
3301    font-family: OutfitRegular;
3302    src: url('https://cdn.pathfactory.com/assets/2/fonts/bc6022b3-0e10-4e8d-b5dd-ebb14ae733d4.ttf') format('truetype');
3303  }
3304	@font-face {
3305    font-family: OutfitSemiBold;
3306    src: url('https://cdn.pathfactory.com/assets/2/fonts/2951dde0-b4ba-43ed-a848-61a31cf6773e.ttf') format('truetype');
3307  }
3308	@font-face {
3309    font-family: OutfitThin;
3310    src: url('https://cdn.pathfactory.com/assets/2/fonts/c1c5b109-1b4e-4e2b-a4e2-fd7ca5200fc1.ttf') format('truetype');
3311  }
3312	@font-face {
3313    font-family: SalesforceRegular;
3314    src: url('https://cdn.pathfactory.com/assets/2/fonts/c2162e08-f46b-43d7-bfb3-e35810d80942.ttf') format('truetype');
3315  }</style>
3316<style>.pf_font_preset_0 { font-size: 36pt; font-weight: bold; font-family: inherit; line-height: ; } .pf_font_preset_1 { font-size: 24pt; font-weight: bold; font-family: inherit; line-height: ; } .pf_font_preset_2 { font-size: 24pt; font-weight: normal; font-family: inherit; line-height: ; } .pf_font_preset_3 { font-size: 20pt; font-weight: bold; font-family: inherit; line-height: ; } .pf_font_preset_4 { font-size: 20pt; font-weight: normal; font-family: inherit; line-height: ; } .pf_font_preset_5 { font-size: 18pt; font-weight: normal; font-family: inherit; line-height: ; } .pf_font_preset_6 { font-size: 14pt; font-weight: normal; font-family: inherit; line-height: ; } .pf_font_preset_7 { font-size: 12pt; font-weight: normal; font-family: inherit; line-height: ; } p[style*="line-height"] .pf_font_preset_0, h1[style*="line-height"] .pf_font_preset_0, h2[style*="line-height"] .pf_font_preset_0, h3[style*="line-height"] .pf_font_preset_0, h4[style*="line-height"] .pf_font_preset_0, blockquote[style*="line-height"] .pf_font_preset_0, li[style*="line-height"] .pf_font_preset_0, p[style*="line-height"] .pf_font_preset_1, h1[style*="line-height"] .pf_font_preset_1, h2[style*="line-height"] .pf_font_preset_1, h3[style*="line-height"] .pf_font_preset_1, h4[style*="line-height"] .pf_font_preset_1, blockquote[style*="line-height"] .pf_font_preset_1, li[style*="line-height"] .pf_font_preset_1, p[style*="line-height"] .pf_font_preset_2, h1[style*="line-height"] .pf_font_preset_2, h2[style*="line-height"] .pf_font_preset_2, h3[style*="line-height"] .pf_font_preset_2, h4[style*="line-height"] .pf_font_preset_2, blockquote[style*="line-height"] .pf_font_preset_2, li[style*="line-height"] .pf_font_preset_2, p[style*="line-height"] .pf_font_preset_3, h1[style*="line-height"] .pf_font_preset_3, h2[style*="line-height"] .pf_font_preset_3, h3[style*="line-height"] .pf_font_preset_3, h4[style*="line-height"] .pf_font_preset_3, blockquote[style*="line-height"] .pf_font_preset_3, li[style*="line-height"] .pf_font_preset_3, p[style*="line-height"] .pf_font_preset_4, h1[style*="line-height"] .pf_font_preset_4, h2[style*="line-height"] .pf_font_preset_4, h3[style*="line-height"] .pf_font_preset_4, h4[style*="line-height"] .pf_font_preset_4, blockquote[style*="line-height"] .pf_font_preset_4, li[style*="line-height"] .pf_font_preset_4, p[style*="line-height"] .pf_font_preset_5, h1[style*="line-height"] .pf_font_preset_5, h2[style*="line-height"] .pf_font_preset_5, h3[style*="line-height"] .pf_font_preset_5, h4[style*="line-height"] .pf_font_preset_5, blockquote[style*="line-height"] .pf_font_preset_5, li[style*="line-height"] .pf_font_preset_5, p[style*="line-height"] .pf_font_preset_6, h1[style*="line-height"] .pf_font_preset_6, h2[style*="line-height"] .pf_font_preset_6, h3[style*="line-height"] .pf_font_preset_6, h4[style*="line-height"] .pf_font_preset_6, blockquote[style*="line-height"] .pf_font_preset_6, li[style*="line-height"] .pf_font_preset_6, p[style*="line-height"] .pf_font_preset_7, h1[style*="line-height"] .pf_font_preset_7, h2[style*="line-height"] .pf_font_preset_7, h3[style*="line-height"] .pf_font_preset_7, h4[style*="line-height"] .pf_font_preset_7, blockquote[style*="line-height"] .pf_font_preset_7, li[style*="line-height"] .pf_font_preset_7 { line-height: inherit !important; } @media (max-width: 640px) { .pf_font_preset_0 { font-size: ; line-height: ; } .pf_font_preset_1 { font-size: ; line-height: ; } .pf_font_preset_2 { font-size: ; line-height: ; } .pf_font_preset_3 { font-size: ; line-height: ; } .pf_font_preset_4 { font-size: ; line-height: ; } .pf_font_preset_5 { font-size: ; line-height: ; } .pf_font_preset_6 { font-size: ; line-height: ; } .pf_font_preset_7 { font-size: ; line-height: ; } }</style>
3317
3318    <link rel="preconnect" href="https://fonts.googleapis.com">
3319<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
3320<link href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:ital,wght@0,200..800;1,200..800&display=swap" rel="stylesheet">
3321<style>
3322  body {
3323    font-family: "Plus Jakarta Sans", sans-serif;
3324  }
3325</style>
3326<script src="https://unpkg.com/embla-carousel/embla-carousel.umd.js"></script>
3326
3327    <!-- RTP tag --> 
3328<script type='text/javascript'>
3329(function(c,h,a,f,i,e){c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};
3330 c[a].a=i;c[a].e=e;var g=h.createElement("script");g.async=true;g.type="text/javascript";
3331 g.src=f+'?aid='+i;var b=h.getElementsByTagName("script")[0];b.parentNode.insertBefore(g,b);
3332 })(window,document,"rtp","//sjrtp7-cdn.marketo.com/rtp-api/v1/rtp.js","lookbookhq");
3333 
3334rtp('send','view');
3335rtp('get', 'campaign',true);
3336Object.defineProperty(rtp, 'd', {value:false}); //
3337</script>
3337
3338<!-- End of RTP tag --><style>
3339iframe#drift-widget {
3340    bottom: 210px !important;
3341    z-index: 1 !important;
3342}
3343
3344iframe#drift-widget.drift-widget-sidebar-half-height {
3345    max-height: 70vh !important;
3346}
3347
3348@media only screen and (max-device-width: 800px) {
3349    iframe#drift-widget.drift-widget-sidebar-half-height {
3350        bottom: 0px !important;
3351        z-index: 220000 !important;
3352        max-height: 100vh !important;
3353    }
3354}
3355
3356@media only screen and (min-device-width: 801px) {
3357    div#drift-widget-container {
3358        z-index: 1 !important;
3359    }
3360}
3361</style><style>
3362#qa-cta-button {
3363    text-transform: uppercase;
3364    padding: 14px 40px !important;
3365    line-height: 1.2 !important;
3366}
3367
3368@media (max-width: 500px) and (min-width: 100px) {
3369    div#qa-header-title {
3370        display: none;
3371    }
3372    
3373#qa-cta-button {
3374        padding: 0px;
3375        margin: auto;
3376    }
3377    
3378#qa-cta-button {
3379        padding: 10px 25px !important;
3380        font-size: 13px !important;
3381    }
3382}
3383</style><!-- PLACE THE CODE IN THE HEAD TAG -->
3384<script src="https://cdnjs.cloudflare.com/ajax/libs/arrive/2.4.1/arrive.min.js" integrity="sha256-WXHeZwrvHW+Qpj5u2NCVyiL5XEVf/AzrYL5i4w4aRHM=" crossorigin="anonymous"></script>
vendor: 1 bytes, line 3384
3384
3385<script>
3386  var iOS = /(iPad|iPhone|iPod)/g.test(navigator.userAgent);
3387  var refreshed=0;
3388  if (iOS && window.innerWidth <= 480&&refreshed==0) {
3389      
3390    document.arrive(".content", function() {
3391    var ifr=document.querySelector('.content');
3392      ifr.scrolling="auto";
3393    ifr.src=ifr.src;  
3394    refreshed=1;
3395  });
3396}
3397</script>
3397<!-- Google Tag Manager -->
3398<script>
vendor: 327 bytes, lines 3398-3402
3398(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
3399new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
3400j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
3401'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
3402})(window,document,'script','dataLayer','
3402GTM-NR9MTBPP
vendor: 3 bytes, line 3402
3402');
3402</script>
3402
3403<!-- End Google Tag Manager -->
3404  </head>
3405  <body un-cloak class="mb-[50px] md:mb-[0px]">
3406    <!-- Google Tag Manager (noscript) -->
vendor: 68 bytes, lines 3406-3407
3406
3407<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
3407GTM-NR9MTBPP
vendor: 83 bytes, lines 3407-3408
3407"
3408height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
3409<!-- End Google Tag Manager (noscript) -->
3410    
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430<script>
3431  function toggleMenu() {
3432    const menuButton = document.getElementById('menuButton');
3433    const expanded = menuButton.getAttribute('aria-expanded') === 'true';
3434    
3435    // Toggle aria-expanded
3436    menuButton.setAttribute('aria-expanded', !expanded);
3437  }
3438
3439  function showDropdown(linkElement) {
3440    if (!window.matchMedia('(max-width: 993px)').matches) {
3441      const dropdown = linkElement.nextElementSibling;
3442      if (dropdown) {
3443        dropdown.style.display = 'block';
3444      }
3445    };
3446  }
3447
3448  document.addEventListener("DOMContentLoaded", () => {
3449    pfOzmenuCycleFocus("section-");
3450  });
3451
3452  pfOzmenuEscClose("section-");
3453</script>
3453
3454
3455<style>
3456  @media (max-width: 993px) {
3457    .dropdownitem:focus-within .dropdown {
3458      position: relative;
3459    }
3460  }
3461  .ozmenu ul li.dropdownitem > span:after {
3462    width: 15px;
3463    height: 15px;
3464    text-align: center;
3465    float: right;
3466    background-color: currentColor;
3467    content: "";
3468    margin: 1px 0px 0px 10px;
3469    -webkit-mask-image: url('data:image/svg+xml;charset=utf-8,<svg width="12px" height="12px" xmlns="http://www.w3.org/2000/svg" fill="currentColor" class="bi bi-chevron-down" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z"></path></svg>');
3470    mask-image: url('data:image/svg+xml;charset=utf-8,<svg width="12px" height="12px" xmlns="http://www.w3.org/2000/svg" fill="currentColor" class="bi bi-chevron-down" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z"></path></svg>');
3471    -webkit-mask-repeat: no-repeat;
3472    mask-repeat: no-repeat;
3473    -webkit-mask-position: center;
3474    mask-position: center;
3475  }
3476  .ozmenu ul li.dropdownitem > a:after {
3477    margin: 1px 0px 0px 10px;
3478  }
3479</style>
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493  <header>
3494
3495<section
3496  
3497  id=""
3498  style=""
3499  class="section-display relative section- pf-header pf-header-background-color z-[10000] !py-0 
3500    
3501      section-padding
3502       
3503    
3504    
3505      bg-[#EFEFF7]
3506    "
3507  x-data="{ open: false }"
3508>
3509  <div id=""></div>
3510  <div class=" w-full relative">
3511    
3512  <div class="relative iframe-hide">
3513    <nav class="flex justify-between h-20" aria-label="Header Navigation">
3514      <div class="flex items-center justify-between w-full">
3515        <div class="flex flex-wrap">
3516          
3517            <a aria-label= "Company logo link" class="flex items-center max-w-max" href=" https://www.pathfactory.com/?lb-height=100%25&lb-width=100%25&utm_campaign=homepage-navattic-tour&utm_content=product-tour&utm_medium=website&utm_source=website " tabindex="0">
3518              
3519                <img
3520                  id="pf-header-company-logo"
3521                  alt="PathFactory"
3522                  class="h-10 mr-3 object-cover"
3523                  src="https://cdn.pathfactory.com/assets/146/logos/768376/f3ccb325-b9b9-40f4-9ce2-7a13b98e753b.svg"
3524                >
3525              
3526              <span id="pf-header-company-name" class="self-center text-lg  hidden md:block  font-semibold whitespace-nowrap ">
3527                
3528              </span>
3529            </a>
3530            
3531          
3532
3533        </div>
3534        <div class="block grow mx-4">
3535          <div class="menu-open">
3536            
3537              <button class="self-center navbar-burger lg:hidden" aria-label="open menu" aria-expanded="false" id="menuButton" onclick="toggleMenu()" onkeydown="if(event.key === 'Enter') { toggleMenu(); }">
3538                <svg fill="none" height="35" viewbox="0 0 32 32" width="35" xmlns="http://www.w3.org/2000/svg">
3539                  <rect class="text-gray-50" fill="currentColor" height="32" rx="6" width="32"></rect>
3540                  <path class="text-gray-500" d="M7 12H25C25.2652 12 25.5196 11.8946 25.7071 11.7071C25.8946 11.5196 26 11.2652 26 11C26 10.7348 25.8946 10.4804 25.7071 10.2929C25.5196 10.1054 25.2652 10 25 10H7C6.73478 10 6.48043 10.1054 6.29289 10.2929C6.10536 10.4804 6 10.7348 6 11C6 11.2652 6.10536 11.5196 6.29289 11.7071C6.48043 11.8946 6.73478 12 7 12ZM25 15H7C6.73478 15 6.48043 15.1054 6.29289 15.2929C6.10536 15.4804 6 15.7348 6 16C6 16.2652 6.10536 16.5196 6.29289 16.7071C6.48043 16.8946 6.73478 17 7 17H25C25.2652 17 25.5196 16.8946 25.7071 16.7071C25.8946 16.5196 26 16.2652 26 16C26 15.7348 25.8946 15.4804 25.7071 15.2929C25.5196 15.1054 25.2652 15 25 15ZM25 20H7C6.73478 20 6.48043 20.1054 6.29289 20.2929C6.10536 20.4804 6 20.7348 6 21C6 21.2652 6.10536 21.5196 6.29289 21.7071C6.48043 21.8946 6.73478 22 7 22H25C25.2652 22 25.5196 21.8946 25.7071 21.7071C25.8946 21.5196 26 21.2652 26 21C26 20.7348 25.8946 20.4804 25.7071 20.2929C25.5196 20.1054 25.2652 20 25 20Z" fill="currentColor"></path>
3541                </svg>
3542              </button>
3543            
3544          </div>
3545          <div class="ozmenu">
3546            <div class="flex flex-col">
3547              <div class="menu-close">
3548                <button class="absolute p-4 navbar-close top-5 right-3" aria-label="Close" onclick="toggleMenu()">
3549                  <svg fill="none" height="12" viewbox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg">
3550                    <path
3551                      d="M6.94004 6L11.14 1.80667C11.2656 1.68113 11.3361 1.51087 11.3361 1.33333C11.3361 1.1558 11.2656 0.985537 11.14 0.860002C11.0145 0.734466 10.8442 0.66394 10.6667 0.66394C10.4892 0.66394 10.3189 0.734466 10.1934 0.860002L6.00004 5.06L1.80671 0.860002C1.68117 0.734466 1.51091 0.663941 1.33337 0.663941C1.15584 0.663941 0.985576 0.734466 0.860041 0.860002C0.734505 0.985537 0.66398 1.1558 0.66398 1.33333C0.66398 1.51087 0.734505 1.68113 0.860041 1.80667L5.06004 6L0.860041 10.1933C0.797555 10.2553 0.747959 10.329 0.714113 10.4103C0.680267 10.4915 0.662842 10.5787 0.662842 10.6667C0.662842 10.7547 0.680267 10.8418 0.714113 10.9231C0.747959 11.0043 0.797555 11.078 0.860041 11.14C0.922016 11.2025 0.99575 11.2521 1.07699 11.2859C1.15823 11.3198 1.24537 11.3372 1.33337 11.3372C1.42138 11.3372 1.50852 11.3198 1.58976 11.2859C1.671 11.2521 1.74473 11.2025 1.80671 11.14L6.00004 6.94L10.1934 11.14C10.2554 11.2025 10.3291 11.2521 10.4103 11.2859C10.4916 11.3198 10.5787 11.3372 10.6667 11.3372C10.7547 11.3372 10.8419 11.3198 10.9231 11.2859C11.0043 11.2521 11.0781 11.2025 11.14 11.14C11.2025 11.078 11.2521 11.0043 11.286 10.9231C11.3198 10.8418 11.3372 10.7547 11.3372 10.6667C11.3372 10.5787 11.3198 10.4915 11.286 10.4103C11.2521 10.329 11.2025 10.2553 11.14 10.1933L6.94004 6Z"
3552                      fill="#556987">
3553                    </path>
3554                  </svg>
3555                </button>
3556              </div>
3557              <ul class="flex justify-center pf_font_preset_6 gap-8 ozmenu-nav">
3558                
3559              </ul>
3560              
3561              <div class="flex w-50 lg:hidden mx-auto flex-col gap-5">
3562                
3563                  <div class="pf-mobile-primary-cta-in-header">
3564                    
3565
3566
3567
3568
3569  <a
3570  class="
3571    btn leading-none btn-md pf-cta pf_font_preset_6
3572    
3573      bg-[#5555FF] border-[#5555FF]
3574      text-[#ffffff]
3575    
3576     hover:bg-primary-600 
3577    
3578    focus:ring-[#5555FF] !rounded-[8px] 
3579  "
3580  href="https://www.pathfactory.com/demo/?utm_campaign=homepage-navattic-tour&utm_content=product-tour&utm_medium=website&utm_source=website&lb-height=100%25&lb-width=100%25&utm_campaign=homepage-navattic-tour&utm_content=product-tour&utm_medium=website&utm_source=website"
3581  
3582    target="_blank"
3583  
3584  data-pf-theme-artefact-id="cta-link"
3585  data-pf-theme-block-id="cta-630364840"
3586  data-pf-theme-block-type="component"
3587  data-pf-theme-block-ref="cta"
3588  data-pf-theme-block-label="Request a Demo"
3589  tabindex="0" 
3590  role="button"
3591  aria-label="Request a Demo"
3592  
3593>
3594  Request a Demo
3595</a>
3596
3597
3598
3599
3600                  </div>
3601                
3602                
3603              </div>
3604              
3605            </div>
3606          </div>
3607        </div>
3608        <div class="hidden lg:block">
3609          <div class="flex items-center justify-end">
3610            
3611              <div class="pf-primary-cta-in-header">
3612                
3613
3614
3615
3616
3617  <a
3618  class="
3619    btn leading-none btn-md pf-cta pf_font_preset_6
3620    
3621      bg-[#5555FF] border-[#5555FF]
3622      text-[#ffffff]
3623    
3624     hover:bg-primary-600 
3625    
3626    focus:ring-[#5555FF] !rounded-[8px] 
3627  "
3628  href="https://www.pathfactory.com/demo/?utm_campaign=homepage-navattic-tour&utm_content=product-tour&utm_medium=website&utm_source=website&lb-height=100%25&lb-width=100%25&utm_campaign=homepage-navattic-tour&utm_content=product-tour&utm_medium=website&utm_source=website"
3629  
3630    target="_blank"
3631  
3632  data-pf-theme-artefact-id="cta-link"
3633  data-pf-theme-block-id="cta-630653006"
3634  data-pf-theme-block-type="component"
3635  data-pf-theme-block-ref="cta"
3636  data-pf-theme-block-label="Request a Demo"
3637  tabindex="0" 
3638  role="button"
3639  aria-label="Request a Demo"
3640  
3641>
3642  Request a Demo
3643</a>
3644
3645
3646
3647
3648              </div>
3649            
3650            
3651          </div>
3652        </div>
3653      </div>
3654    </nav>
3655  </div>
3656
3657  </div>
3658</section>
3659
3660  </header>
3661
3662
3663
3664
3665
3666
3667<script>
3668  (() => {
3669    const animations = [];
3670    const onLoadAnimations = animations.filter((a) => a.trigger === "load");
3671    const onScrollAnimations = animations.filter((a) => a.trigger === "scroll");
3672
3673    onLoadAnimations.forEach((a) => pfAnimationFunctions(a.type)(a));
3674
3675    const observer = new IntersectionObserver((entries) => {
3676      entries.forEach((entry) => {
3677        if (entry.isIntersecting) {
3678          onScrollAnimations.forEach((a) => pfAnimationFunctions(a.type)(a));
3679          observer.disconnect();
3680        }
3681      });
3682    }, { threshold: 0.5 });
3683
3684    const section = document.querySelector(".section-");
3685    observer.observe(section);
3686  })();
3687</script>
3687
3688
3689
3690
3691<div
3692  id="content-page"
3693  class="section-content-page relative flex "
3694  style=""
3695  data-sidebar-side="left"
3696  data-sidebar-default="expanded"
3697>
3698  
3699    
3700    <button
3701      id="pf-sidebar-toggle"
3702      class="flex items-center justify-center w-8 h-8 rounded-full bg-[#5555FF]"
3703      type="button"
3704      aria-controls="sidebar"
3705      aria-expanded="expanded"
3706      aria-label="Collapse sidebar"
3707    >
3708      <svg
3709        id="pf-sidebar-toggle-icon"
3710        width="16"
3711        height="16"
3712        viewBox="0 0 24 24"
3713        fill="currentColor"
3714        aria-hidden="true"
3715        class="text-[#ffffff]"
3716      >
3717        
3718          <path d="M15.41 7.41 14 6l-6 6 6 6 1.41-1.41L10.83 12z"/>
3719        
3720      </svg>
3721    </button>
3722
3723    <aside
3724      id="sidebar"
3725      class="
3726        hidden md:flex flex-col h-full overflow-visible
3727        border-r border-gray-200
3728        
3729          bg-[#FFFFFF]
3730        
3731      "
3732      aria-label="Sidebar"
3733      
3734    >
3735      
3736
3737      
3738
3739      
3740      <div class="pf-resource-center-filters filters-container flex justify-start flex-wrap flex-col border-b-1 border-white">
3741        
3742      </div>
3743      <div
3744        role="status"
3745        aria-live="polite"
3746        class="no-results pf-no-results visually-hidden text-center w-full px-[20px] py-[40px]"
3747      >
3748        10 results found
3749      </div>
3750      <div class="overflow-y-auto">
3751        <ul
3752          role="list"
3753          aria-live="polite"
3754          class="assets-content-page pf-cards-wrapper divide-y divide-gray-200"
3755        >
3756          
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775<li
3776  class="asset pf-content-card pf-sidebar-card hover:bg-[rgba(50,50,50,0.25)] template flex h-24 px-4 py-5 "
3777  style="display: none;"
3778  data-is-pinned=""
3779  data-topics=""
3780  data-title=""
3781  data-language=""
3782  data-personas=""
3783  data-business-units=""
3784  data-industries=""
3785  data-products=""
3786  data-solutions=""
3787  data-content-type=""
3788  data-funnel-stages=""
3789  data-uuid=""
3790  
3791    
3792  
3793    
3794  
3795    
3796  
3797    
3798  
3799    
3800  
3801    
3802  
3803    
3804      
3805      data-use-cases=""
3806    
3807  
3808    
3809      
3810      data-use-in-recommendations=""
3811    
3812  
3813    
3814      
3815      data-from-the-nook=""
3816    
3817  
3818>
3819  <a onclick="
3820  window['initializeContentEvents'] && typeof window['initializeContentEvents'] === 'function' &&
3821window.initializeContentEvents('contentClick', {contentId: })
3822" class="pf-content-card-link flex items-center justify-between space-x-3" href="">
3823    
3824      <div class="relative w-[64px] h-fit rounded-[9px] border border-gray-200 overflow-hidden">
3825        <img
3826          src=""
3827          alt="Sample content thumbnail"
3828          class="pf-content-card-thumbnail object-cover w-full aspect-[16/9]"
3829          loading="lazy"
3830        >
3831        <span
3832          class="pf-pinned-content-tag absolute bottom-0 w-full text-center text-[9px] bg-[#5555FF] text-[#ffffff]"
3833          
3834            style="display: none;"
3835          
3836        >
3837          Featured
3838        </span>
3839      </div>
3840    
3841    <div class="flex-1 min-w-0">
3842      <p class="pf-content-card-title pf_font_preset_7 text-[#000000] line-clamp-3">
3843        
3844      </p>
3845      
3846    </div>
3847  </a>
3848</li>
3849          
3850            
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869<li
3870  class="asset pf-content-card pf-sidebar-card hover:bg-[rgba(50,50,50,0.25)]  flex h-24 px-4 py-5 "
3871  style=""
3872  data-is-pinned="false"
3873  data-topics="Product"
3874  data-title="PathFactory Overview: Product Tour"
3875  data-language="English"
3876  data-personas="CMO/VPABM LeadContent LeadDemand Gen LeadMarketing Ops Lead"
3877  data-business-units="MarketingProduct"
3878  data-industries="B2B"
3879  data-products=""
3880  data-solutions=""
3881  data-content-type="Product Tour"
3882  data-funnel-stages="Top of Funnel"
3883  data-uuid="d64d2437-7e3c-489d-a77a-791766708af1"
3884  
3885    
3886  
3887    
3888  
3889    
3890  
3891    
3892  
3893    
3894  
3895    
3896  
3897    
3898      
3899      data-use-cases="ABMDemand GenContent StrategyBuyer Enablement"
3900    
3901  
3902    
3903      
3904      data-use-in-recommendations="Yes - ONLY if assets should be used for ChatFactory &amp; Website Tools Recommendations"
3905    
3906  
3907    
3908      
3909      data-from-the-nook=""
3910    
3911  
3912>
3913  <a onclick="
3914  window['initializeContentEvents'] && typeof window['initializeContentEvents'] === 'function' &&
3915window.initializeContentEvents('contentClick', {contentId: 855820})
3916" class="pf-content-card-link flex items-center justify-between space-x-3" href="https://nurturenow.pathfactory.com/pathfactory-overview--1/pathfactory_product_tour?utm_campaign=homepage-navattic-tour&utm_content=product-tour&utm_medium=website&utm_source=website">
3917    
3918      <div class="relative w-[64px] h-fit rounded-[9px] border border-gray-200 overflow-hidden">
3919        <img
3920          src="https://cdn.pathfactory.com/assets/146/thumbnails/932696/ca8257a0-118b-4078-8e19-3fd7a2c80de1.png"
3921          alt="Sample content thumbnail"
3922          class="pf-content-card-thumbnail object-cover w-full aspect-[16/9]"
3923          loading="lazy"
3924        >
3925        <span
3926          class="pf-pinned-content-tag absolute bottom-0 w-full text-center text-[9px] bg-[#5555FF] text-[#ffffff]"
3927          
3928            style="display: none;"
3929          
3930        >
3931          Featured
3932        </span>
3933      </div>
3934    
3935    <div class="flex-1 min-w-0">
3936      <p class="pf-content-card-title pf_font_preset_7 text-[#000000] line-clamp-3">
3937        PathFactory Overview: Product Tour
3938      </p>
3939      
3940    </div>
3941  </a>
3942</li>
3943          
3944            
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963<li
3964  class="asset pf-content-card pf-sidebar-card hover:bg-[rgba(50,50,50,0.25)]  flex h-24 px-4 py-5 "
3965  style=""
3966  data-is-pinned="false"
3967  data-topics="ProductAI"
3968  data-title="PathFactory Helps Reduce Costs Overview"
3969  data-language=""
3970  data-personas=""
3971  data-business-units="MarketingSales"
3972  data-industries="B2B"
3973  data-products="Advanced"
3974  data-solutions=""
3975  data-content-type="Product Marketing"
3976  data-funnel-stages="Bottom of Funnel"
3977  data-uuid="e7123187-9bcd-463a-81e7-363784311c3b"
3978  
3979    
3980  
3981    
3982  
3983    
3984  
3985    
3986  
3987    
3988  
3989    
3990  
3991    
3992      
3993      data-use-cases=""
3994    
3995  
3996    
3997      
3998      data-use-in-recommendations="Yes - ONLY if assets should be used for ChatFactory &amp; Website Tools Recommendations"
3999    
4000  
4001    
4002      
4003      data-from-the-nook=""
4004    
4005  
4006>
4007  <a onclick="
4008  window['initializeContentEvents'] && typeof window['initializeContentEvents'] === 'function' &&
4009window.initializeContentEvents('contentClick', {contentId: 305234})
4010" class="pf-content-card-link flex items-center justify-between space-x-3" href="https://nurturenow.pathfactory.com/pathfactory-overview--1/pathfactory-helps-re?utm_campaign=homepage-navattic-tour&utm_content=product-tour&utm_medium=website&utm_source=website">
4011    
4012      <div class="relative w-[64px] h-fit rounded-[9px] border border-gray-200 overflow-hidden">
4013        <img
4014          src="https://cdn.pathfactory.com/assets/146/thumbnails/565593/337a8e70-0d6d-44d3-8a68-2e6a9127daa8.png"
4015          alt="Sample content thumbnail"
4016          class="pf-content-card-thumbnail object-cover w-full aspect-[16/9]"
4017          loading="lazy"
4018        >
4019        <span
4020          class="pf-pinned-content-tag absolute bottom-0 w-full text-center text-[9px] bg-[#5555FF] text-[#ffffff]"
4021          
4022            style="display: none;"
4023          
4024        >
4025          Featured
4026        </span>
4027      </div>
4028    
4029    <div class="flex-1 min-w-0">
4030      <p class="pf-content-card-title pf_font_preset_7 text-[#000000] line-clamp-3">
4031        PathFactory Helps Reduce Costs Overview
4032      </p>
4033      
4034    </div>
4035  </a>
4036</li>
4037          
4038            
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057<li
4058  class="asset pf-content-card pf-sidebar-card hover:bg-[rgba(50,50,50,0.25)]  flex h-24 px-4 py-5 "
4059  style=""
4060  data-is-pinned="false"
4061  data-topics="ProductMarketing OperationsAI"
4062  data-title="PathFactory Helps Increase Revenue Overview"
4063  data-language=""
4064  data-personas=""
4065  data-business-units="MarketingSalesProduct"
4066  data-industries="B2B"
4067  data-products=""
4068  data-solutions=""
4069  data-content-type="Product Marketing"
4070  data-funnel-stages="Bottom of Funnel"
4071  data-uuid="94f40fcc-41e3-41d0-8706-94b4595b458f"
4072  
4073    
4074  
4075    
4076  
4077    
4078  
4079    
4080  
4081    
4082  
4083    
4084  
4085    
4086      
4087      data-use-cases=""
4088    
4089  
4090    
4091      
4092      data-use-in-recommendations="Yes - ONLY if assets should be used for ChatFactory &amp; Website Tools Recommendations"
4093    
4094  
4095    
4096      
4097      data-from-the-nook=""
4098    
4099  
4100>
4101  <a onclick="
4102  window['initializeContentEvents'] && typeof window['initializeContentEvents'] === 'function' &&
4103window.initializeContentEvents('contentClick', {contentId: 305233})
4104" class="pf-content-card-link flex items-center justify-between space-x-3" href="https://nurturenow.pathfactory.com/pathfactory-overview--1/pathfactory-helps-in?utm_campaign=homepage-navattic-tour&utm_content=product-tour&utm_medium=website&utm_source=website">
4105    
4106      <div class="relative w-[64px] h-fit rounded-[9px] border border-gray-200 overflow-hidden">
4107        <img
4108          src="https://cdn.pathfactory.com/assets/146/thumbnails/565608/216e83d1-58c2-42c1-a3a7-efb2c97e8940.png"
4109          alt="Sample content thumbnail"
4110          class="pf-content-card-thumbnail object-cover w-full aspect-[16/9]"
4111          loading="lazy"
4112        >
4113        <span
4114          class="pf-pinned-content-tag absolute bottom-0 w-full text-center text-[9px] bg-[#5555FF] text-[#ffffff]"
4115          
4116            style="display: none;"
4117          
4118        >
4119          Featured
4120        </span>
4121      </div>
4122    
4123    <div class="flex-1 min-w-0">
4124      <p class="pf-content-card-title pf_font_preset_7 text-[#000000] line-clamp-3">
4125        PathFactory Helps Increase Revenue Overview
4126      </p>
4127      
4128    </div>
4129  </a>
4130</li>
4131          
4132            
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149
4150
4151<li
4152  class="asset pf-content-card pf-sidebar-card hover:bg-[rgba(50,50,50,0.25)]  flex h-24 px-4 py-5 "
4153  style=""
4154  data-is-pinned="false"
4155  data-topics="AIChatFactory"
4156  data-title="ChatFactory Product Tour"
4157  data-language="English"
4158  data-personas=""
4159  data-business-units="MarketingSales"
4160  data-industries="B2B"
4161  data-products=""
4162  data-solutions=""
4163  data-content-type="Product Tour"
4164  data-funnel-stages="Top of Funnel"
4165  data-uuid="ca39d778-636f-426f-a99a-ff31740c1a2e"
4166  
4167    
4168  
4169    
4170  
4171    
4172  
4173    
4174  
4175    
4176  
4177    
4178  
4179    
4180      
4181      data-use-cases=""
4182    
4183  
4184    
4185      
4186      data-use-in-recommendations="Yes - ONLY if assets should be used for ChatFactory &amp; Website Tools Recommendations"
4187    
4188  
4189    
4190      
4191      data-from-the-nook=""
4192    
4193  
4194>
4195  <a onclick="
4196  window['initializeContentEvents'] && typeof window['initializeContentEvents'] === 'function' &&
4197window.initializeContentEvents('contentClick', {contentId: 646336})
4198" class="pf-content-card-link flex items-center justify-between space-x-3" href="https://nurturenow.pathfactory.com/pathfactory-overview--1/chatfactory-tour?utm_campaign=homepage-navattic-tour&utm_content=product-tour&utm_medium=website&utm_source=website">
4199    
4200      <div class="relative w-[64px] h-fit rounded-[9px] border border-gray-200 overflow-hidden">
4201        <img
4202          src="https://cdn.pathfactory.com/assets/146/thumbnails/785785/6dc7b800-eb54-483f-b9fe-51cf8fd8a750.png"
4203          alt="Sample content thumbnail"
4204          class="pf-content-card-thumbnail object-cover w-full aspect-[16/9]"
4205          loading="lazy"
4206        >
4207        <span
4208          class="pf-pinned-content-tag absolute bottom-0 w-full text-center text-[9px] bg-[#5555FF] text-[#ffffff]"
4209          
4210            style="display: none;"
4211          
4212        >
4213          Featured
4214        </span>
4215      </div>
4216    
4217    <div class="flex-1 min-w-0">
4218      <p class="pf-content-card-title pf_font_preset_7 text-[#000000] line-clamp-3">
4219        ChatFactory Product Tour
4220      </p>
4221      
4222    </div>
4223  </a>
4224</li>
4225          
4226            
4227
4228
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245<li
4246  class="asset pf-content-card pf-sidebar-card hover:bg-[rgba(50,50,50,0.25)]  flex h-24 px-4 py-5 "
4247  style=""
4248  data-is-pinned="false"
4249  data-topics=""
4250  data-title="What Does PathFactory Do?"
4251  data-language="English"
4252  data-personas=""
4253  data-business-units="MarketingSales"
4254  data-industries=""
4255  data-products=""
4256  data-solutions=""
4257  data-content-type="Video"
4258  data-funnel-stages="Middle of Funnel"
4259  data-uuid="0c6a0fa4-7fbe-4379-b556-4ec43fd46cb5"
4260  
4261    
4262  
4263    
4264  
4265    
4266  
4267    
4268  
4269    
4270  
4271    
4272  
4273    
4274      
4275      data-use-cases=""
4276    
4277  
4278    
4279      
4280      data-use-in-recommendations="No"
4281    
4282  
4283    
4284      
4285      data-from-the-nook=""
4286    
4287  
4288>
4289  <a onclick="
4290  window['initializeContentEvents'] && typeof window['initializeContentEvents'] === 'function' &&
4291window.initializeContentEvents('contentClick', {contentId: 572576})
4292" class="pf-content-card-link flex items-center justify-between space-x-3" href="https://nurturenow.pathfactory.com/pathfactory-overview--1/pathfactory-explainer?utm_campaign=homepage-navattic-tour&utm_content=product-tour&utm_medium=website&utm_source=website">
4293    
4294      <div class="relative w-[64px] h-fit rounded-[9px] border border-gray-200 overflow-hidden">
4295        <img
4296          src="https://cdn.pathfactory.com/assets/146/thumbnails/573033/bd904b2b-3b49-4063-b097-91a4fcd320de.png"
4297          alt="Sample content thumbnail"
4298          class="pf-content-card-thumbnail object-cover w-full aspect-[16/9]"
4299          loading="lazy"
4300        >
4301        <span
4302          class="pf-pinned-content-tag absolute bottom-0 w-full text-center text-[9px] bg-[#5555FF] text-[#ffffff]"
4303          
4304            style="display: none;"
4305          
4306        >
4307          Featured
4308        </span>
4309      </div>
4310    
4311    <div class="flex-1 min-w-0">
4312      <p class="pf-content-card-title pf_font_preset_7 text-[#000000] line-clamp-3">
4313        What Does PathFactory Do?
4314      </p>
4315      
4316    </div>
4317  </a>
4318</li>
4319          
4320            
4321
4322
4323
4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337
4338
4339<li
4340  class="asset pf-content-card pf-sidebar-card hover:bg-[rgba(50,50,50,0.25)]  flex h-24 px-4 py-5 "
4341  style=""
4342  data-is-pinned="false"
4343  data-topics="ProductPersonalizationAI"
4344  data-title="How PathFactory Fits Into Your Martech Stack"
4345  data-language=""
4346  data-personas=""
4347  data-business-units="MarketingSales"
4348  data-industries="B2B"
4349  data-products="Advanced"
4350  data-solutions=""
4351  data-content-type="Sales Material"
4352  data-funnel-stages="Top of Funnel"
4353  data-uuid="2eeddcd1-d69b-43ad-bc7e-78f2975f6101"
4354  
4355    
4356  
4357    
4358  
4359    
4360  
4361    
4362  
4363    
4364  
4365    
4366  
4367    
4368      
4369      data-use-cases=""
4370    
4371  
4372    
4373      
4374      data-use-in-recommendations="Yes - ONLY if assets should be used for ChatFactory &amp; Website Tools Recommendations"
4375    
4376  
4377    
4378      
4379      data-from-the-nook=""
4380    
4381  
4382>
4383  <a onclick="
4384  window['initializeContentEvents'] && typeof window['initializeContentEvents'] === 'function' &&
4385window.initializeContentEvents('contentClick', {contentId: 520286})
4386" class="pf-content-card-link flex items-center justify-between space-x-3" href="https://nurturenow.pathfactory.com/pathfactory-overview--1/martechstackpf_final?utm_campaign=homepage-navattic-tour&utm_content=product-tour&utm_medium=website&utm_source=website">
4387    
4388      <div class="relative w-[64px] h-fit rounded-[9px] border border-gray-200 overflow-hidden">
4389        <img
4390          src="https://cdn.pathfactory.com/assets/146/contents/520286/thumbnails/600x/3b3e7d7d-c86a-4862-afd6-e822e5ed5b12-1.png"
4391          alt="Sample content thumbnail"
4392          class="pf-content-card-thumbnail object-cover w-full aspect-[16/9]"
4393          loading="lazy"
4394        >
4395        <span
4396          class="pf-pinned-content-tag absolute bottom-0 w-full text-center text-[9px] bg-[#5555FF] text-[#ffffff]"
4397          
4398            style="display: none;"
4399          
4400        >
4401          Featured
4402        </span>
4403      </div>
4404    
4405    <div class="flex-1 min-w-0">
4406      <p class="pf-content-card-title pf_font_preset_7 text-[#000000] line-clamp-3">
4407        How PathFactory Fits Into Your Martech Stack
4408      </p>
4409      
4410    </div>
4411  </a>
4412</li>
4413          
4414            
4415
4416
4417
4418
4419
4420
4421
4422
4423
4424
4425
4426
4427
4428
4429
4430
4431
4432
4433<li
4434  class="asset pf-content-card pf-sidebar-card hover:bg-[rgba(50,50,50,0.25)]  flex h-24 px-4 py-5 "
4435  style=""
4436  data-is-pinned="false"
4437  data-topics="PFRI"
4438  data-title="[Product Tour] PathFactory For Revenue Intelligence"
4439  data-language="English"
4440  data-personas="CMO/VPABM LeadContent LeadDemand Gen Lead"
4441  data-business-units="MarketingSales"
4442  data-industries=""
4443  data-products=""
4444  data-solutions=""
4445  data-content-type="Product Tour"
4446  data-funnel-stages="Top of Funnel"
4447  data-uuid="519e4870-0caa-468d-b10a-be5ceb61a191"
4448  
4449    
4450  
4451    
4452  
4453    
4454  
4455    
4456  
4457    
4458  
4459    
4460  
4461    
4462      
4463      data-use-cases="ABMDemand GenContent Strategy"
4464    
4465  
4466    
4467      
4468      data-use-in-recommendations=""
4469    
4470  
4471    
4472      
4473      data-from-the-nook=""
4474    
4475  
4476>
4477  <a onclick="
4478  window['initializeContentEvents'] && typeof window['initializeContentEvents'] === 'function' &&
4479window.initializeContentEvents('contentClick', {contentId: 912630})
4480" class="pf-content-card-link flex items-center justify-between space-x-3" href="https://nurturenow.pathfactory.com/pathfactory-overview--1/pfri_producttour?utm_campaign=homepage-navattic-tour&utm_content=product-tour&utm_medium=website&utm_source=website">
4481    
4482      <div class="relative w-[64px] h-fit rounded-[9px] border border-gray-200 overflow-hidden">
4483        <img
4484          src="https://cdn.pathfactory.com/assets/146/logos/974261/f855ee36-c0ab-4ed2-a78d-f42068c21fd1.png"
4485          alt="Sample content thumbnail"
4486          class="pf-content-card-thumbnail object-cover w-full aspect-[16/9]"
4487          loading="lazy"
4488        >
4489        <span
4490          class="pf-pinned-content-tag absolute bottom-0 w-full text-center text-[9px] bg-[#5555FF] text-[#ffffff]"
4491          
4492            style="display: none;"
4493          
4494        >
4495          Featured
4496        </span>
4497      </div>
4498    
4499    <div class="flex-1 min-w-0">
4500      <p class="pf-content-card-title pf_font_preset_7 text-[#000000] line-clamp-3">
4501        [Product Tour] PathFactory For Revenue Intelligence
4502      </p>
4503      
4504    </div>
4505  </a>
4506</li>
4507          
4508            
4509
4510
4511
4512
4513
4514
4515
4516
4517
4518
4519
4520
4521
4522
4523
4524
4525
4526
4527<li
4528  class="asset pf-content-card pf-sidebar-card hover:bg-[rgba(50,50,50,0.25)]  flex h-24 px-4 py-5 "
4529  style=""
4530  data-is-pinned="false"
4531  data-topics="Product"
4532  data-title="ABM &amp; Personalization Product Tour"
4533  data-language="English"
4534  data-personas="ABM Lead"
4535  data-business-units="MarketingSales"
4536  data-industries=""
4537  data-products=""
4538  data-solutions=""
4539  data-content-type="Product Tour"
4540  data-funnel-stages="Top of Funnel"
4541  data-uuid="0df8b410-fee1-42b6-8722-951a6114849b"
4542  
4543    
4544  
4545    
4546  
4547    
4548  
4549    
4550  
4551    
4552  
4553    
4554  
4555    
4556      
4557      data-use-cases="ABM"
4558    
4559  
4560    
4561      
4562      data-use-in-recommendations=""
4563    
4564  
4565    
4566      
4567      data-from-the-nook=""
4568    
4569  
4570>
4571  <a onclick="
4572  window['initializeContentEvents'] && typeof window['initializeContentEvents'] === 'function' &&
4573window.initializeContentEvents('contentClick', {contentId: 892363})
4574" class="pf-content-card-link flex items-center justify-between space-x-3" href="https://nurturenow.pathfactory.com/pathfactory-overview--1/abmtour?utm_campaign=homepage-navattic-tour&utm_content=product-tour&utm_medium=website&utm_source=website">
4575    
4576      <div class="relative w-[64px] h-fit rounded-[9px] border border-gray-200 overflow-hidden">
4577        <img
4578          src="https://cdn.pathfactory.com/assets/146/thumbnails/1035102/c36ff112-0d8f-46a6-b1f3-cf305353c06a.png"
4579          alt="Sample content thumbnail"
4580          class="pf-content-card-thumbnail object-cover w-full aspect-[16/9]"
4581          loading="lazy"
4582        >
4583        <span
4584          class="pf-pinned-content-tag absolute bottom-0 w-full text-center text-[9px] bg-[#5555FF] text-[#ffffff]"
4585          
4586            style="display: none;"
4587          
4588        >
4589          Featured
4590        </span>
4591      </div>
4592    
4593    <div class="flex-1 min-w-0">
4594      <p class="pf-content-card-title pf_font_preset_7 text-[#000000] line-clamp-3">
4595        ABM &amp; Personalization Product Tour
4596      </p>
4597      
4598    </div>
4599  </a>
4600</li>
4601          
4602            
4603
4604
4605
4606
4607
4608
4609
4610
4611
4612
4613
4614
4615
4616
4617
4618
4619
4620
4621<li
4622  class="asset pf-content-card pf-sidebar-card hover:bg-[rgba(50,50,50,0.25)]  flex h-24 px-4 py-5 "
4623  style=""
4624  data-is-pinned="false"
4625  data-topics="Content IntelligenceEnablement"
4626  data-title="Generative AI and the Intent-Driven Buyer’s Journey"
4627  data-language="English"
4628  data-personas="CMO/VPABM LeadContent LeadDemand Gen LeadMarketing Ops Lead"
4629  data-business-units="MarketingSalesSolutionsDemo"
4630  data-industries=""
4631  data-products="BasicAdvanced"
4632  data-solutions=""
4633  data-content-type="Report"
4634  data-funnel-stages="Middle of Funnel"
4635  data-uuid="034c2545-9576-44ac-bca4-d9e149e3fa51"
4636  
4637    
4638  
4639    
4640  
4641    
4642  
4643    
4644  
4645    
4646  
4647    
4648  
4649    
4650      
4651      data-use-cases="ABMDemand GenBuyer EnablementNurture"
4652    
4653  
4654    
4655      
4656      data-use-in-recommendations=""
4657    
4658  
4659    
4660      
4661      data-from-the-nook=""
4662    
4663  
4664>
4665  <a onclick="
4666  window['initializeContentEvents'] && typeof window['initializeContentEvents'] === 'function' &&
4667window.initializeContentEvents('contentClick', {contentId: 918927})
4668" class="pf-content-card-link flex items-center justify-between space-x-3" href="https://nurturenow.pathfactory.com/pathfactory-overview--1/genai-report?utm_campaign=homepage-navattic-tour&utm_content=product-tour&utm_medium=website&utm_source=website">
4669    
4670      <div class="relative w-[64px] h-fit rounded-[9px] border border-gray-200 overflow-hidden">
4671        <img
4672          src="https://cdn.pathfactory.com/assets/146/contents/918927/thumbnails/600x/ece9bef7-2e1f-41d1-97da-171d56ae4c1d-01.png"
4673          alt="Sample content thumbnail"
4674          class="pf-content-card-thumbnail object-cover w-full aspect-[16/9]"
4675          loading="lazy"
4676        >
4677        <span
4678          class="pf-pinned-content-tag absolute bottom-0 w-full text-center text-[9px] bg-[#5555FF] text-[#ffffff]"
4679          
4680            style="display: none;"
4681          
4682        >
4683          Featured
4684        </span>
4685      </div>
4686    
4687    <div class="flex-1 min-w-0">
4688      <p class="pf-content-card-title pf_font_preset_7 text-[#000000] line-clamp-3">
4689        Generative AI and the Intent-Driven Buyer’s Journey
4690      </p>
4691      
4692    </div>
4693  </a>
4694</li>
4695          
4696            
4697
4698
4699
4700
4701
4702
4703
4704
4705
4706
4707
4708
4709
4710
4711
4712
4713
4714
4715<li
4716  class="asset pf-content-card pf-sidebar-card hover:bg-[rgba(50,50,50,0.25)]  flex h-24 px-4 py-5 "
4717  style=""
4718  data-is-pinned="false"
4719  data-topics="ProductPersonalizationMarketoAIPathFactory Implementation"
4720  data-title="PathFactory Info Sheet"
4721  data-language="English"
4722  data-personas="ABM LeadContent LeadDemand Gen Lead"
4723  data-business-units="MarketingSales"
4724  data-industries=""
4725  data-products=""
4726  data-solutions=""
4727  data-content-type="One Pager"
4728  data-funnel-stages="Middle of Funnel"
4729  data-uuid="8f16284e-5220-4786-951c-95612d79f515"
4730  
4731    
4732  
4733    
4734  
4735    
4736  
4737    
4738  
4739    
4740  
4741    
4742  
4743    
4744      
4745      data-use-cases="ABMDemand GenContent StrategyBuyer Enablement"
4746    
4747  
4748    
4749      
4750      data-use-in-recommendations=""
4751    
4752  
4753    
4754      
4755      data-from-the-nook=""
4756    
4757  
4758>
4759  <a onclick="
4760  window['initializeContentEvents'] && typeof window['initializeContentEvents'] === 'function' &&
4761window.initializeContentEvents('contentClick', {contentId: 1009826})
4762" class="pf-content-card-link flex items-center justify-between space-x-3" href="https://nurturenow.pathfactory.com/pathfactory-overview--1/pf-info-sheet?utm_campaign=homepage-navattic-tour&utm_content=product-tour&utm_medium=website&utm_source=website">
4763    
4764      <div class="relative w-[64px] h-fit rounded-[9px] border border-gray-200 overflow-hidden">
4765        <img
4766          src="https://cdn.pathfactory.com/assets/146/contents/1009826/thumbnails/600x/5f24b409-c803-4d09-85fb-679dd20df0c3-1.png"
4767          alt="Sample content thumbnail"
4768          class="pf-content-card-thumbnail object-cover w-full aspect-[16/9]"
4769          loading="lazy"
4770        >
4771        <span
4772          class="pf-pinned-content-tag absolute bottom-0 w-full text-center text-[9px] bg-[#5555FF] text-[#ffffff]"
4773          
4774            style="display: none;"
4775          
4776        >
4777          Featured
4778        </span>
4779      </div>
4780    
4781    <div class="flex-1 min-w-0">
4782      <p class="pf-content-card-title pf_font_preset_7 text-[#000000] line-clamp-3">
4783        PathFactory Info Sheet
4784      </p>
4785      
4786    </div>
4787  </a>
4788</li>
4789          
4790        </ul>
4791        
4792      </div>
4793      
4794      
4795    </aside>
4796
4797    <style>
4798      #sidebar {
4799        width: 300px;
4800        min-width: 300px;
4801        transition: width 0.4s ease, min-width 0.4s ease, opacity 0.4s ease;
4802      }
4803
4804      #pf-sidebar-toggle {
4805        position: fixed;
4806        top: -10px;
4807        transform: translateY(-50%);
4808        z-index: 1001;
4809        width: 32px;
4810        height: 32px;
4811        color: white;
4812        border: none;
4813        border-radius: 50%;
4814        cursor: pointer;
4815        box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
4816        transition: left 0.4s ease, right 0.4s ease, transform 0.4s ease;
4817      }
4818
4819      #pf-sidebar-toggle:focus-visible {
4820        outline: 2px solid #ffffff;
4821        outline-offset: 2px;
4822        box-shadow: 0 0 0 4px #000000, 0 2px 8px rgba(0, 0, 0, 0.2);
4823      }
4824
4825      #pf-sidebar-toggle-icon {
4826        transition: transform 0.4s ease;
4827      }
4828
4829      #cookie-settings,
4830      #cookie-settings-mobile {
4831        font: inherit;
4832      }
4833
4834      #cookie-settings:focus-visible,
4835      #cookie-settings-mobile:focus-visible,
4836      .pf-mobile-tab:focus-visible,
4837      .pf-lazy-load-button:focus-visible {
4838        outline: 2px solid #005fcc;
4839        outline-offset: 2px;
4840      }
4841
4842      [data-sidebar-side='left'] #pf-sidebar-toggle {
4843        left: calc(300px - 16px);
4844      }
4845
4846      [data-sidebar-side='right'] #pf-sidebar-toggle {
4847        right: calc(300px - 16px);
4848      }
4849
4850      #content-page.sidebar-is-collapsed[data-sidebar-side='left'] #pf-sidebar-toggle {
4851        left: 8px;
4852      }
4853
4854      #content-page.sidebar-is-collapsed[data-sidebar-side='right'] #pf-sidebar-toggle {
4855        right: 8px;
4856      }
4857
4858      #content-page.sidebar-is-collapsed #pf-sidebar-toggle-icon {
4859        transform: rotate(180deg);
4860      }
4861
4862      #content-page.sidebar-is-collapsed #sidebar {
4863        width: 0 !important;
4864        min-width: 0 !important;
4865        opacity: 0 !important;
4866        overflow: hidden !important;
4867        border: none !important;
4868      }
4869
4870      #content-page.sidebar-is-collapsed .pf-content-wrapper {
4871        width: 100% !important;
4872      }
4873
4874      #content-page.sidebar-is-collapsed {
4875        --pf-sidebar-w: 0px !important;
4876        --pf-left-safe: 16px !important;
4877        --pf-right-safe: 16px !important;
4878      }
4879
4880      #content-page .pf-content-card[data-uuid='d64d2437-7e3c-489d-a77a-791766708af1'] .pf-content-card-title {
4881        color: #000000;
4882        font-weight: bold;
4883      }
4884
4885      #content-page .pf-sidebar-card[data-uuid='d64d2437-7e3c-489d-a77a-791766708af1'] {
4886        background-color: #CCCCCC;
4887      }
4888
4889      #content-page .pf-bottombar-card[data-uuid='d64d2437-7e3c-489d-a77a-791766708af1'] .pf-bottom-bar-title-wrapper {
4890        background-color: #CCCCCC;
4891      }
4892
4893      @media (max-width: 767px) {
4894        #pf-sidebar-toggle {
4895          display: none !important;
4896        }
4897      }
4898
4899      
4900    </style>
4901
4902    
4902<script>
4903      document.addEventListener('DOMContentLoaded', function() {
4904        const root = document.getElementById('content-page');
4905        const sidebar = document.getElementById('sidebar');
4906        const toggle = document.getElementById('pf-sidebar-toggle');
4907        const header = document.querySelector(".pf-header");
4908        if (!root || !sidebar || !toggle) return;
4909
4910        const side = root.dataset.sidebarSide || 'left';
4911        const STORAGE_KEY = `pf:sidebar:state:content-page`;
4912        const isPreviewMode = false;
4913
4914        if (window.matchMedia('(max-width: 767px)').matches) {
4915          sidebar.style.display = 'none';
4916          toggle.style.display = 'none';
4917          window.dispatchEvent(new CustomEvent('pf:sidebar:state', { detail: { expanded: false, side } }));
4918          return;
4919        }
4920
4921        let isExpanded;
4922
4923        function applyState() {
4924          const wasExpanded = toggle.getAttribute('aria-expanded') === 'true';
4925
4926          root.classList.toggle('sidebar-is-collapsed', !isExpanded);
4927          toggle.setAttribute('aria-expanded', String(isExpanded));
4928          toggle.setAttribute('aria-label', isExpanded ? 'Collapse sidebar' : 'Expand sidebar');
4929
4930          if (isExpanded) {
4931            sidebar.removeAttribute('inert');
4932            sidebar.removeAttribute('aria-hidden');
4933          } else {
4934            sidebar.setAttribute('inert', '');
4935            sidebar.setAttribute('aria-hidden', 'true');
4936            if (wasExpanded && sidebar.contains(document.activeElement)) {
4937              toggle.focus();
4938            }
4939          }
4940
4941          window.dispatchEvent(new CustomEvent('pf:sidebar:state', { detail: { expanded: isExpanded, side } }));
4942        }
4943
4944        toggle.addEventListener('click', function () {
4945          isExpanded = !isExpanded;
4946          if (!isPreviewMode) {
4947            sessionStorage.setItem(STORAGE_KEY, isExpanded ? 'expanded' : 'collapsed');
4948          }
4949          applyState();
4950        });
4951
4952        const templateIsCollapsed = ('expanded' === 'collapsed');
4953
4954        if (isPreviewMode) {
4955          isExpanded = !templateIsCollapsed;
4956        } else {
4957          const saved = sessionStorage.getItem(STORAGE_KEY);
4958          isExpanded = saved ? (saved === 'expanded') : !templateIsCollapsed;
4959        }
4960
4961        applyState();
4962
4963        const isHeaderEnabled = header && window.getComputedStyle(header).display !== 'none';
4964        if (isHeaderEnabled) {
4965          setTimeout(() => {
4966            if (header.offsetHeight) {
4967              toggle.style.top = `calc(${header.offsetHeight + 70}px)`;
4968            } else {
4969              toggle.style.top = "150px"
4970            }
4971          }, 500);
4972        } else {
4973          toggle.style.top = "70px"
4974        }
4975      });
4976    </script>
4976
4977  
4978
4979  
4980  
4981  
4982  
4983  
4984  
4985  
4986
4987
4988
4989
4990<style>
4991  #sidebar-contents-content-page-title #bottom-bar-button:focus-visible {
4992    outline: 2px solid #ffffff;
4993    outline-offset: 2px;
4994    box-shadow: 0 0 0 4px rgba(0, 0, 0, 0.5);
4995  }
4996</style>
4997
4998<div role="region" aria-label="Mobile content navigation" id="sidebar-contents-content-page" class="z-[1000] fixed bottom-[calc(50px-340px)] left-0 h-[340px] w-full transition-[bottom] ease-in-out duration-300 md:hidden bg-white" x-data="{
4999    isFilterExpanded: false,
5000    checkStyle() {
5001      this.isFilterExpanded = $el.style.bottom === '0px';
5002      const button = $el.querySelector('#bottom-bar-button');
5003      if (button) {
5004        const panelLabel = button.querySelector('.pf-bottom-bar-label')?.textContent?.trim() || '';
5005        button.setAttribute('aria-expanded', this.isFilterExpanded ? 'true' : 'false');
5006        button.setAttribute('aria-label', this.isFilterExpanded ? 'Collapse ' + panelLabel : 'Expand ' + panelLabel);
5007      }
5008    }
5009  }"
5010  x-init="checkStyle()"
5011  @sync-a11y="checkStyle()"
5012  @keyup.escape="$el.style.bottom = ''; checkStyle()"
5013  @transitionend="checkStyle()">
5014  <div
5015    id="sidebar-contents-content-page-title"
5016    class="w-full px-5 flex justify-between items-center h-[50px]
5017      
5018        text-[#000000] pf_font_preset_7
5019      
5020      
5021        
5022    
5023      bg-[#FFFFFF]
5024    
5025  
5026      "
5027  >
5028    <button
5029      type="button"
5030      id="bottom-bar-button"
5031      aria-expanded="false"
5032      aria-controls="sidebar-contents-content-page-content"
5033      aria-label="Expand Read More"
5034      class="flex items-center space-x-2"
5035    >
5036      <span class="pf-bottom-bar-label">Read More&nbsp;</span>
5037      <i class="fa-solid fa-chevron-up" aria-hidden="true"></i>
5038    </button>
5039    
5040  </div>
5041  <div id="sidebar-contents-content-page-content" class="w-full flex justify-center h-full">
5042    
5043    <div x-data="{ activeTab: 'contents' }" class="pf-resource-center-filters w-full flex flex-col items-center">
5044      
5045      <div
5046        
5047        x-show="activeTab == 'contents'"
5048        class="w-full flex justify-center"
5049      >
5050        <div role="status" aria-live="polite" class="no-results pf-no-results visually-hidden text-center w-full px-[20px] py-[40px]">
5051          10 results found
5052        </div>
5053        <div class="pf-bottombar-scroller flex overflow-x-scroll snap-mandatory snap-x pt-[20px]">
5054          <div role="list" aria-live="polite" class="assets-content-page pf-cards-wrapper flex w-full">
5055            
5056
5057
5058
5059
5060
5061
5062
5063
5064
5065
5066
5067
5068
5069
5070
5071
5072
5073<div
5074  class="asset pf-content-card pf-bottombar-card template snap-center shrink-0 flex justify-center max-w-[280px] w-[85%] h-full mb-8 mx-[5px]"
5075  style="display: none;"
5076  data-is-pinned=""
5077  data-topics=""
5078  data-title=""
5079  data-language=""
5080  data-personas=""
5081  data-business-units=""
5082  data-industries=""
5083  data-products=""
5084  data-solutions=""
5085  data-content-type=""
5086  data-funnel-stages=""
5087  data-uuid=""
5088>
5089  <a onclick="
5090  window['initializeContentEvents'] && typeof window['initializeContentEvents'] === 'function' &&
5091window.initializeContentEvents('contentClick', {contentId: })
5092" class="pf-content-card-link relative block group max-w-[280px] h-fit" href="">
5093    <div class=" rounded-t-md h-[50px] p-[8px] flex items-center 
5094  
5095    bg-[#FFFFFF]
5096  
5097 pf-bottom-bar-title-wrapper">
5098      <div class="pf-content-card-title line-clamp-2 pf_font_preset_7 text-[#000000]">
5099        
5100      </div>
5101    </div>
5102    <img
5103      class="pf-content-card-thumbnail object-cover w-full mb-4 aspect-[16/9] border border-gray-200 rounded-b-md"
5104      src=""
5105      alt="Sample content thumbnail"
5106      loading="lazy"
5107    >
5108    <span
5109      class="pf-pinned-content-tag absolute bottom-[15px] rounded-b-md w-full text-center text-[12px] bg-[#5555FF] text-[#ffffff]"
5110      
5111        style="display: none;"
5112      
5113    >
5114      Featured&nbsp;<i class="fa fa-star" aria-hidden="true"></i>
5115    </span>
5116  </a>
5117</div>
5118
5119            
5120              
5121
5122
5123
5124
5125
5126
5127
5128
5129
5130
5131
5132
5133
5134
5135
5136
5137
5138<div
5139  class="asset pf-content-card pf-bottombar-card  snap-center shrink-0 flex justify-center max-w-[280px] w-[85%] h-full mb-8 mx-[5px]"
5140  style=""
5141  data-is-pinned="false"
5142  data-topics="Product"
5143  data-title="PathFactory Overview: Product Tour"
5144  data-language="English"
5145  data-personas="CMO/VPABM LeadContent LeadDemand Gen LeadMarketing Ops Lead"
5146  data-business-units="MarketingProduct"
5147  data-industries="B2B"
5148  data-products=""
5149  data-solutions=""
5150  data-content-type="Product Tour"
5151  data-funnel-stages="Top of Funnel"
5152  data-uuid="d64d2437-7e3c-489d-a77a-791766708af1"
5153>
5154  <a onclick="
5155  window['initializeContentEvents'] && typeof window['initializeContentEvents'] === 'function' &&
5156window.initializeContentEvents('contentClick', {contentId: 855820})
5157" class="pf-content-card-link relative block group max-w-[280px] h-fit" href="https://nurturenow.pathfactory.com/pathfactory-overview--1/pathfactory_product_tour?utm_campaign=homepage-navattic-tour&utm_content=product-tour&utm_medium=website&utm_source=website">
5158    <div class=" rounded-t-md h-[50px] p-[8px] flex items-center 
5159  
5160    bg-[#FFFFFF]
5161  
5162 pf-bottom-bar-title-wrapper">
5163      <div class="pf-content-card-title line-clamp-2 pf_font_preset_7 text-[#000000]">
5164        PathFactory Overview: Product Tour
5165      </div>
5166    </div>
5167    <img
5168      class="pf-content-card-thumbnail object-cover w-full mb-4 aspect-[16/9] border border-gray-200 rounded-b-md"
5169      src="https://cdn.pathfactory.com/assets/146/thumbnails/932696/ca8257a0-118b-4078-8e19-3fd7a2c80de1.png"
5170      alt="Sample content thumbnail"
5171      loading="lazy"
5172    >
5173    <span
5174      class="pf-pinned-content-tag absolute bottom-[15px] rounded-b-md w-full text-center text-[12px] bg-[#5555FF] text-[#ffffff]"
5175      
5176        style="display: none;"
5177      
5178    >
5179      Featured&nbsp;<i class="fa fa-star" aria-hidden="true"></i>
5180    </span>
5181  </a>
5182</div>
5183
5184            
5185              
5186
5187
5188
5189
5190
5191
5192
5193
5194
5195
5196
5197
5198
5199
5200
5201
5202
5203<div
5204  class="asset pf-content-card pf-bottombar-card  snap-center shrink-0 flex justify-center max-w-[280px] w-[85%] h-full mb-8 mx-[5px]"
5205  style=""
5206  data-is-pinned="false"
5207  data-topics="ProductAI"
5208  data-title="PathFactory Helps Reduce Costs Overview"
5209  data-language=""
5210  data-personas=""
5211  data-business-units="MarketingSales"
5212  data-industries="B2B"
5213  data-products="Advanced"
5214  data-solutions=""
5215  data-content-type="Product Marketing"
5216  data-funnel-stages="Bottom of Funnel"
5217  data-uuid="e7123187-9bcd-463a-81e7-363784311c3b"
5218>
5219  <a onclick="
5220  window['initializeContentEvents'] && typeof window['initializeContentEvents'] === 'function' &&
5221window.initializeContentEvents('contentClick', {contentId: 305234})
5222" class="pf-content-card-link relative block group max-w-[280px] h-fit" href="https://nurturenow.pathfactory.com/pathfactory-overview--1/pathfactory-helps-re?utm_campaign=homepage-navattic-tour&utm_content=product-tour&utm_medium=website&utm_source=website">
5223    <div class=" rounded-t-md h-[50px] p-[8px] flex items-center 
5224  
5225    bg-[#FFFFFF]
5226  
5227 pf-bottom-bar-title-wrapper">
5228      <div class="pf-content-card-title line-clamp-2 pf_font_preset_7 text-[#000000]">
5229        PathFactory Helps Reduce Costs Overview
5230      </div>
5231    </div>
5232    <img
5233      class="pf-content-card-thumbnail object-cover w-full mb-4 aspect-[16/9] border border-gray-200 rounded-b-md"
5234      src="https://cdn.pathfactory.com/assets/146/thumbnails/565593/337a8e70-0d6d-44d3-8a68-2e6a9127daa8.png"
5235      alt="Sample content thumbnail"
5236      loading="lazy"
5237    >
5238    <span
5239      class="pf-pinned-content-tag absolute bottom-[15px] rounded-b-md w-full text-center text-[12px] bg-[#5555FF] text-[#ffffff]"
5240      
5241        style="display: none;"
5242      
5243    >
5244      Featured&nbsp;<i class="fa fa-star" aria-hidden="true"></i>
5245    </span>
5246  </a>
5247</div>
5248
5249            
5250              
5251
5252
5253
5254
5255
5256
5257
5258
5259
5260
5261
5262
5263
5264
5265
5266
5267
5268<div
5269  class="asset pf-content-card pf-bottombar-card  snap-center shrink-0 flex justify-center max-w-[280px] w-[85%] h-full mb-8 mx-[5px]"
5270  style=""
5271  data-is-pinned="false"
5272  data-topics="ProductMarketing OperationsAI"
5273  data-title="PathFactory Helps Increase Revenue Overview"
5274  data-language=""
5275  data-personas=""
5276  data-business-units="MarketingSalesProduct"
5277  data-industries="B2B"
5278  data-products=""
5279  data-solutions=""
5280  data-content-type="Product Marketing"
5281  data-funnel-stages="Bottom of Funnel"
5282  data-uuid="94f40fcc-41e3-41d0-8706-94b4595b458f"
5283>
5284  <a onclick="
5285  window['initializeContentEvents'] && typeof window['initializeContentEvents'] === 'function' &&
5286window.initializeContentEvents('contentClick', {contentId: 305233})
5287" class="pf-content-card-link relative block group max-w-[280px] h-fit" href="https://nurturenow.pathfactory.com/pathfactory-overview--1/pathfactory-helps-in?utm_campaign=homepage-navattic-tour&utm_content=product-tour&utm_medium=website&utm_source=website">
5288    <div class=" rounded-t-md h-[50px] p-[8px] flex items-center 
5289  
5290    bg-[#FFFFFF]
5291  
5292 pf-bottom-bar-title-wrapper">
5293      <div class="pf-content-card-title line-clamp-2 pf_font_preset_7 text-[#000000]">
5294        PathFactory Helps Increase Revenue Overview
5295      </div>
5296    </div>
5297    <img
5298      class="pf-content-card-thumbnail object-cover w-full mb-4 aspect-[16/9] border border-gray-200 rounded-b-md"
5299      src="https://cdn.pathfactory.com/assets/146/thumbnails/565608/216e83d1-58c2-42c1-a3a7-efb2c97e8940.png"
5300      alt="Sample content thumbnail"
5301      loading="lazy"
5302    >
5303    <span
5304      class="pf-pinned-content-tag absolute bottom-[15px] rounded-b-md w-full text-center text-[12px] bg-[#5555FF] text-[#ffffff]"
5305      
5306        style="display: none;"
5307      
5308    >
5309      Featured&nbsp;<i class="fa fa-star" aria-hidden="true"></i>
5310    </span>
5311  </a>
5312</div>
5313
5314            
5315              
5316
5317
5318
5319
5320
5321
5322
5323
5324
5325
5326
5327
5328
5329
5330
5331
5332
5333<div
5334  class="asset pf-content-card pf-bottombar-card  snap-center shrink-0 flex justify-center max-w-[280px] w-[85%] h-full mb-8 mx-[5px]"
5335  style=""
5336  data-is-pinned="false"
5337  data-topics="AIChatFactory"
5338  data-title="ChatFactory Product Tour"
5339  data-language="English"
5340  data-personas=""
5341  data-business-units="MarketingSales"
5342  data-industries="B2B"
5343  data-products=""
5344  data-solutions=""
5345  data-content-type="Product Tour"
5346  data-funnel-stages="Top of Funnel"
5347  data-uuid="ca39d778-636f-426f-a99a-ff31740c1a2e"
5348>
5349  <a onclick="
5350  window['initializeContentEvents'] && typeof window['initializeContentEvents'] === 'function' &&
5351window.initializeContentEvents('contentClick', {contentId: 646336})
5352" class="pf-content-card-link relative block group max-w-[280px] h-fit" href="https://nurturenow.pathfactory.com/pathfactory-overview--1/chatfactory-tour?utm_campaign=homepage-navattic-tour&utm_content=product-tour&utm_medium=website&utm_source=website">
5353    <div class=" rounded-t-md h-[50px] p-[8px] flex items-center 
5354  
5355    bg-[#FFFFFF]
5356  
5357 pf-bottom-bar-title-wrapper">
5358      <div class="pf-content-card-title line-clamp-2 pf_font_preset_7 text-[#000000]">
5359        ChatFactory Product Tour
5360      </div>
5361    </div>
5362    <img
5363      class="pf-content-card-thumbnail object-cover w-full mb-4 aspect-[16/9] border border-gray-200 rounded-b-md"
5364      src="https://cdn.pathfactory.com/assets/146/thumbnails/785785/6dc7b800-eb54-483f-b9fe-51cf8fd8a750.png"
5365      alt="Sample content thumbnail"
5366      loading="lazy"
5367    >
5368    <span
5369      class="pf-pinned-content-tag absolute bottom-[15px] rounded-b-md w-full text-center text-[12px] bg-[#5555FF] text-[#ffffff]"
5370      
5371        style="display: none;"
5372      
5373    >
5374      Featured&nbsp;<i class="fa fa-star" aria-hidden="true"></i>
5375    </span>
5376  </a>
5377</div>
5378
5379            
5380              
5381
5382
5383
5384
5385
5386
5387
5388
5389
5390
5391
5392
5393
5394
5395
5396
5397
5398<div
5399  class="asset pf-content-card pf-bottombar-card  snap-center shrink-0 flex justify-center max-w-[280px] w-[85%] h-full mb-8 mx-[5px]"
5400  style=""
5401  data-is-pinned="false"
5402  data-topics=""
5403  data-title="What Does PathFactory Do?"
5404  data-language="English"
5405  data-personas=""
5406  data-business-units="MarketingSales"
5407  data-industries=""
5408  data-products=""
5409  data-solutions=""
5410  data-content-type="Video"
5411  data-funnel-stages="Middle of Funnel"
5412  data-uuid="0c6a0fa4-7fbe-4379-b556-4ec43fd46cb5"
5413>
5414  <a onclick="
5415  window['initializeContentEvents'] && typeof window['initializeContentEvents'] === 'function' &&
5416window.initializeContentEvents('contentClick', {contentId: 572576})
5417" class="pf-content-card-link relative block group max-w-[280px] h-fit" href="https://nurturenow.pathfactory.com/pathfactory-overview--1/pathfactory-explainer?utm_campaign=homepage-navattic-tour&utm_content=product-tour&utm_medium=website&utm_source=website">
5418    <div class=" rounded-t-md h-[50px] p-[8px] flex items-center 
5419  
5420    bg-[#FFFFFF]
5421  
5422 pf-bottom-bar-title-wrapper">
5423      <div class="pf-content-card-title line-clamp-2 pf_font_preset_7 text-[#000000]">
5424        What Does PathFactory Do?
5425      </div>
5426    </div>
5427    <img
5428      class="pf-content-card-thumbnail object-cover w-full mb-4 aspect-[16/9] border border-gray-200 rounded-b-md"
5429      src="https://cdn.pathfactory.com/assets/146/thumbnails/573033/bd904b2b-3b49-4063-b097-91a4fcd320de.png"
5430      alt="Sample content thumbnail"
5431      loading="lazy"
5432    >
5433    <span
5434      class="pf-pinned-content-tag absolute bottom-[15px] rounded-b-md w-full text-center text-[12px] bg-[#5555FF] text-[#ffffff]"
5435      
5436        style="display: none;"
5437      
5438    >
5439      Featured&nbsp;<i class="fa fa-star" aria-hidden="true"></i>
5440    </span>
5441  </a>
5442</div>
5443
5444            
5445              
5446
5447
5448
5449
5450
5451
5452
5453
5454
5455
5456
5457
5458
5459
5460
5461
5462
5463<div
5464  class="asset pf-content-card pf-bottombar-card  snap-center shrink-0 flex justify-center max-w-[280px] w-[85%] h-full mb-8 mx-[5px]"
5465  style=""
5466  data-is-pinned="false"
5467  data-topics="ProductPersonalizationAI"
5468  data-title="How PathFactory Fits Into Your Martech Stack"
5469  data-language=""
5470  data-personas=""
5471  data-business-units="MarketingSales"
5472  data-industries="B2B"
5473  data-products="Advanced"
5474  data-solutions=""
5475  data-content-type="Sales Material"
5476  data-funnel-stages="Top of Funnel"
5477  data-uuid="2eeddcd1-d69b-43ad-bc7e-78f2975f6101"
5478>
5479  <a onclick="
5480  window['initializeContentEvents'] && typeof window['initializeContentEvents'] === 'function' &&
5481window.initializeContentEvents('contentClick', {contentId: 520286})
5482" class="pf-content-card-link relative block group max-w-[280px] h-fit" href="https://nurturenow.pathfactory.com/pathfactory-overview--1/martechstackpf_final?utm_campaign=homepage-navattic-tour&utm_content=product-tour&utm_medium=website&utm_source=website">
5483    <div class=" rounded-t-md h-[50px] p-[8px] flex items-center 
5484  
5485    bg-[#FFFFFF]
5486  
5487 pf-bottom-bar-title-wrapper">
5488      <div class="pf-content-card-title line-clamp-2 pf_font_preset_7 text-[#000000]">
5489        How PathFactory Fits Into Your Martech Stack
5490      </div>
5491    </div>
5492    <img
5493      class="pf-content-card-thumbnail object-cover w-full mb-4 aspect-[16/9] border border-gray-200 rounded-b-md"
5494      src="https://cdn.pathfactory.com/assets/146/contents/520286/thumbnails/600x/3b3e7d7d-c86a-4862-afd6-e822e5ed5b12-1.png"
5495      alt="Sample content thumbnail"
5496      loading="lazy"
5497    >
5498    <span
5499      class="pf-pinned-content-tag absolute bottom-[15px] rounded-b-md w-full text-center text-[12px] bg-[#5555FF] text-[#ffffff]"
5500      
5501        style="display: none;"
5502      
5503    >
5504      Featured&nbsp;<i class="fa fa-star" aria-hidden="true"></i>
5505    </span>
5506  </a>
5507</div>
5508
5509            
5510              
5511
5512
5513
5514
5515
5516
5517
5518
5519
5520
5521
5522
5523
5524
5525
5526
5527
5528<div
5529  class="asset pf-content-card pf-bottombar-card  snap-center shrink-0 flex justify-center max-w-[280px] w-[85%] h-full mb-8 mx-[5px]"
5530  style=""
5531  data-is-pinned="false"
5532  data-topics="PFRI"
5533  data-title="[Product Tour] PathFactory For Revenue Intelligence"
5534  data-language="English"
5535  data-personas="CMO/VPABM LeadContent LeadDemand Gen Lead"
5536  data-business-units="MarketingSales"
5537  data-industries=""
5538  data-products=""
5539  data-solutions=""
5540  data-content-type="Product Tour"
5541  data-funnel-stages="Top of Funnel"
5542  data-uuid="519e4870-0caa-468d-b10a-be5ceb61a191"
5543>
5544  <a onclick="
5545  window['initializeContentEvents'] && typeof window['initializeContentEvents'] === 'function' &&
5546window.initializeContentEvents('contentClick', {contentId: 912630})
5547" class="pf-content-card-link relative block group max-w-[280px] h-fit" href="https://nurturenow.pathfactory.com/pathfactory-overview--1/pfri_producttour?utm_campaign=homepage-navattic-tour&utm_content=product-tour&utm_medium=website&utm_source=website">
5548    <div class=" rounded-t-md h-[50px] p-[8px] flex items-center 
5549  
5550    bg-[#FFFFFF]
5551  
5552 pf-bottom-bar-title-wrapper">
5553      <div class="pf-content-card-title line-clamp-2 pf_font_preset_7 text-[#000000]">
5554        [Product Tour] PathFactory For Revenue Intelligence
5555      </div>
5556    </div>
5557    <img
5558      class="pf-content-card-thumbnail object-cover w-full mb-4 aspect-[16/9] border border-gray-200 rounded-b-md"
5559      src="https://cdn.pathfactory.com/assets/146/logos/974261/f855ee36-c0ab-4ed2-a78d-f42068c21fd1.png"
5560      alt="Sample content thumbnail"
5561      loading="lazy"
5562    >
5563    <span
5564      class="pf-pinned-content-tag absolute bottom-[15px] rounded-b-md w-full text-center text-[12px] bg-[#5555FF] text-[#ffffff]"
5565      
5566        style="display: none;"
5567      
5568    >
5569      Featured&nbsp;<i class="fa fa-star" aria-hidden="true"></i>
5570    </span>
5571  </a>
5572</div>
5573
5574            
5575              
5576
5577
5578
5579
5580
5581
5582
5583
5584
5585
5586
5587
5588
5589
5590
5591
5592
5593<div
5594  class="asset pf-content-card pf-bottombar-card  snap-center shrink-0 flex justify-center max-w-[280px] w-[85%] h-full mb-8 mx-[5px]"
5595  style=""
5596  data-is-pinned="false"
5597  data-topics="Product"
5598  data-title="ABM &amp; Personalization Product Tour"
5599  data-language="English"
5600  data-personas="ABM Lead"
5601  data-business-units="MarketingSales"
5602  data-industries=""
5603  data-products=""
5604  data-solutions=""
5605  data-content-type="Product Tour"
5606  data-funnel-stages="Top of Funnel"
5607  data-uuid="0df8b410-fee1-42b6-8722-951a6114849b"
5608>
5609  <a onclick="
5610  window['initializeContentEvents'] && typeof window['initializeContentEvents'] === 'function' &&
5611window.initializeContentEvents('contentClick', {contentId: 892363})
5612" class="pf-content-card-link relative block group max-w-[280px] h-fit" href="https://nurturenow.pathfactory.com/pathfactory-overview--1/abmtour?utm_campaign=homepage-navattic-tour&utm_content=product-tour&utm_medium=website&utm_source=website">
5613    <div class=" rounded-t-md h-[50px] p-[8px] flex items-center 
5614  
5615    bg-[#FFFFFF]
5616  
5617 pf-bottom-bar-title-wrapper">
5618      <div class="pf-content-card-title line-clamp-2 pf_font_preset_7 text-[#000000]">
5619        ABM &amp; Personalization Product Tour
5620      </div>
5621    </div>
5622    <img
5623      class="pf-content-card-thumbnail object-cover w-full mb-4 aspect-[16/9] border border-gray-200 rounded-b-md"
5624      src="https://cdn.pathfactory.com/assets/146/thumbnails/1035102/c36ff112-0d8f-46a6-b1f3-cf305353c06a.png"
5625      alt="Sample content thumbnail"
5626      loading="lazy"
5627    >
5628    <span
5629      class="pf-pinned-content-tag absolute bottom-[15px] rounded-b-md w-full text-center text-[12px] bg-[#5555FF] text-[#ffffff]"
5630      
5631        style="display: none;"
5632      
5633    >
5634      Featured&nbsp;<i class="fa fa-star" aria-hidden="true"></i>
5635    </span>
5636  </a>
5637</div>
5638
5639            
5640              
5641
5642
5643
5644
5645
5646
5647
5648
5649
5650
5651
5652
5653
5654
5655
5656
5657
5658<div
5659  class="asset pf-content-card pf-bottombar-card  snap-center shrink-0 flex justify-center max-w-[280px] w-[85%] h-full mb-8 mx-[5px]"
5660  style=""
5661  data-is-pinned="false"
5662  data-topics="Content IntelligenceEnablement"
5663  data-title="Generative AI and the Intent-Driven Buyer’s Journey"
5664  data-language="English"
5665  data-personas="CMO/VPABM LeadContent LeadDemand Gen LeadMarketing Ops Lead"
5666  data-business-units="MarketingSalesSolutionsDemo"
5667  data-industries=""
5668  data-products="BasicAdvanced"
5669  data-solutions=""
5670  data-content-type="Report"
5671  data-funnel-stages="Middle of Funnel"
5672  data-uuid="034c2545-9576-44ac-bca4-d9e149e3fa51"
5673>
5674  <a onclick="
5675  window['initializeContentEvents'] && typeof window['initializeContentEvents'] === 'function' &&
5676window.initializeContentEvents('contentClick', {contentId: 918927})
5677" class="pf-content-card-link relative block group max-w-[280px] h-fit" href="https://nurturenow.pathfactory.com/pathfactory-overview--1/genai-report?utm_campaign=homepage-navattic-tour&utm_content=product-tour&utm_medium=website&utm_source=website">
5678    <div class=" rounded-t-md h-[50px] p-[8px] flex items-center 
5679  
5680    bg-[#FFFFFF]
5681  
5682 pf-bottom-bar-title-wrapper">
5683      <div class="pf-content-card-title line-clamp-2 pf_font_preset_7 text-[#000000]">
5684        Generative AI and the Intent-Driven Buyer’s Journey
5685      </div>
5686    </div>
5687    <img
5688      class="pf-content-card-thumbnail object-cover w-full mb-4 aspect-[16/9] border border-gray-200 rounded-b-md"
5689      src="https://cdn.pathfactory.com/assets/146/contents/918927/thumbnails/600x/ece9bef7-2e1f-41d1-97da-171d56ae4c1d-01.png"
5690      alt="Sample content thumbnail"
5691      loading="lazy"
5692    >
5693    <span
5694      class="pf-pinned-content-tag absolute bottom-[15px] rounded-b-md w-full text-center text-[12px] bg-[#5555FF] text-[#ffffff]"
5695      
5696        style="display: none;"
5697      
5698    >
5699      Featured&nbsp;<i class="fa fa-star" aria-hidden="true"></i>
5700    </span>
5701  </a>
5702</div>
5703
5704            
5705              
5706
5707
5708
5709
5710
5711
5712
5713
5714
5715
5716
5717
5718
5719
5720
5721
5722
5723<div
5724  class="asset pf-content-card pf-bottombar-card  snap-center shrink-0 flex justify-center max-w-[280px] w-[85%] h-full mb-8 mx-[5px]"
5725  style=""
5726  data-is-pinned="false"
5727  data-topics="ProductPersonalizationMarketoAIPathFactory Implementation"
5728  data-title="PathFactory Info Sheet"
5729  data-language="English"
5730  data-personas="ABM LeadContent LeadDemand Gen Lead"
5731  data-business-units="MarketingSales"
5732  data-industries=""
5733  data-products=""
5734  data-solutions=""
5735  data-content-type="One Pager"
5736  data-funnel-stages="Middle of Funnel"
5737  data-uuid="8f16284e-5220-4786-951c-95612d79f515"
5738>
5739  <a onclick="
5740  window['initializeContentEvents'] && typeof window['initializeContentEvents'] === 'function' &&
5741window.initializeContentEvents('contentClick', {contentId: 1009826})
5742" class="pf-content-card-link relative block group max-w-[280px] h-fit" href="https://nurturenow.pathfactory.com/pathfactory-overview--1/pf-info-sheet?utm_campaign=homepage-navattic-tour&utm_content=product-tour&utm_medium=website&utm_source=website">
5743    <div class=" rounded-t-md h-[50px] p-[8px] flex items-center 
5744  
5745    bg-[#FFFFFF]
5746  
5747 pf-bottom-bar-title-wrapper">
5748      <div class="pf-content-card-title line-clamp-2 pf_font_preset_7 text-[#000000]">
5749        PathFactory Info Sheet
5750      </div>
5751    </div>
5752    <img
5753      class="pf-content-card-thumbnail object-cover w-full mb-4 aspect-[16/9] border border-gray-200 rounded-b-md"
5754      src="https://cdn.pathfactory.com/assets/146/contents/1009826/thumbnails/600x/5f24b409-c803-4d09-85fb-6
575479dd20df0c3-1.png"
5755      alt="Sample content thumbnail"
5756      loading="lazy"
5757    >
5758    <span
5759      class="pf-pinned-content-tag absolute bottom-[15px] rounded-b-md w-full text-center text-[12px] bg-[#5555FF] text-[#ffffff]"
5760      
5761        style="display: none;"
5762      
5763    >
5764      Featured&nbsp;<i class="fa fa-star" aria-hidden="true"></i>
5765    </span>
5766  </a>
5767</div>
5768
5769            
5770          </div>
5771        </div>
5772      </div>
5773      <div
5774        
5775        x-show="activeTab == 'filters'"
5776        class="mobile-filters-container flex flex-col w-full overflow-scroll grow max-h-[260px]"
5777      >
5778        
5779      </div>
5780      
5781    </div>
5782  
5783  </div>
5784</div>
5785<script>
5786  document.querySelector("#sidebar-contents-content-page-title button").onclick = (e) => {
5787    const bottombar = document.querySelector("#sidebar-contents-content-page");
5788    const bottomBarButton = e?.currentTarget;
5789    const bottombarTitleIcon = bottomBarButton?.querySelector("i") || document.querySelector("#sidebar-contents-content-page-title > i");
5790    const panelLabel = bottomBarButton?.querySelector(".pf-bottom-bar-label")?.textContent?.trim() || "";
5791    if (bottombar.style.bottom == "0px") {
5792      bottombar.style.bottom = ""
5793      bottombar.classList.add("bottom-calc(50px-340px)");
5794      bottombarTitleIcon?.setAttribute("class", "fa-solid fa-chevron-up");
5795    } else {
5796      bottombar.classList.remove("bottom-calc(50px-340px)");
5797      bottombar.style.bottom = "0px";
5798      bottombarTitleIcon?.setAttribute("class", "fa-solid fa-chevron-down");
5799    }
5800    const isExpanded = bottombar.style.bottom === "0px";
5801    bottomBarButton.setAttribute("aria-expanded", isExpanded ? "true" : "false");
5802    bottomBarButton.setAttribute("aria-label", isExpanded ? "Collapse " + panelLabel : "Expand " + panelLabel);
5803    bottombar.dispatchEvent(new Event('sync-a11y'));
5804    
5805    (() => {
5806      const allContents = Array.from(document.querySelectorAll(".pf-bottombar-scroller .pf-content-card"));
5807      const currentContentIndex = allContents.findIndex((c) => c.dataset.uuid.includes("d64d2437-7e3c-489d-a77a-791766708af1"));
5808      const nextIndex = currentContentIndex > -1 ? currentContentIndex + 1 : 0;
5809      const nextContent = allContents[currentContentIndex + 1] || allContents[0];
5810      nextContent.scrollIntoView();
5811    })();
5812  
5813  }
5814  document.addEventListener("keydown", (e) => {
5815    const bottombar = document.querySelector("#sidebar-contents-content-page");
5816    const closeButton = document.querySelector('#sidebar-contents-content-page .fa-close');
5817    const bottomBarButton = document.querySelector("#sidebar-contents-content-page-title button");
5818    const panelLabel = bottomBarButton?.querySelector(".pf-bottom-bar-label")?.textContent?.trim() || "";
5819    if (e.key === "Escape") {
5820      bottombar.style.bottom = ""
5821      bottomBarButton?.setAttribute("aria-expanded", "false");
5822      bottomBarButton?.setAttribute("aria-label", "Expand " + panelLabel);
5823      bottombar.dispatchEvent(new Event('sync-a11y'));
5824      closeButton?.setAttribute('tabindex', '-1');
5825    } else if (e.key === "Tab" && bottombar.style.bottom === "0px") {
5826      trapElementFocus(bottombar, e);
5827    }
5828  });
5829</script>
5829
5830  <div class="overflow-auto pf-content-wrapper h-full w-full" style="">
5831    
5832      
5833          <iframe
5834            title="PathFactory Overview: Product Tour"
5835            style="width: 100%; height: 100%; border: none;"
5836            class="pf-content-page-iframe"
5837            src="https://pathfactory.navattic.com/yd6k0hnh?utm_campaign=homepage-navattic-tour&utm_content=product-tour&utm_medium=website&utm_source=website"
5838          ></iframe>
5839        
5840    
5841  </div>
5842</div>
5843
5844
5845
5846
5847
5848<style>
5849  @media (min-width: 768px) {
5850    #content-page {
5851      --pf-sidebar-w: expandedpx;
5852      --pf-left-safe: 16px;
5853      --pf-right-safe: 324px;
5854    }
5855  }
5856  @media (max-width: 767.98px) {
5857    #content-page {
5858      --pf-sidebar-w: 0px;
5859      --pf-left-safe: 16px;
5860      --pf-right-safe: 16px;
5861    }
5862  }
5863</style>
5864
5865
5866
5867
5868<script>
5869  (() => {
5870    const contentsApi = new PfContentsApi({ sectionNodeId: 'content-page', preset: 'contentPage' });
5871    contentsApi.initializeContentControls();
5872  })();
5873</script>
5873
5874
5875
5876
5877
5878
5879
5880
5881
5882
5883
5884
5885
5886
5887
5888
5889
5890
5891
5892
5893
5894
5895
5896
5897
5898
5899
5900
5901
5902
5903
5904
5905
5906
5907
5908  
5909  
5910
5911  
5912
5913  
5914    
5915    
5916    
5917    
5918    
5919
5920    
5921    
5922      
5923    
5924      
5925    
5926      
5927    
5928      
5929    
5930      
5931    
5932      
5933    
5934      
5935    
5936      
5937    
5938      
5939    
5940      
5941    
5942
5943    
5944      
5945        
5946          
5947          
5948    
5949
5950    
5951
5952    
5953
5954    
5955
5956    
5957      
5958      
5959      
5960      
5961
5962      
5963
5964      
5965        
5966        
5967        
5968        
5969
5970        
5971        
5972        
5973
5974        
5975
5976        
5977        
5978
5979        
5980        <style>
5981                  .pf-next-promoter .pf-nav-arrow:focus-visible:not(:disabled),
5982                  .pf-next-promoter .pf-dots-nav-area:focus-visible:not([aria-disabled="true"]):not(:disabled),
5983                  .pf-next-promoter .pf-text-nav:focus-visible:not(:disabled) {
5984                    outline: 2px solid #ffffff;
5985                    outline-offset: 2px;
5986                    box-shadow: 0 0 0 4px #005fcc, 0 4px 12px rgba(0, 0, 0, 0.15);
5987                  }
5988                  @media (max-width: 767px) {
5989                    .pf-mobile-text-override { display: flex !important; }
5990                    .pf-next-promoter {
5991                      z-index: 1002 !important;
5992                    }
5993                  }
5994                  @media (min-width: 768px) {
5995                    .pf-mobile-text-override { display: none !important; }
5996                    :root {
5997                      --pf-np-left-safe: 16px;
5998                      --pf-np-right-safe: 324px;
5999                      --pf-np-dots-center: -150px;
6000                    }
6001                    .pf-next-promoter {
6002                      position: fixed;
6003                      inset: 0;
6004                      pointer-events: none;
6005                      z-index: 1000;
6006                      padding-bottom: 64px;
6007                    }
6008                    
6009                    .pf-np-left-offset {
6010                      left: var(--pf-np-left-safe, 16px);
6011                      transition: left 0.4s ease;
6012                    }
6013                    .pf-np-right-offset {
6014                      right: var(--pf-np-right-safe, 324px);
6015                      transition: right 0.4s ease;
6016                    }
6017                    .pf-nav-arrow {
6018                      width: 64px;
6019                      height: 64px;
6020                      border-radius: 32px;
6021                      display: flex;
6022                      align-items: center;
6023                      justify-content: center;
6024                      cursor: pointer;
6025                      pointer-events: auto;
6026                      position: fixed;
6027                      bottom: calc(64px + 8px);
6028                      transition: all 0.4s ease;
6029                      color: #FFFFFF;
6030                      border: 2px solid #FFFFFF;
6031                      background-color: #5555FF;
6032                      box-shadow: 0 4px 12px rgba(0,0,0,0.15);
6033                    }
6034                    .pf-nav-arrow:hover {
6035                      background-color: rgba(0,0,0,0.5);
6036                      transform: scale(1.05);
6037                    }
6038                    .pf-nav-arrow[aria-disabled="true"],
6039                    .pf-nav-arrow:disabled {
6040                      opacity: 0.5;
6041                      cursor: not-allowed;
6042                      pointer-events: none;
6043                    }
6044                    .pf-dots-container {
6045                      position: fixed;
6046                      bottom: calc(64px + 8px);
6047                      left: 50%;
6048                      transform: translateX(calc(-50% + var(--pf-np-dots-center, 0px)));
6049                      display: flex;
6050                      align-items: center;
6051                      justify-content: center;
6052                      pointer-events: auto;
6053                      height: 36px;
6054                      width: 250px;
6055                      transition: transform 0.4s ease;
6056                    }
6057                    .pf-dots {
6058                      display: flex;
6059                      gap: 8px;
6060                      align-items: center;
6061                    }
6062                    .pf-dot {
6063                      display: inline-block;
6064                      width: 18px; height: 18px;
6065                      transition: all .3s ease;
6066                      border: none; outline: none; padding: 0; margin: 0;
6067                      transform: scale(0.9);
6068                      pointer-events: none;
6069                    }
6070                    .pf-dot.pf-dot-active {
6071                      transform: scale(1.1);
6072                      opacity: 1;
6073                    }
6074                    .pf-dots-nav-area {
6075                      position: absolute;
6076                      top: 0; bottom: 0;
6077                      width: 45%;
6078                      cursor: pointer;
6079                      border: none;
6080                      background: transparent;
6081                      padding: 0;
6082                      margin: 0;
6083                      font: inherit;
6084                      appearance: none;
6085                      -webkit-appearance: none;
6086                      pointer-events: auto;
6087                    }
6088                    .pf-dots-nav-area[aria-disabled="true"],
6089                    .pf-dots-nav-area:disabled {
6090                      cursor: not-allowed;
6091                      pointer-events: none;
6092                      opacity: 0.5;
6093                    }
6094                    .pf-dots-nav-left { left: 0; }
6095                    .pf-dots-nav-right { right: 0; }
6096                    .pf-text-nav {
6097                      position: fixed;
6098                      bottom: calc(64px + 12px);
6099                      pointer-events: auto;
6100                      cursor: pointer;
6101                      transition: all 0.4s ease;
6102                      z-index: 1001;
6103                      border: none;
6104                      background: transparent;
6105                      padding: 0;
6106                      margin: 0;
6107                      font: inherit;
6108                      text-align: inherit;
6109                      appearance: none;
6110                      -webkit-appearance: none;
6111                    }
6112                    .pf-text-nav[aria-disabled="true"],
6113                    .pf-text-nav:disabled {
6114                      opacity: 0.5;
6115                      cursor: not-allowed;
6116                      pointer-events: none;
6117                    }
6118                    .pf-text-nav-compact {
6119                      display: flex;
6120                      align-items: center;
6121                      justify-content: center;
6122                      padding: 12px 24px;
6123                      border-radius: 8px;
6124                      color: #FFFFFF;
6125                      background-color: rgba(37, 99, 235, 0.9);
6126                      font-size: 16px;
6127                      font-weight: 500;
6128                      min-width: 80px;
6129                      box-shadow: 0 4px 12px rgba(0,0,0,0.15);
6130                      transition: all 0.3s ease;
6131                    }
6132                    .pf-text-nav-expanded {
6133                      display: none;
6134                      flex-direction: column;
6135                      width: 280px;
6136                      padding: 16px;
6137                      border-radius: 8px;
6138                      color: #FFFFFF;
6139                      background-color: rgba(37, 99, 235, 1);
6140                      box-shadow: 0 8px 24px rgba(0,0,0,0.25);
6141                      transform: translateY(-8px);
6142                      border: 1px solid rgba(255,255,255,0.2);
6143                    }
6144                    .pf-text-nav.has-preview-content:hover .pf-text-nav-compact { display: none; }
6145                    .pf-text-nav.has-preview-content:hover .pf-text-nav-expanded { display: flex; }
6146                    
6147                    .pf-preview-thumbnail {
6148                      width: 100%;
6149                      height: 120px;
6150                      object-fit: cover;
6151                      border-radius: 6px;
6152                      margin-bottom: 12px;
6153                    }
6154                    .pf-preview-title {
6155                      font-size: 16px;
6156                      font-weight: 600;
6157                      line-height: 1.3;
6158                      margin-bottom: 8px;
6159                      color: inherit;
6160                    }
6161                    .pf-preview-description {
6162                      font-size: 14px;
6163                      opacity: 0.9;
6164                      line-height: 1.4;
6165                      display: -webkit-box;
6166                      -webkit-line-clamp: 3;
6167                      -webkit-box-orient: vertical;
6168                      overflow: hidden;
6169                      color: inherit;
6170                    }
6171                  }
6172                  @media (max-width: 767px) {
6173                    .pf-next-promoter {
6174                      position: fixed;
6175                      inset: 0;
6176                      pointer-events: none;
6177                      z-index: 1002;
6178                      padding-bottom: var(--pf-mobile-bottom-safe);
6179                    }
6180                    
6181                    .pf-nav-arrow {
6182                      width: 48px;
6183                      height: 48px;
6184                      border-radius: 32px;
6185                      display: flex;
6186                      align-items: center;
6187                      justify-content: center;
6188                      cursor: pointer;
6189                      pointer-events: auto;
6190                      position: fixed;
6191                      bottom: var(--pf-mobile-bottom-safe);
6192                      transition: all 0.4s ease;
6193                      color: #FFFFFF;
6194                      border: 2px solid #FFFFFF;
6195                      background-color: #5555FF;
6196                      box-shadow: 0 4px 12px rgba(0,0,0,0.15);
6197                    }
6198                    .pf-nav-arrow.pf-np-left-offset {
6199                      left: 16px;
6200                    }
6201                    .pf-nav-arrow.pf-np-right-offset {
6202                      right: 16px;
6203                    }
6204                    .pf-nav-arrow:disabled {
6205                      opacity: 0.5;
6206                      cursor: not-allowed;
6207                      pointer-events: none;
6208                    }
6209                  
6210                    .pf-text-nav { display: none !important; }
6211                  }
6212        </style>
6213
6214        
6215        
6216        <div class="pf-next-promoter" role="navigation" aria-label="Content">
6217          
6218            <button
6219              type="button"
6220              class="pf-nav-arrow pf-np-left-offset"
6221              aria-label="Previous"
6222              
6223                disabled
6224                aria-disabled="true"
6225              
6226            >
6227              
6228              <svg width="24" height="24" viewBox="0 0 24 24" fill="none" aria-hidden="true">
6229                <path d="M15.41 7.41 14 6l-6 6 6 6 1.41-1.41L10.83 12z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
6230              </svg>
6231            </button>
6232            <button
6233              type="button"
6234              class="pf-nav-arrow pf-np-right-offset"
6235              aria-label="Next"
6236              
6237                onclick="window.location.href='https://nurturenow.pathfactory.com/pathfactory-overview--1/pathfactory-helps-re?utm_campaign=homepage-navattic-tour&utm_content=product-tour&utm_medium=website&utm_source=website'"
6238              
6239            >
6240              
6241              <svg width="24" height="24" viewBox="0 0 24 24" fill="none" aria-hidden="true">
6242                <path d="M10 6 8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
6243              </svg>
6244            </button>
6245          
6246        </div>
6247
6248        
6248<script>
6249          document.addEventListener('DOMContentLoaded', function() {
6250            (function () {
6251              const contentPage = document.getElementById('content-page');
6252              if (!contentPage) return;
6253
6254              const sidebarSide = contentPage.getAttribute('data-sidebar-side') || 'left';
6255              const isLeft = sidebarSide === 'left';
6256              const sidebarW = 300;
6257              const isMobile = window.matchMedia('(max-width: 767px)').matches;
6258
6259              function updatePositions() {
6260                if (isMobile) {
6261                  updateMobilePositions();
6262                  return;
6263                }
6264
6265                const root = document.documentElement;
6266                const isCollapsed = contentPage.classList.contains('sidebar-is-collapsed');
6267
6268                let leftSafe, rightSafe, dotsCenter;
6269
6270                if (isCollapsed) {
6271                  leftSafe = '16px';
6272                  rightSafe = '16px';
6273                  dotsCenter = '0px';
6274                } else {
6275                  if (isLeft) {
6276                    leftSafe = '324px';
6277                    rightSafe = '16px';
6278                    dotsCenter = '150px';
6279                  } else {
6280                    leftSafe = '16px';
6281                    rightSafe = '324px';
6282                    dotsCenter = '-150px';
6283                  }
6284                }
6285
6286                root.style.setProperty('--pf-np-left-safe', leftSafe);
6287                root.style.setProperty('--pf-np-right-safe', rightSafe);
6288                root.style.setProperty('--pf-np-dots-center', dotsCenter);
6289              }
6290
6291              function updateMobilePositions() {
6292                const bottomBar = document.getElementById('sidebar-contents-content-page');
6293                let bottomSafe = '60px';
6294
6295                if (bottomBar) {
6296                  const barRect = bottomBar.getBoundingClientRect();
6297                  const computedBottom = window.getComputedStyle(bottomBar).bottom;
6298                  let isExpanded = true;
6299                  if (computedBottom && computedBottom.indexOf('-') === 0) {
6300                    isExpanded = false;
6301                  }
6302                  if (isExpanded) {
6303                    bottomSafe = window.innerHeight - barRect.top + 12 + 'px';
6304                  } else {
6305                    bottomSafe = '60px';
6306                  }
6307                }
6308
6309                document.documentElement.style.setProperty('--pf-mobile-bottom-safe', bottomSafe);
6310              }
6311
6312              document.addEventListener('click', function (e) {
6313                if (e.target.id === 'pf-sidebar-toggle' || e.target.closest('#pf-sidebar-toggle')) {
6314                  setTimeout(updatePositions, 50);
6315                }
6316              });
6317
6318              if (isMobile) {
6319                const bottomBarElement = document.getElementById('sidebar-contents-content-page');
6320                if (bottomBarElement) {
6321                  bottomBarElement.addEventListener('transitionend', function (e) {
6322                    if (e.propertyName === 'bottom') {
6323                      updateMobilePositions();
6324                    }
6325                  });
6326                }
6327                window.addEventListener('resize', updateMobilePositions);
6328              }
6329
6330              setTimeout(updatePositions, 200);
6331
6332              window.addEventListener('resize', function () {
6333                const newIsMobile = window.matchMedia('(max-width: 767px)').matches;
6334                if (newIsMobile !== isMobile) {
6335                  isMobile = newIsMobile;
6336                  setTimeout(updatePositions, 100);
6337                }
6338              });
6339            })();
6340          });
6341        </script>
6341
6342      
6343    
6344  
6345
6346
6347
6348
6349
6350
6351
6352
6353    
6354
6355
6356
6357
6358
6359
6360<script>
6361  const pfExperienceFormStrategy = `` ? JSON.parse(``) : null;
6362  const pfContentFormStrategy = `` ? JSON.parse(``) : null;
6363  const pfExperienceFormPresent = false;
6364  const pfContentFormPresent = false;
6365  const pfExperienceFormModalSelector = ".modal-pf-experience-form-strategy";
6366  const pfContentFormModalSelector = ".modal-pf-content-form-strategy";
6367  const pfVisitorKnown = () => {
6368    const params = new URLSearchParams(window.location.search);
6369    const pfses = params.get('_pfses');
6370    const knownViaLbEmail = window.pfConsentStatus && pfConsentStatus() && pfses;
6371    return false || knownViaLbEmail;
6372  };
6373  const pfIsLandingPage = false;
6374
6375  const pfExperienceFormModal = pfExperienceFormPresent && document.querySelector(pfExperienceFormModalSelector);
6376  const pfContentFormModal = pfContentFormPresent && document.querySelector(pfContentFormModalSelector);
6377
6378  if (pfExperienceFormPresent || pfContentFormPresent) {
6379    setInterval(() => {
6380      document.dispatchEvent(new CustomEvent("pf_page_ping", {
6381        detail: {
6382          interval: 5
6383        },
6384      }));
6385    }, 5000);
6386  }
6387
6388  const pfFormConditionsMet = ({ formModal, config, toggleModal = false, pdfButtonClick = false }) => {
6389    if (!config) { return false; }
6390    if (window.pdfFormModalOpen) { return false; }
6391
6392    const currentSession = JSON.parse(localStorage.getItem("pfCurrentSession") || "{}");
6393    const knownVisitorCondition = config.show_to_known_visitors && pfVisitorKnown();
6394    const unknownVisitorCondition = config.show_to_unknown_visitors && !pfVisitorKnown();
6395    const formSubmittedAlready = JSON.parse(localStorage.getItem("pfSubmittedForms") || "[]").filter((sf) => {
6396      return (
6397        sf.experienceId == "230169" &&
6398          sf.formId == config.form_id
6399      );
6400    }).length > 0;
6401    const submittedShowAgainCondition = config.submitted_show_again || !formSubmittedAlready;
6402    const formNotDismissed = JSON.parse(localStorage.getItem("pfDismissedForms") || "[]").filter((df) => {
6403      return (
6404        df.experienceId == "230169" &&
6405          df.formId == config.form_id
6406      );
6407    }).length == 0;
6408    const visibleModal = Array.from(document.querySelectorAll(".pf-modal")).filter((m) => m.style.display !== "none").length > 0;
6409
6410    const show = pdfButtonClick || (knownVisitorCondition || unknownVisitorCondition) && submittedShowAgainCondition && formNotDismissed && !visibleModal;
6411
6412    if (toggleModal && formModal) {
6413      formModal.style.display = show ? "block" : "none";
6414      formModal.style.opacity = 0;
6415      setTimeout(() => formModal.style.opacity = show ? 1 : 0, 500);
6416      if (show) {
6417        if (!pdfButtonClick) {
6418          window.pfFormsShown = [...new Set((window.pfFormsShown || []).concat([config.form_id]))];
6419        }
6420        (window.pfVideoPlayers || []).forEach((player) => {
6421          player.pause();
6422        });
6423        window.showForm({
6424          formType: pfContentFormPresent ?  "" : "",
6425          formData: { value: pfContentFormPresent ?  "content_form_strategy" : "experience_form_strategy" }
6426        });
6427      }
6428    }
6429
6430    return show;
6431  };
6432
6433  const pdfButtonHandler = (e) => {
6434    e.preventDefault();
6435    pfFormConditionsMet({
6436      formModal: pfContentFormModal,
6437      config: pfContentFormStrategy,
6438      toggleModal: true,
6439      pdfButtonClick: true,
6440    });
6441    setTimeout(() => window.pdfFormModalOpen = e?.target?.id, 0);
6442  }
6443
6444  const getPdfElements = () => {
6445    const pfPrint = document.getElementById("print_pf");
6446    const pfDownload = document.getElementById("download_pf");
6447    const printBtn = document.getElementById("print");
6448    const downloadBtn = document.getElementById("download");
6449    if (!pfPrint || !pfDownload || !printBtn || !downloadBtn) {
6450      return false;
6451    }
6452    return {
6453      pfPrint,
6454      pfDownload,
6455      printBtn,
6456      downloadBtn
6457    }
6458  }
6459
6460  const switchPdfButtons = ({ showCustomButtons, config }) => {
6461    const pdfElements = getPdfElements();
6462    if (!pdfElements) {
6463      return;
6464    }
6465    
6466    const { pfPrint, pfDownload, printBtn, downloadBtn } = pdfElements;
6467    if (showCustomButtons) {
6468      const { show_on_print, show_on_download } = config;
6469      if (show_on_print) {
6470        pfPrint.style.display = "inline-block";
6471        printBtn.style.display = "none";
6472        pfPrint.addEventListener("click", pdfButtonHandler);
6473        window.originalPrint = window.print;
6474        window.print = () => {};
6475      }
6476
6477      if (show_on_download) {
6478        pfDownload.style.display = "inline-block";
6479        downloadBtn.style.display = "none";
6480        pfDownload.addEventListener("click", pdfButtonHandler);
6481      }
6482    } else {
6483      pfPrint.style.display = "none";
6484      pfDownload.style.display = "none";
6485      printBtn.style.display = "inline-block";
6486      downloadBtn.style.display = "inline-block";
6487      [pfPrint, pfDownload].forEach(button => {
6488        button.removeEventListener('click', pdfButtonHandler);
6489      });
6490    }
6491  }
6492  const pfPdfFormConditionsMet = ({ config }) => {
6493    if (!config) { return false; }
6494
6495    const { show_on_print, show_on_download } = config;
6496    if (!show_on_print && !show_on_download) {
6497      return;
6498    }
6499
6500    const knownVisitorCondition = config.show_to_known_visitors && pfVisitorKnown();
6501    const unknownVisitorCondition = config.show_to_unknown_visitors && !pfVisitorKnown();
6502    const formSubmittedAlready = JSON.parse(localStorage.getItem("pfSubmittedForms") || "[]").filter((sf) => {
6503      return (
6504        sf.experienceId == "230169" &&
6505          sf.formId == config.form_id
6506      );
6507    }).length > 0;
6508    const submittedShowAgainCondition = config.submitted_show_again || !formSubmittedAlready;
6509    const showForm = (knownVisitorCondition || unknownVisitorCondition) && submittedShowAgainCondition;
6510    switchPdfButtons({ showCustomButtons: showForm, config });
6511  };
6512
6513  const isBypassEngagementEnabled = (config) => {
6514    if (!config) return false;
6515    const {
6516      enable_bypass_engagement,
6517      show_on_download,
6518      show_on_print,
6519    } = config;
6520    if (!getPdfElements()) {
6521      return false;
6522    }
6523    return enable_bypass_engagement && (show_on_download || show_on_print);
6524  };
6525
6526  const resumePdfActions = (modal) => {
6527    return new Promise((resolve, reject) => {
6528      let counter = 0;
6529      const modalCloseInterval = setInterval(() => {
6530        try {
6531          if (modal.style.display === "none" || counter > 10) {
6532            clearInterval(modalCloseInterval);
6533            if (window.pdfFormModalOpen) {
6534              if (window.pdfFormModalOpen === "print_pf") {
6535                if (window.originalPrint) {
6536                  window.print = window.originalPrint;
6537                }
6538                window.PDFViewerApplication?.triggerPrinting();
6539              } else if (window.pdfFormModalOpen === "download_pf") {
6540                window.PDFViewerApplication?.downloadOrSave();
6541              }
6542            }
6543            window.pdfFormModalOpen = false;
6544            pfPdfFormConditionsMet({ config: pfContentFormStrategy });
6545            resolve();
6546          } else {
6547            counter++;
6548          }
6549        } catch (error) {
6550          clearInterval(modalCloseInterval);
6551          reject(error);
6552        }
6553      }, 500);
6554    });
6555  };
6556
6557  const pfContentFormStrategyEligible = pfContentFormPresent && pfFormConditionsMet({ config: pfContentFormStrategy });
6558  const pfExperienceFormStrategyEligible = pfExperienceFormPresent && pfFormConditionsMet({ config: pfExperienceFormStrategy });
6559  const pfActiveFormStrategy = (pfContentFormStrategyEligible && "contentStrategy") || (pfExperienceFormStrategyEligible && "experienceStrategy");
6560  const promotersClickable = (pfActiveFormStrategy === "experienceStrategy" && pfExperienceFormStrategy.promoters_clickable) ||
6561    (pfActiveFormStrategy === "contentStrategy" && pfContentFormStrategy.promoters_clickable);
6562
6563  pfContentFormPresent && pfPdfFormConditionsMet({ config: pfContentFormStrategy });
6564
6565  const pfForceExperienceFormStrategy = pfExperienceFormPresent &&
6566                                        isBypassEngagementEnabled(pfContentFormStrategy) &&
6567                                        pfFormConditionsMet({ config: pfExperienceFormStrategy });
6568
6569  const pfUpdateEngagementTimes = (pagePing) => {
6570    const engagementTimes = JSON.parse(localStorage.getItem("pfExperienceEngagement") || "[]");
6571    const engagementTimeIndex = engagementTimes.findIndex((et) => {
6572      return et.experienceId == "230169"
6573    });
6574    let contentEngagementIndex = -1;
6575    const contentEngagements = engagementTimes[engagementTimeIndex]?.contentEngagements || [];
6576    const contentEngagement = contentEngagements.find((ce, i) => {
6577      if (ce.contentId == "855820") {
6578        contentEngagementIndex = i;
6579        return true;
6580      }
6581    }) || {};
6582    const newContentEngagement = {
6583      ...contentEngagement,
6584      contentId: "855820",
6585      duration: (contentEngagement.duration || 0) + pagePing.interval
6586    };
6587    const updatedEngagementTime = {
6588      experienceId: "230169",
6589      duration: (engagementTimeIndex > -1 ? engagementTimes[engagementTimeIndex].duration : 0) + pagePing.interval,
6590      contents:
6591        engagementTimeIndex > -1
6592          ? [...new Set(engagementTimes[engagementTimeIndex].contents.concat(["855820"]))]
6593          : ["855820"],
6594      contentEngagements:
6595        contentEngagementIndex > -1
6596          ? contentEngagements.map((ce) => ce.contentId == "855820" ? newContentEngagement : ce)
6597          : [...contentEngagements, newContentEngagement]
6598    };
6599
6600    if (engagementTimeIndex > -1) {
6601      engagementTimes[engagementTimeIndex] = updatedEngagementTime;
6602    } else {
6603      engagementTimes.push(updatedEngagementTime);
6604    }
6605    localStorage.setItem("pfExperienceEngagement", JSON.stringify(engagementTimes));
6606    localStorage.setItem("pfCurrentSession", JSON.stringify(updatedEngagementTime));
6607
6608    if (pfActiveFormStrategy === "experienceStrategy" || pfForceExperienceFormStrategy) {
6609      const assetsViewedCondition = updatedEngagementTime.contents.length >= pfExperienceFormStrategy.assets_viewed
6610        && updatedEngagementTime.duration >= pfExperienceFormStrategy.assets_viewed_time;
6611      const timeOnExperienceCondition = updatedEngagementTime.duration >= pfExperienceFormStrategy.time_on_experience;
6612      const formNotYetShown = (window.pfFormsShown || []).indexOf(pfExperienceFormStrategy.form_id) == -1;
6613
6614      if (
6615        (pfExperienceFormStrategy.form_trigger_type !== "assetsViewed" || assetsViewedCondition) &&
6616        (pfExperienceFormStrategy.form_trigger_type !== "timeOnExperience" || timeOnExperienceCondition) &&
6617        formNotYetShown
6618      ) {
6619        pfFormConditionsMet({
6620          config: pfExperienceFormStrategy,
6621          formModal: pfExperienceFormModal,
6622          toggleModal: true
6623        });
6624      }
6625    }
6626
6627    if (pfActiveFormStrategy === "contentStrategy") {
6628      const timeOnContentCondition = (newContentEngagement.duration >= pfContentFormStrategy.show_after_time) && !isBypassEngagementEnabled(pfContentFormStrategy);
6629      const formNotYetShown = (window.pfFormsShown || []).indexOf(pfContentFormStrategy.form_id) == -1;
6630      if (timeOnContentCondition && formNotYetShown) {
6631        pfFormConditionsMet({
6632          formModal: pfContentFormModal,
6633          config: pfContentFormStrategy,
6634          toggleModal: true
6635        })
6636      }
6637    }
6638  };
6639
6640  if (promotersClickable) {
6641    const pfPromoter = document.querySelector("#sidebar");
6642    if (pfPromoter) {
6643      pfPromoter.style["z-index"] = 1000000;
6644    }
6645  }
6646
6647  
6648  document.addEventListener("pf_page_ping", (e) => {
6649    if (pfIsLandingPage && pfExperienceFormStrategy?.exclude_landing_page) {
6650      return;
6651    }
6652
6653    if (pfIsLandingPage && document.querySelector(".lookbook-overlay-content")) {
6654      return;
6655    }
6656
6657    const pagePingEvent = e.detail;
6658    pfUpdateEngagementTimes(pagePingEvent);
6659  });
6660
6661  
6662  window.addEventListener("message", (event) => {
6663    if (!(event.data?.lookbookExternalForm || event.data?.pfStandardForm)) {
6664      return;
6665    }
6666
6667    const visibleModal = Array.from(document.querySelectorAll("#pf-modal")).filter((m) => m.style.display !== "none")[0];
6668    const visibleForm = visibleModal?.querySelector("[data-pf-theme-block-ref='form']");
6669    const formId = visibleForm?.getAttribute("data-pf-theme-form-library-id");
6670
6671    if (formId) {
6672      const submittedForms = JSON.parse(localStorage.getItem("pfSubmittedForms") || "[]");
6673      const submittedForm = {
6674        experienceId: "230169",
6675        formId
6676      };
6677      const submittedFormNotLogged = submittedForms.findIndex((x) =>
6678        x.experienceId == submittedForm.experienceId &&
6679          x.formId == submittedForm.formId
6680      ) === -1;
6681      if (submittedFormNotLogged) {
6682        submittedForms.push(submittedForm);
6683        localStorage.setItem("pfSubmittedForms", JSON.stringify(submittedForms));
6684      }
6685      resumePdfActions(visibleModal).then(() => {
6686        window.resetForm(visibleModal);
6687      })
6688    }
6689  });
6690
6691  
6692  window.addEventListener("DOMContentLoaded", () => {
6693    if (pfIsLandingPage && pfExperienceFormStrategy?.exclude_landing_page) {
6694      return;
6695    }
6696
6697    const currentSession = JSON.parse(localStorage.getItem("pfCurrentSession") || "{}");
6698    if (
6699      currentSession.experienceId == "230169" ||
6700      (pfExperienceFormStrategy && pfExperienceFormStrategy.time_on_experience === 0) ||
6701      (pfContentFormStrategy && pfContentFormStrategy.show_after_time === 0)
6702    ) {
6703      pfUpdateEngagementTimes({ interval: 0 });
6704    }
6705  });
6706</script>
6706
6707
6708
6709
6710
6711
6712    
6712<script>
6713  (function() {
6714    document.addEventListener('alpine:init', () => {
6715      Alpine.directive('intersect', Alpine.skipDuringClone((el, { value, expression, modifiers }, { evaluateLater, cleanup }) => {
6716        let evaluate = evaluateLater(expression)
6717
6718        let options = {
6719            rootMargin: getRootMargin(modifiers),
6720            threshold: getThreshold(modifiers),
6721        }
6722
6723        let observer = new IntersectionObserver(entries => {
6724            entries.forEach(entry => {
6725                // Ignore entry if intersecting in leave mode, or not intersecting in enter mode
6726                if (entry.isIntersecting === (value === 'leave')) return
6727
6728                evaluate()
6729
6730                modifiers.includes('once') && observer.disconnect()
6731            })
6732        }, options)
6733
6734        observer.observe(el)
6735
6736        cleanup(() => {
6737            observer.disconnect()
6738        })
6739      }));
6740    });
6741
6742    function getThreshold(modifiers) {
6743        if (modifiers.includes('full')) return 0.99
6744        if (modifiers.includes('half')) return 0.5
6745        if (! modifiers.includes('threshold')) return 0
6746    
6747        let threshold = modifiers[modifiers.indexOf('threshold') + 1]
6748    
6749        if (threshold === '100') return 1
6750        if (threshold === '0') return 0
6751    
6752        return Number(`.${threshold}`)
6753    }
6754
6755    function getLengthValue(rawValue) {
6756        // Supported: -10px, -20 (implied px), 30 (implied px), 40px, 50%
6757      let match = rawValue.match(/^(-?[0-9]+)(px|%)?$/)
6758      return match ? match[1] + (match[2] || 'px') : undefined
6759    }
6760
6761    function getRootMargin(modifiers) {
6762        const key = 'margin'
6763        const fallback = '0px 0px 0px 0px'
6764        const index = modifiers.indexOf(key)
6765    
6766        // If the modifier isn't present, use the default.
6767        if (index === -1) return fallback
6768    
6769        // Grab the 4 subsequent length values after it: x-intersect.margin.300px.0.50%.0
6770        let values = []
6771            for (let i = 1; i < 5; i++) {
6772                values.push(getLengthValue(modifiers[index + i] || ''))
6773            }
6774    
6775        // Filter out undefined values (not a valid length)
6776        values = values.filter((v) => v !== undefined)
6777    
6778        return values.length ? values.join(' ').trim() : fallback
6779    }
6780  })();
6781</script>
vendor: 1 bytes, line 6781
6781
6782<script type="text/javascript">
6783  _linkedin_partner_id = "9909708";
6784  window._linkedin_data_partner_ids = window._linkedin_data_partner_ids || [];
6785  window._linkedin_data_partner_ids.push(_linkedin_partner_id);
6786
6787  (function(l) {
6788    if (!l){window.lintrk = function(a,b){window.lintrk.q.push([a,b])}; window.lintrk.q=[]}
6789    var s = document.getElementsByTagName("script")[0];
6790    var b = document.createElement("script");
6791    b.type = "text/javascript"; b.async = true;
6792    b.src = "https://snap.licdn.com/li.lms-analytics/insight.min.js";
6793    s.parentNode.insertBefore(b, s);
6794  })(window.lintrk);
6795
6796
6797    const pfCTAButtons = document.querySelectorAll('.pf-cta');
6798    
6799    pfCTAButtons.forEach(function (button) {
6800      button.addEventListener('click', function () {
6801        if (window.lintrk) {
6802          window.lintrk('track');
6803          console.log('ctaClickedLI')
6804        }
6805      });
6806    });
6807    const pfCTAFormButtons = document.querySelectorAll('button[class*="cta-button"]');
6808    
6809    pfCTAFormButtons.forEach(function (button) {
6810      button.addEventListener('click', function () {
6811        if (window.lintrk) {
6812          window.lintrk('track');
6813          console.log('ctaFormClickedLI')
6814        }
6815      });
6816    });
6817    const contentCardLink = document.querySelectorAll('.pf-content-card-link');
6818    
6819    contentCardLink.forEach(function (button) {
6820      button.addEventListener('click', function () {
6821        if (window.lintrk) {
6822          window.lintrk('track');
6823          console.log('contentClickedLI');
6824        }
6825      });
6826    });
6827  
6828    const customABMContentCardLink = document.querySelectorAll('section[data-pf-theme-artefact-filename="2025-content-list"] a');
6829    
6830    customABMContentCardLink.forEach(function (button) {
6831      button.addEventListener('click', function () {
6832        if (window.lintrk) {
6833          window.lintrk('track');
6834          console.log('abmContentListItemClickedLI');
6835        }
6836      });
6837    });
6838  
6839    const contentListCardLink = document.querySelectorAll('.pf-content-list a');
6840      
6841    contentListCardLink.forEach(function (button) {
6842      button.addEventListener('click', function () {
6843        if (window.lintrk) {
6844          window.lintrk('track');
6845          console.log('contentListItemClickedLI');
6846        }
6847      });
6848    });
6849</script>
6849
6850
6851    
6851<script type="text/javascript">
6852    function cookieFirstConsentChange(e) {
6853        // if(document.location.href.indexOf('nurturenow.pathfactory.com/aichat/')>0){
6854        // }
6855        console.log('On Cookiefirst Consent');
6856        if (pfConsentStatus() != true && (e.detail.functional || e.detail.performance)) {
6857            try {
6858                if (window["cfTracker"]) {
6859                    // Tracker for CF
6860                    window["cfTracker"] && window["cfTracker"]("setConsentSettings", { accepted: true });
6861                } else {
6862                    // Tracker for Other experiences
6863                    pfCookieResponse(true);
6864                }
6865                if (!e.detail.performance) {
6866                    console.log('On Cookiebot Accept > 1');
6867                    pfCookieTrack([1]);
6868                } else if (e.detail.performance) {
6869                    console.log('On Cookiebot Accept > 2');
6870                    pfCookieTrack([2]);
6871                }
6872            } catch (e) {
6873                console.log('On Cookiebot Accept > If Try');
6874            }
6875        }
6876        else if (pfConsentStatus() == true && (!e.detail.functional && !e.detail.statistics)) {
6877            try {
6878                if (window["cfTracker"]) {
6879                    // Tracker for CF
6880                    window["cfTracker"] && window["cfTracker"]("setConsentSettings", { accepted: false });
6881                } else {
6882                    // Tracker for Other experiences
6883                    pfCookieResponse(false);
6884                }
6885                console.log('On Cookiebot Accept > -1');
6886                pfCookieTrack([-1]);
6887            } catch (e) {
6888                console.log('On Cookiebot Accept > Else If Try');
6889            }
6890        }
6891    }
6892    
6893pfOnJukeboxLoad.then(function () {
6894window.addEventListener("cf_consent_loaded", function(event) {
6895    console.log('cf_consent_loaded event listen', event);
6896  var previouslySavedConsent = event.detail;
6897  
6898  if(!previouslySavedConsent) {
6899    // consent hasn't been given yet
6900    console.log('cf_consent_loaded not given yet');
6901  } else {
6902      console.log(event);
6903    cookieFirstConsentChange(event);
6904  }
6905});
6906window.addEventListener("cf_consent", function(event) {
6907    console.log('cf_consent event listen', event);
6908  cookieFirstConsentChange(event);
6909});
6910window.addEventListener('message', function(event) {
6911console.log('message event listen', event);
6912    if (event.data && event.data.type === 'pf-cookie-change') {
6913        console.log('Received pf-cookie-change message:', event.data);
6914                const parentOptIn = new CustomEvent('cf_consent', {
6915                detail:{
6916                functional: event.data.functional,
6917                performance: event.data.performance
6918                }
6919        });
6920        dispatchEvent(parentOptIn);
6921       document.location.reload();
6922    }
6923});
6924});
6925    // Add an event listener to capture opt-in from parent frame
6926    /*window.addEventListener('message', function(event) {
6927        if (event.origin === "https://www.pathfactory.com") {
6928            // Ensure the message type is 'cookie-opt-in'
6929            if (event.data && event.data.type === 'pf-cookie-change') {
6930                console.log('Cookie Opt-In message received:', event.data);
6931                Cookiebot.hide()
6932                if(pfConsentStatus() != true && Cookiebot.consent.preferences) {
6933                    pfCookieResponse(true);
6934                }
6935                else if(pfConsentStatus() == true && !Cookiebot.consent.preferences){
6936                    pfCookieResponse(false);
6937                }
6938            }
6939        }
6940    }, false);
6941    */
6942</script>
6942
6943    
6943<script>
6944  function appendScriptTag(link) {
6945    var sc = document.createElement("script");
6946    sc.setAttribute("src", link);
6947    sc.setAttribute("defer", "");
6948    sc.setAttribute("type", "text/javascript");
6949    var elementToAppendTo = document.getElementsByTagName('html')[0] || document.
6950    getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0];
6951    elementToAppendTo.appendChild(sc);
6952  }
6953  
6954  var currentWebsiteUrl = encodeURIComponent(window.location.href);
6955  var serverUrl = "https://tracking.intentsify.io";
6956  var link = serverUrl + '/page-tracking/intentsify-pathfactory/' + currentWebsiteUrl;
6957  
6958  setTimeout(function(){
6959    appendScriptTag(link);
6960  }, 1000);
6961</script>
6961
6962    
6963    
6964  </body>
6965</html>
6966
6967
6968<script>
6969  /*
6970    This script removes the promoters if content is loaded inside iframe but also checks it is not overlay and preview.
6971    This script also removes header if TE landing page is added as content and loaded inside iframe but also checks it is not overlay and preview.
6972  */
6973  const parentWindow = window.parent;
6974  const insideContentPageIframe = parentWindow && parentWindow.document.querySelector("iframe.pf-content-page-iframe") && window.self !== window.top;
6975  if(insideContentPageIframe) {
6976    // hide promiters
6977    const contentDiv = document.querySelector('.pf-content-wrapper');
6978    if(contentDiv) {
6979      const htmlElement = document.querySelector('html');
6980      htmlElement.style.height = "100%";
6981      document.body.style.height = "100%";
6982      document.body.innerHTML = contentDiv.innerHTML;
6983    }
6984    const iframeHideDivs = document.querySelector(".iframe-hide");
6985    iframeHideDivs && iframeHideDivs.remove();
6986  }
6987</script>
vendor: 1 bytes, line 6987
6987

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.