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