1<!DOCTYPE html><html lang="en-US" prefix="og: https://ogp.me/ns#"><head ><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1" /><link rel="alternate" hreflang="en" href="https://clpvd.org/search/" /><link rel="alternate" hreflang="es" href="https://clpvd.org/es/search/" /><title>Search - Community Libraries of Providence</title><meta name="description" content="Search"/><meta name="robots" content="index, follow, max-snippet:-1, max-video-preview:-1, max-image-preview:large"/><link rel="canonical" href="https://clpvd.org/search/" /><meta property="og:locale" content="en_US" /><meta property="og:type" content="article" /><meta property="og:title" content="Search - Community Libraries of Providence" /><meta property="og:description" content="Search" /><meta property="og:url" content="https://clpvd.org/search/" /><meta property="og:site_name" content="Community Libraries of Providence" /><meta property="og:updated_time" content="2023-08-23T11:11:34-04:00" /><meta property="article:published_time" content="2023-01-03T17:02:32-05:00" /><meta property="article:modified_time" content="2023-08-23T11:11:34-04:00" /><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:title" content="Search - Community Libraries of Providence" /><meta name="twitter:description" content="Search" /><meta name="twitter:label1" content="Time to read" /><meta name="twitter:data1" content="Less than a minute" />
1<script type="application/ld+json" class="rank-math-schema">{"@context":"https://schema.org","@graph":[{"@type":["Person","Organization"],"@id":"https://clpvd.org/#person","name":"Community Libraries of Providence"},{"@type":"WebSite","@id":"https://clpvd.org/#website","url":"https://clpvd.org","name":"Community Libraries of Providence","publisher":{"@id":"https://clpvd.org/#person"},"inLanguage":"en-US"},{"@type":"BreadcrumbList","@id":"https://clpvd.org/search/#breadcrumb","itemListElement":[{"@type":"ListItem","position":"1","item":{"@id":"https://clpvd.org","name":"Home"}},{"@type":"ListItem","position":"2","item":{"@id":"https://clpvd.org/search/","name":"Search"}}]},{"@type":"WebPage","@id":"https://clpvd.org/search/#webpage","url":"https://clpvd.org/search/","name":"Search - Community Libraries of Providence","datePublished":"2023-01-03T17:02:32-05:00","dateModified":"2023-08-23T11:11:34-04:00","isPartOf":{"@id":"https://clpvd.org/#website"},"inLanguage":"en-US","breadcrumb":{"@id":"https://clpvd.org/search/#breadcrumb"}},{"@type":"Person","@id":"https://clpvd.org/author/vwm-web-dev/","name":"VWM Web Dev","url":"https://clpvd.org/author/vwm-web-dev/","image":{"@type":"ImageObject","@id":"https://secure.gravatar.com/avatar/0b54900b91a783680163c1fdb585dd3e0c0ee9fdfcef02b829706eccd80aa6c5?s=96&d=mm&r=g","url":"https://secure.gravatar.com/avatar/0b54900b91a783680163c1fdb585dd3e0c0ee9fdfcef02b829706eccd80aa6c5?s=96&d=mm&r=g","caption":"VWM Web Dev","inLanguage":"en-US"},"sameAs":["https://clpvd.org"]},{"@type":"Article","headline":"Search - Community Libraries of Providence","datePublished":"2023-01-03T17:02:32-05:00","dateModified":"2023-08-23T11:11:34-04:00","author":{"@id":"https://clpvd.org/author/vwm-web-dev/","name":"VWM Web Dev"},"publisher":{"@id":"https://clpvd.org/#person"},"description":"Search","name":"Search - Community Libraries of Providence","@id":"https://clpvd.org/search/#richSnippet","isPartOf":{"@id":"https://clpvd.org/search/#webpage"},"inLanguage":"en-US","mainEntityOfPage":{"@id":"https://clpvd.org/search/#webpage"}}]}</script>
1 <link rel='dns-prefetch' href='//use.fontawesome.com' /><link rel='dns-prefetch' href='//cdnjs.cloudflare.com' /><link rel='dns-prefetch' href='//p.typekit.net' /><link rel='dns-prefetch' href='//use.typekit.net' /><link rel='dns-prefetch' href='//www.googletagmanager.com' /><link rel='dns-prefetch' href='//analytics.google.com' /><link rel="alternate" type="application/rss+xml" title="Community Libraries of Providence » Feed" href="https://clpvd.org/feed/" /><link rel="alternate" type="application/rss+xml" title="Community Libraries of Providence » Comments Feed" href="https://clpvd.org/comments/feed/" /><link rel="alternate" type="text/calendar" title="Community Libraries of Providence » iCal Feed" href="https://clpvd.org/events/?ical=1" /><link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://clpvd.org/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fclpvd.org%2Fsearch%2F" /><link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://clpvd.org/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fclpvd.org%2Fsearch%2F&format=xml" /><style id="wp-img-auto-sizes-contain-inline-css">img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px} 2/*# sourceURL=wp-img-auto-sizes-contain-inline-css */</style><link data-optimized="1" rel='stylesheet' id='tribe-events-pro-mini-calendar-block-styles-css' href='https://clpvd.org/wp-content/litespeed/css/f4f4403d42687da093eb24958d84c381.css?ver=c7d4b' media='all' /><link data-optimized="1" rel='stylesheet' id='sbi-tokens-local-css' href='https://clpvd.org/wp-content/litespeed/css/310a00bd269e6e5822e8f6c5d1acacfe.css?ver=df111' media='all' /><link data-optimized="1" rel='stylesheet' id='sbi_styles-css' href='https://clpvd.org/wp-content/litespeed/css/2d45b5f2a46e9077a774f921f6e26538.css?ver=69017' media='all' /><link data-optimized="1" rel='stylesheet' id='focus-pro-css' href='https://clpvd.org/wp-content/litespeed/css/4c7a7a8fba75683145806f8ea3f06149.css?ver=4d712' media='all' /><style id="wp-block-library-inline-css">:root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}:root{--wp--preset--font-size--normal:16px;
2--wp--preset--font-size--huge:42px}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}:root .has-text-align-center{text-align:center}:root .has-text-align-left{text-align:left}:root .has-text-align-right{text-align:right}.has-fit-text{white-space:nowrap!important}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{word-wrap:normal!important;border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-break:normal!important}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style^=border-color],[style*=";border-color"],[style*="; border-color"]){border-style:solid}html :where([style^=border-top-color],[style*=";border-top-color"],[style*="; border-top-color"]){border-top-style:solid}html :where([style^=border-right-color],[style*=";border-right-color"],[style*="; border-right-color"]){border-right-style:solid}html :where([style^=border-bottom-color],[style*=";border-bottom-color"],[style*="; border-bottom-color"]){border-bottom-style:solid}html :where([style^=border-left-color],[style*=";border-left-color"],[style*="; border-left-color"]){border-left-style:solid}html :where([style^=border-width],[style*=";border-width"],[style*="; border-width"]){border-style:solid}html :where([style^=border-top-width],[style*=";border-top-width"],[style*="; border-top-width"]){border-top-style:solid}html :where([style^=border-right-width],[style*=";border-right-width"],[style*="; border-right-width"]){border-right-style:solid}html :where([style^=border-bottom-width],[style*=";border-bottom-width"],[style*="; border-bottom-width"]){border-bottom-style:solid}html :where([style^=border-left-width],[style*=";border-left-width"],[style*="; border-left-width"]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}} 3 4/*# sourceURL=/wp-includes/css/dist/block-library/common.min.css */</style><style id="classic-theme-styles-inline-css">/*! This file is auto-generated */ 5.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none} 6/*# sourceURL=/wp-includes/css/classic-themes.min.css */</style><style id="font-awesome-svg-styles-default-inline-css">.svg-inline--fa { 7 display: inline-block; 8 height: 1em; 9 overflow: visible; 10 vertical-align: -.125em; 11} 12/*# sourceURL=font-awesome-svg-styles-default-inline-css */</style><link data-optimized="1" rel='stylesheet' id='font-awesome-svg-styles-css' href='https://clpvd.org/wp-content/litespeed/css/a93591626e8268094cad917e885a7473.css?ver=a7473' media='all' /><style id="font-awesome-svg-styles-inline-css">.wp-block-font-awesome-icon svg::before, 13 .wp-rich-text-font-awesome-icon svg::before {content: unset;} 14/*# sourceURL=font-awesome-svg-styles-inline-css */</style><link rel='stylesheet' id='font-awesome-official-css' href='https://use.fontawesome.com/releases/v6.7.2/css/all.css' media='all' integrity="sha384-nRgPTkuX86pH8yjPJUAFuASXQSSl2/bBUiNV47vSYpKFxHJhbcrGnmlYpYJMeD7a" crossorigin="anonymous" /><link rel='stylesheet' id='font-awesome-official-v4shim-css' href='https://use.fontawesome.com/releases/v6.7.2/css/v4-shims.css' media='all' integrity="sha384-npPMK6zwqNmU3qyCCxEcWJkLBNYxEFM1nGgSoAWuCCXqVVz0cvwKEMfyTNkOxM2N" crossorigin="anonymous" /><style id="global-styles-inline-css">:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgb(252,185,
140) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp: 6px 6px 0px rgb(0, 0, 0);}.wp-block-button{--wp--preset--dimension--25: 25%;--wp--preset--dimension--50: 50%;--wp--preset--dimension--75: 75%;--wp--preset--dimension--100: 100%;}:where(body) { margin: 0; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}:root :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;font-style: inherit;font-weight: inherit;letter-spacing: inherit;line-height: inherit;padding-top: calc(0.667em + 2px);padding-right: calc(1.333em + 2px);padding-bottom: calc(0.667em + 2px);padding-left: calc(1.333em + 2px);text-decoration: none;text-transform: inherit;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}
14.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;} 15/*# sourceURL=global-styles-inline-css */</style><style id="fl-builder-layout-3808-inline-css">/** 16 * Base CSS used by the builder's layout, including rows 17 * and columns. Any module specific global CSS should be 18 * included in fl-builder-layout-modules.css. 19 */ 20 21/* Grid 22------------------------------------------------------ */ 23 24.fl-builder-content *, 25.fl-builder-content *:before, 26.fl-builder-content *:after { 27 -webkit-box-sizing: border-box; 28 -moz-box-sizing: border-box; 29 box-sizing: border-box; 30} 31.fl-row:before, 32.fl-row:after, 33.fl-row-content:before, 34.fl-row-content:after, 35.fl-col-group:before, 36.fl-col-group:after, 37.fl-col:before, 38.fl-col:after, 39.fl-module:not([data-accepts], .fl-ds-block):before, 40.fl-module:not([data-accepts], .fl-ds-block):after, 41.fl-module-content:before, 42.fl-module-content:after { 43 display: table; 44 content: " "; 45} 46.fl-row:after, 47.fl-row-content:after, 48.fl-col-group:after, 49.fl-col:after, 50.fl-module:not([data-accepts], .fl-ds-block):after, 51.fl-module-content:after { 52 clear: both; 53} 54.fl-clear { 55 clear: both; 56} 57 58/* Rows 59------------------------------------------------------ */ 60 61.fl-row, 62.fl-row-content { 63 margin-left: auto; 64 margin-right: auto; 65 min-width: 0; 66} 67.fl-row-content-wrap { 68 position: relative; 69} 70 71/* Photo Bg */ 72.fl-builder-mobile .fl-row-bg-photo .fl-row-content-wrap { 73 background-attachment: scroll; 74} 75 76/* Video and Embed Code Bg */ 77.fl-row-bg-video, 78.fl-row-bg-video .fl-row-content, 79.fl-row-bg-embed, 80.fl-row-bg-embed .fl-row-content { 81 position: relative; 82} 83 84.fl-row-bg-video .fl-bg-video, 85.fl-row-bg-embed .fl-bg-embed-code { 86 bottom: 0; 87 left: 0; 88 overflow: hidden; 89 position: absolute; 90 right: 0; 91 top: 0; 92} 93 94.fl-row-bg-video .fl-bg-video video, 95.fl-row-bg-embed .fl-bg-embed-code video { 96 bottom: 0; 97 left: 0px; 98 max-width: none; 99 position: absolute; 100 right: 0; 101 top: 0px; 102} 103.fl-row-bg-video .fl-bg-video video { 104 min-width: 100%; 105 min-height: 100%; 106 width: auto; 107 height: auto; 108} 109.fl-row-bg-video .fl-bg-video iframe, 110.fl-row-bg-embed .fl-bg-embed-code iframe { 111 pointer-events: none; 112 width: 100vw; 113 height: 56.25vw; /* Given a 16:9 aspect ratio, 9/16*100 = 56.25 */ 114 max-width: none; 115 min-height: 100vh; 116 min-width: 177.77vh; /* Given a 16:9 aspect ratio, 16/9*100 = 177.77 */ 117 position: absolute; 118 top: 50%; 119 left: 50%; 120 -ms-transform: translate(-50%, -50%); /* IE 9 */ 121 -webkit-transform: translate(-50%, -50%); /* Chrome, Safari, Opera */ 122 transform: translate(-50%, -50%); 123} 124.fl-bg-video-fallback { 125 background-position: 50% 50%; 126 background-repeat: no-repeat; 127 background-size: cover; 128 bottom: 0px; 129 left: 0px; 130 position: absolute; 131 right: 0px; 132 top: 0px; 133} 134 135/* Slideshow Bg */ 136.fl-row-bg-slideshow, 137.fl-row-bg-slideshow .fl-row-content { 138 position: relative; 139} 140.fl-row .fl-bg-slideshow { 141 bottom: 0; 142 left: 0; 143 overflow: hidden; 144 position: absolute; 145 right: 0; 146 top: 0; 147 z-index: 0; 148}
149.fl-builder-edit .fl-row .fl-bg-slideshow * { 150 bottom: 0; 151 height: auto !important; 152 left: 0; 153 position: absolute !important; 154 right: 0; 155 top: 0; 156} 157 158/* Row Bg Overlay */ 159.fl-row-bg-overlay .fl-row-content-wrap:after { 160 border-radius: inherit; 161 content: ''; 162 display: block; 163 position: absolute; 164 top: 0; 165 right: 0; 166 bottom: 0; 167 left: 0; 168 z-index: 0; 169} 170.fl-row-bg-overlay .fl-row-content { 171 position: relative; 172 z-index: 1; 173} 174 175/* Full Height Rows */ 176.fl-row-default-height .fl-row-content-wrap, 177.fl-row-custom-height .fl-row-content-wrap { 178 display: -webkit-box; 179 display: -webkit-flex; 180 display: -ms-flexbox; 181 display: flex; 182 min-height: 100vh; 183} 184.fl-row-overlap-top .fl-row-content-wrap { 185 display: -webkit-inline-box; 186 display: -webkit-inline-flex; 187 display: -moz-inline-box; 188 display: -ms-inline-flexbox; 189 display: inline-flex; 190 width: 100%; 191} 192.fl-row-default-height .fl-row-content-wrap, 193.fl-row-custom-height .fl-row-content-wrap { 194 min-height: 0; 195} 196 197.fl-row-default-height .fl-row-content, 198.fl-row-full-height .fl-row-content, 199.fl-row-custom-height .fl-row-content { 200 -webkit-box-flex: 1 1 auto; 201 -moz-box-flex: 1 1 auto; 202 -webkit-flex: 1 1 auto; 203 -ms-flex: 1 1 auto; 204 flex: 1 1 auto; 205} 206.fl-row-default-height .fl-row-full-width.fl-row-content, 207.fl-row-full-height .fl-row-full-width.fl-row-content, 208.fl-row-custom-height .fl-row-full-width.fl-row-content { 209 max-width: 100%; 210 width: 100%; 211} 212 213/* Full height align center */ 214.fl-row-default-height.fl-row-align-center .fl-row-content-wrap, 215.fl-row-full-height.fl-row-align-center .fl-row-content-wrap, 216.fl-row-custom-height.fl-row-align-center .fl-row-content-wrap { 217 -webkit-align-items: center; 218 -webkit-box-align: center; 219 -webkit-box-pack: center; 220 -webkit-justify-content: center; 221 -ms-flex-align: center; 222 -ms-flex-pack: center; 223 justify-content: center; 224 align-items: center; 225} 226 227/* Full height align bottom */ 228.fl-row-default-height.fl-row-align-bottom .fl-row-content-wrap, 229.fl-row-full-height.fl-row-align-bottom .fl-row-content-wrap, 230.fl-row-custom-height.fl-row-align-bottom .fl-row-content-wrap { 231 -webkit-align-items: flex-end; 232 -webkit-justify-content: flex-end; 233 -webkit-box-align: end; 234 -webkit-box-pack: end; 235 -ms-flex-align: end; 236 -ms-flex-pack: end; 237 justify-content: flex-end; 238 align-items: flex-end; 239} 240 241/* Column Groups 242------------------------------------------------------ */ 243.fl-col-group-equal-height { 244 display: flex; 245 flex-wrap: wrap; 246 width: 100%; 247} 248.fl-col-group-equal-height.fl-col-group-has-child-loading { 249 flex-wrap: nowrap; 250} 251.fl-col-group-equal-height .fl-col, 252.fl-col-group-equal-height .fl-col-content { 253 display: flex; 254 flex: 1 1 auto; 255} 256.fl-col-group-equal-height .fl-col-content { 257 flex-direction: column; 258 flex-shrink: 1; 259 min-width: 1px; 260 max-width: 100%; 261 width: 100%; 262} 263.fl-col-group-equal-height:before, 264.fl-col-group-equal-height .fl-col:before, 265.fl-col-group-equal-height .fl-col-content:before, 266.fl-col-group-equal-height:after, 267.fl-col-group-equal-height .fl-col:after, 268.fl-col-group-equal-height .fl-col-content:after{ 269 content: none; 270} 271 272/* Equal height align top */ 273.fl-col-group-nested.fl-col-group-equal-height.fl-col-group-align-top .fl-col-content, 274.fl-col-group-equal-height.fl-col-group-align-top .fl-col-content { 275 justify-content: flex-start; 276} 277 278/* Equal height align center */ 279.fl-col-group-nested.fl-col-group-equal-height.fl-col-group-align-center .fl-col-content, 280.fl-col-group-equal-height.fl-col-group-align-center .fl-col-content { 281 justify-content: center; 282} 283 284/* Equal height align bottom */ 285.fl-col-group-nested.fl-col-group-equal-height.fl-col-group-align-bottom .fl-col-content, 286.fl-col-group-equal-height.fl-col-group-align-bottom .fl-col-content { 287 justify-content: flex-end; 288} 289 290.fl-col-group-equal-height.fl-col-group-align-center .fl-col-group { 291 width: 100%; 292} 293 294/* Columns 295------------------------------------------------------ */ 296 297.fl-col { 298 float: left; 299 min-height: 1px; 300} 301 302/* Column Bg Overlay */ 303.fl-col-bg-overlay .fl-col-content { 304 position: relative; 305} 306.fl-col-bg-overlay .fl-col-content:after { 307 border-radius: inherit; 308 content: ''; 309 display: block; 310 position: absolute; 311 top: 0; 312 right: 0; 313 bottom: 0; 314 left: 0; 315 z-index: 0; 316} 317.fl-col-bg-overlay .fl-module { 318 position: relative; 319 z-index: 2; 320} 321 322/* Templates 323------------------------------------------------------ */ 324
325.single:not(.woocommerce).single-fl-builder-template .fl-content { 326 width: 100%; 327} 328 329/* Shapes & Patterns 330------------------------------------------------------- */ 331.fl-builder-layer { 332 position: absolute; 333 top:0; 334 left:0; 335 right: 0; 336 bottom: 0; 337 z-index: 0; 338 pointer-events: none; 339 overflow: hidden; 340} 341.fl-builder-shape-layer { 342 z-index: 0; 343} 344.fl-builder-shape-layer.fl-builder-bottom-edge-layer { 345 z-index: 1; 346} 347.fl-row-bg-overlay .fl-builder-shape-layer { 348 z-index: 1; 349} 350.fl-row-bg-overlay .fl-builder-shape-layer.fl-builder-bottom-edge-layer { 351 z-index: 2; 352} 353.fl-row-has-layers .fl-row-content { 354 z-index: 1; 355} 356.fl-row-bg-overlay .fl-row-content { 357 z-index: 2; 358} 359 360.fl-builder-layer > * { 361 display: block; 362 position: absolute; 363 top:0; 364 left:0; 365 width: 100%; 366} 367.fl-builder-layer + .fl-row-content { 368 position: relative; 369} 370.fl-builder-layer .fl-shape { 371 fill: #aaa; 372 stroke: none; 373 stroke-width: 0; 374 width:100%; 375} 376/** 377Fix ipad parallax issue on safari 378https://core.trac.wordpress.org/ticket/48802 379https://core.trac.wordpress.org/ticket/49285 380https://github.com/WordPress/gutenberg/issues/17718 381*/ 382@supports (-webkit-touch-callout: inherit) { 383 .fl-row.fl-row-bg-parallax .fl-row-content-wrap, 384 .fl-row.fl-row-bg-fixed .fl-row-content-wrap { 385 background-position: center !important; 386 background-attachment: scroll !important; 387 } 388} 389 390@supports (-webkit-touch-callout: none) { 391 .fl-row.fl-row-bg-fixed .fl-row-content-wrap { 392 background-position: center !important; 393 background-attachment: scroll !important; 394 } 395} 396/** 397 * Base CSS used by all (or many) modules. This file should 398 * not contain any generic layout CSS that doesn't apply to 399 * modules. That belongs in fl-builder-layout.css. 400 */ 401 402/* Utilities 403------------------------------------------------------ */ 404 405.fl-clearfix:before, 406.fl-clearfix:after { 407 display: table; 408 content: " "; 409} 410.fl-clearfix:after { 411 clear: both; 412} 413.sr-only { 414 position: absolute; 415 width: 1px; 416 height: 1px; 417 padding: 0; 418 overflow: hidden; 419 clip: rect(0,0,0,0); 420 white-space: nowrap; 421 border: 0; 422} 423 424/* Buttons 425------------------------------------------------------ */ 426 427.fl-builder-content .fl-button:is(a, button), 428.fl-builder-content a.fl-button:visited { 429 border-radius: 4px; 430 display: inline-block; 431 font-size: 16px; 432 font-weight: normal; 433 line-height: 18px; 434 padding: 12px 24px; 435 text-decoration: none; 436 text-shadow: none; 437 cursor: pointer; 438} 439.fl-builder-content .fl-button:hover { 440 text-decoration: none; 441} 442.fl-builder-content .fl-button:active { 443 position: relative; 444 top: 1px; 445} 446.fl-builder-content .fl-button-width-full .fl-button { 447 width: 100%; 448 display: block; 449 text-align: center; 450} 451.fl-builder-content .fl-button-width-custom .fl-button { 452 display: inline-block; 453 text-align: center; 454 max-width: 100%; 455} 456.fl-builder-content .fl-button-left { 457 text-align: left; 458} 459.fl-builder-content .fl-button-center { 460 text-align: center; 461} 462.fl-builder-content .fl-button-right { 463 text-align: right; 464} 465.fl-builder-content .fl-button i { 466 font-size: 1.3em; 467 height: auto; 468 margin-right:8px; 469 vertical-align: middle; 470 width: auto; 471} 472.fl-builder-content .fl-button i.fl-button-icon-after { 473 margin-left: 8px; 474 margin-right: 0; 475} 476.fl-builder-content .fl-button-has-icon .fl-button-text { 477 vertical-align: middle; 478} 479 480/* Icons 481------------------------------------------------------ */ 482 483.fl-icon-wrap { 484 display: inline-block; 485} 486.fl-icon { 487 display: table-cell; 488 vertical-align: middle; 489} 490.fl-icon a { 491 text-decoration: none; 492} 493.fl-icon i { 494 float: right; 495 height: auto; 496 width: auto; 497} 498.fl-icon i:before { 499 border: none !important; 500 height: auto; 501 width: auto; 502} 503.fl-icon-text { 504 display: table-cell; 505 text-align: left; 506 padding-left: 15px; 507 vertical-align: middle; 508} 509.fl-icon-text-empty {
510 display: none; 511} 512.fl-icon-text *:last-child { 513 margin: 0 !important; 514 padding: 0 !important; 515} 516.fl-icon-text a { 517 text-decoration: none; 518} 519.fl-icon-text span { 520 display: block; 521} 522.fl-icon-text span.mce-edit-focus { 523 min-width: 1px; 524} 525 526/* Photos 527------------------------------------------------------ */ 528 529.fl-module img { 530 max-width: 100%; 531} 532.fl-photo { 533 line-height: 0; 534 position: relative; 535} 536.fl-photo-align-left { 537 text-align: left; 538} 539.fl-photo-align-center { 540 text-align: center; 541} 542.fl-photo-align-right { 543 text-align: right; 544} 545.fl-photo-content { 546 display: inline-block; 547 line-height: 0; 548 position: relative; 549 max-width: 100%; 550} 551.fl-photo-img-svg { 552 width: 100%; 553} 554.fl-photo-content img { 555 display: inline; 556 height: auto; 557 max-width: 100%; 558} 559.fl-photo-crop-circle img { 560 -webkit-border-radius: 100%; 561 -moz-border-radius: 100%; 562 border-radius: 100%; 563} 564.fl-photo-caption { 565 font-size: 13px; 566 line-height: 18px; 567 overflow: hidden; 568 text-overflow: ellipsis; 569} 570.fl-photo-caption-below { 571 padding-bottom: 20px; 572 padding-top: 10px; 573} 574.fl-photo-caption-hover { 575 background: rgba(0,0,0,0.7); 576 bottom: 0; 577 color: #fff; 578 left: 0; 579 opacity: 0; 580 filter: alpha(opacity = 0); 581 padding: 10px 15px; 582 position: absolute; 583 right: 0; 584 -webkit-transition:opacity 0.3s ease-in; 585 -moz-transition:opacity 0.3s ease-in; 586 transition:opacity 0.3s ease-in; 587} 588.fl-photo-content:hover .fl-photo-caption-hover { 589 opacity: 100; 590 filter: alpha(opacity = 100); 591} 592 593/* Pagination 594------------------------------------------------------ */ 595 596.fl-builder-pagination, 597.fl-builder-pagination-load-more { 598 padding: 40px 0; 599} 600.fl-builder-pagination ul.page-numbers { 601 list-style: none; 602 margin: 0; 603 padding: 0; 604 text-align: center; 605} 606.fl-builder-pagination li {
607 display: inline-block; 608 list-style: none; 609 margin: 0; 610 padding: 0; 611} 612.fl-builder-pagination li a.page-numbers, 613.fl-builder-pagination li span.page-numbers { 614 border: 1px solid #e6e6e6; 615 display: inline-block; 616 padding: 5px 10px; 617 margin: 0 0 5px; 618} 619.fl-builder-pagination li a.page-numbers:hover, 620.fl-builder-pagination li span.current { 621 background: #f5f5f5; 622 text-decoration: none; 623} 624 625/* Slideshows 626------------------------------------------------------ */ 627 628.fl-slideshow, 629.fl-slideshow * { 630 -webkit-box-sizing: content-box; 631 -moz-box-sizing: content-box; 632 box-sizing: content-box; 633 634} 635.fl-slideshow .fl-slideshow-image img { 636 max-width: none !important; 637} 638.fl-slideshow-social { 639 line-height: 0 !important; 640} 641.fl-slideshow-social * { 642 margin: 0 !important; 643} 644 645/* Sliders 646------------------------------------------------------ */ 647 648.fl-builder-content .bx-wrapper .bx-viewport { 649 background: transparent; 650 border: none; 651 box-shadow: none; 652 left: 0; 653} 654 655/* Lightbox 656------------------------------------------------------ */ 657 658.mfp-wrap button.mfp-arrow, 659.mfp-wrap button.mfp-arrow:active, 660.mfp-wrap button.mfp-arrow:hover, 661.mfp-wrap button.mfp-arrow:focus { 662 background: transparent !important; 663 border: none !important; 664 outline: none; 665 position: absolute; 666 top: 50%; 667 box-shadow: none !important; 668} 669.mfp-wrap .mfp-close, 670.mfp-wrap .mfp-close:active, 671.mfp-wrap .mfp-close:hover, 672.mfp-wrap .mfp-close:focus { 673 background: transparent !important; 674 border: none !important; 675 outline: none; 676 position: absolute; 677 top: 0; 678 box-shadow: none !important; 679} 680.admin-bar .mfp-wrap .mfp-close, 681.admin-bar .mfp-wrap .mfp-close:active, 682.admin-bar .mfp-wrap .mfp-close:hover, 683.admin-bar .mfp-wrap .mfp-close:focus { 684 top: 32px!important; 685} 686img.mfp-img { 687 padding: 0; 688} 689.mfp-counter { 690 display: none; 691} 692 693.mfp-wrap .mfp-preloader.fa { 694 font-size: 30px; 695} 696 697/* Form Fields 698------------------------------------------------------ */ 699 700.fl-form-field { 701 margin-bottom: 15px; 702} 703.fl-form-field input.fl-form-error { 704 border-color: #DD6420; 705} 706.fl-form-error-message { 707 clear: both; 708 color: #DD6420; 709 display: none; 710 padding-top: 8px; 711 font-size: 12px; 712 font-weight: lighter; 713} 714.fl-form-button-disabled { 715 opacity: 0.5; 716} 717 718/* Animations 719------------------------------------------------------ */ 720 721.fl-animation { 722 opacity: 0; 723} 724body.fl-no-js .fl-animation { 725 opacity: 1; 726} 727.fl-builder-preview .fl-animation, 728.fl-builder-edit .fl-animation, 729.fl-animated { 730 opacity: 1; 731} 732.fl-animated { 733 animation-fill-mode: both; 734} 735 736/* Button Icon Animation */ 737.fl-button.fl-button-icon-animation i { 738 width: 0 !important; 739 opacity: 0; 740 transition: all 0.2s ease-out; 741} 742.fl-button.fl-button-icon-animation:hover i { 743 opacity: 1 !important; 744} 745.fl-button.fl-button-icon-animation i.fl-button-icon-after { 746 margin-left: 0px !important; 747} 748.fl-button.fl-button-icon-animation:hover i.fl-button-icon-after { 749 margin-left: 10px !important; 750} 751.fl-button.fl-button-icon-animation i.fl-button-icon-before { 752 margin-right: 0 !important; 753} 754.fl-button.fl-button-icon-animation:hover i.fl-button-icon-before { 755 margin-right: 20px !important; 756 margin-left: -10px; 757} 758 759/* Default button colors for non Beaver Builder themes. 760------------------------------------------------------ */ 761 762.fl-builder-content .fl-button:is(a, button), 763.fl-builder-content a.fl-button:visited { 764 background: #fafafa; 765 border: 1px solid #ccc; 766 color: #333; 767} 768.fl-builder-content .fl-button:is(a, button) *, 769.fl-builder-content a.fl-button:visited * { 770 color: #333; 771}@media (max-width: 1200px) { /** 772 * Styles needed for the large breakpoint. 773 */ 774 }@media (max-width: 1023px) { /* Columns 775------------------------------------------------------ */ 776 777/* Reversed Responsive Stacking */ 778.fl-col-group.fl-col-group-medium-reversed { 779 display: -webkit-flex; 780 display: flex; 781 -webkit-flex-wrap: wrap-reverse; 782 flex-wrap: wrap-reverse; 783 flex-direction: row-reverse; 784} 785 }@media (max-width: 768px) { /* Rows 786------------------------------------------------------ */ 787 788.fl-row-content-wrap { 789 background-attachment: scroll !important; 790} 791.fl-row-bg-parallax .fl-row-content-wrap { 792 background-attachment: scroll !important; 793 background-position: center center !important; 794} 795 796/* Column Groups 797------------------------------------------------------ */ 798
799/* Equal Heights */ 800.fl-col-group.fl-col-group-equal-height { 801 display: block; 802} 803.fl-col-group.fl-col-group-equal-height.fl-col-group-custom-width { 804 display: -webkit-box; 805 display: -webkit-flex; 806 display: flex; 807} 808 809/* Reversed Responsive Stacking */ 810.fl-col-group.fl-col-group-responsive-reversed { 811 display: -webkit-flex; 812 display: flex; 813 -webkit-flex-wrap: wrap-reverse; 814 flex-wrap: wrap-reverse; 815 flex-direction: row-reverse; 816} 817.fl-col-group.fl-col-group-responsive-reversed .fl-col:not(.fl-col-small-custom-width) { 818 flex-basis: 100%; 819 width: 100% !important; 820} 821.fl-col-group.fl-col-group-medium-reversed:not(.fl-col-group-responsive-reversed) { 822 display: unset; 823 display: unset; 824 -webkit-flex-wrap: unset; 825 flex-wrap: unset; 826 flex-direction: unset; 827} 828 829/* Columns 830------------------------------------------------------ */ 831 832.fl-col { 833 clear: both; 834 float: none; 835 margin-left: auto; 836 margin-right: auto; 837 width: auto !important; 838} 839.fl-col-small:not(.fl-col-small-full-width) { 840 max-width: 400px; 841} 842.fl-block-col-resize { 843 display:none; 844} 845/* Rows 846------------------------------------------------------ */ 847 848.fl-row[data-node] .fl-row-content-wrap { 849 margin: 0; 850 padding-left: 0; 851 padding-right: 0; 852} 853.fl-row[data-node] .fl-bg-video, 854.fl-row[data-node] .fl-bg-slideshow { 855 left: 0; 856 right: 0; 857} 858 859/* Columns 860------------------------------------------------------ */ 861 862.fl-col[data-node] .fl-col-content { 863 margin: 0; 864 padding-left: 0; 865 padding-right: 0; 866} 867 }@media (min-width: 1201px) { 868 html .fl-visible-large:not(.fl-visible-desktop), 869 html .fl-visible-medium:not(.fl-visible-desktop), 870 html .fl-visible-mobile:not(.fl-visible-desktop) { 871 display: none; 872 } 873} 874 875@media (min-width: 1024px) and (max-width: 1200px) { 876 html .fl-visible-desktop:not(.fl-visible-large), 877 html .fl-visible-medium:not(.fl-visible-large), 878 html .fl-visible-mobile:not(.fl-visible-large) { 879 display: none; 880 } 881} 882 883@media (min-width: 769px) and (max-width: 1023px) { 884 html .fl-visible-desktop:not(.fl-visible-medium), 885 html .fl-visible-large:not(.fl-visible-medium), 886 html .fl-visible-mobile:not(.fl-visible-medium) { 887 display: none; 888 } 889} 890 891@media (max-width: 768px) { 892 html .fl-visible-desktop:not(.fl-visible-mobile), 893 html .fl-visible-large:not(.fl-visible-mobile), 894 html .fl-visible-medium:not(.fl-visible-mobile) { 895 display: none; 896 } 897} 898.fl-col-content { 899 display: flex; 900 flex-direction: column; 901 margin-top: 0px; 902 margin-right: 0px; 903 margin-bottom: 0px; 904 margin-left: 0px; 905 padding-top: 0px; 906 padding-right: 0px; 907 padding-bottom: 0px; 908 padding-left: 0px; 909} 910.fl-row-fixed-width { 911 max-width: 1280px; 912} 913.fl-builder-content > .fl-module-box { 914 margin: 0; 915} 916.fl-row-content-wrap { 917 margin-top: 0px; 918 margin-right: 0px; 919 margin-bottom: 0px; 920 margin-left: 0px; 921 padding-top: 0px; 922 padding-right: 0px; 923 padding-bottom: 0px; 924 padding-left: 0px; 925} 926.fl-module-content, .fl-module:where(.fl-module:not(:has(> .fl-module-content))) { 927 margin-top: 20px; 928 margin-right: 20px; 929 margin-bottom: 20px; 930 margin-left: 20px; 931} 932:where(.fl-builder-content, .fl-page) :is(a[href], button, input, select, textarea, [tabindex]:not([tabindex="-1"])):focus { 933 outline-width: px; 934 outline-offset: px; 935} 936.page .fl-post-header, .single-fl-builder-template .fl-post-header { display:none; } 937 938 939 940 941 942 /* Full Height Rows */ 943 .fl-node-25ul7pjvig0y.fl-row-full-height > .fl-row-content-wrap, 944 .fl-node-25ul7pjvig0y.fl-row-custom-height > .fl-row-content-wrap { 945 display: -webkit-box; 946 display: -webkit-flex; 947 display: -ms-flexbox; 948 display: flex; 949 } 950 .fl-node-25ul7pjvig0y.fl-row-full-height > .fl-row-content-wrap { 951 min-height: 100vh; 952 } 953 .fl-node-25ul7pjvig0y.fl-row-custom-height > .fl-row-content-wrap { 954 min-height: 0; 955 } 956 957 .fl-builder-edit .fl-node-25ul7pjvig0y.fl-row-full-height > .fl-row-content-wrap { 958 min-height: calc( 100vh - 48px ); 959 } 960 961 /* Full height iPad with portrait orientation. */ 962 @media all and (width: 768px) and (height: 1024px) and (orientation:portrait){ 963 .fl-node-25ul7pjvig0y.fl-row-full-height > .fl-row-content-wrap { 964 min-height: 1024px; 965 } 966 } 967 /* Full height iPad with landscape orientation. */ 968 @media all and (width: 1024px) and (height: 768px) and (orientation:landscape){ 969 .fl-node-25ul7pjvig0y.fl-row-full-height > .fl-row-content-wrap { 970 min-height: 768px; 971 } 972 } 973 /* Full height iPhone 5. You can also target devices with aspect ratio. */ 974 @media screen and (aspect-ratio: 40/71) { 975 .fl-node-25ul7pjvig0y.fl-row-full-height > .fl-row-content-wrap { 976 min-height: 500px; 977 } 978 } 979.fl-node-25ul7pjvig0y > .fl-row-content-wrap { 980 background-color: #b01c2e; 981} 982.fl-node-25ul7pjvig0y.fl-row-default-height > .fl-row-content-wrap, .fl-node-25ul7pjvig0y.fl-row-full-height > .fl-row-content-wrap, .fl-node-25ul7pjvig0y.fl-row-custom-height > .fl-row-content-wrap { 983 align-items: flex-start; 984 justify-content: flex-start; 985} 986.fl-node-25ul7pjvig0y .fl-row-content { 987 max-width: 1000px; 988} 989 .fl-node-25ul7pjvig0y > .fl-row-content-wrap { 990 padding-top:60px; 991} 992@media ( max-width: 768px ) { 993 .fl-node-25ul7pjvig0y.fl-row > .fl-row-content-wrap { 994 padding-top:30px; 995} 996} 997 998 999
1000 .fl-builder-row-settings #fl-field-separator_position { 1001 display: none !important; 1002 } 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015.fl-node-dojh3wukz4ts { 1016 width: 100%; 1017} 1018.fl-node-dojh3wukz4ts > .fl-col-content { 1019 background-color: #b01c2e; 1020} 1021.fl-module-heading .fl-heading { 1022 padding: 0 !important; 1023 margin: 0 !important; 1024}.fl-row .fl-col .fl-node-xu9zr1wdahye h1.fl-heading a, 1025.fl-row .fl-col .fl-node-xu9zr1wdahye h1.fl-heading .fl-heading-text, 1026.fl-row .fl-col .fl-node-xu9zr1wdahye h1.fl-heading .fl-heading-text *, 1027.fl-node-xu9zr1wdahye h1.fl-heading .fl-heading-text { 1028 color: #ffffff; 1029} 1030.fl-node-xu9zr1wdahye.fl-module-heading .fl-heading { 1031 text-align: center; 1032} 1033 .fl-node-xu9zr1wdahye > .fl-module-content { 1034 margin-bottom:0px; 1035} 1036.fl-builder-content .fl-rich-text strong { 1037 font-weight: bold; 1038} 1039 1040/** 1041 * Remove bottom margins from the last paragraph 1042 * in v2+ text editor modules. 1043 */ 1044.fl-module.fl-rich-text p:last-child { 1045 margin-bottom: 0; 1046} 1047/* Handle overlays in the builder */ 1048.fl-builder-edit .fl-module.fl-rich-text p:not(:has(~ *:not(.fl-block-overlay))) { 1049 margin-bottom: 0; 1050} 1051 .fl-node-7f80x2rji4bv > .fl-module-content { 1052 margin-top:0px; 1053 margin-bottom:0px; 1054} 1055@media ( max-width: 768px ) { 1056 .fl-node-7f80x2rji4bv.fl-module > .fl-module-content { 1057 margin-top:0px; 1058} 1059} 1060 1061/* Start Global CSS */ 1062 1063/* End Global CSS */ 1064 1065 1066/* Start Global Nodes CSS */ 1067 1068/* End Global Nodes CSS */ 1069 1070 1071/* Start Layout CSS */ 1072 1073/* End Layout CSS */ 1074 1075 1076 .fl-node-25ul7pjvig0y .fl-row-content { 1077 min-width: 0px; 1078 } 1079 1080/*# sourceURL=fl-builder-layout-3808-inline-css */</style><link data-optimized="1" rel='stylesheet' id='wpa-css-css' href='https://clpvd.org/wp-content/litespeed/css/60830b1f2ab43405a3eeb56872c45304.css?ver=ac345' media='all' /><style id="fl-builder-layout-43931-inline-css">.fl-node-m9ovuw12tdig.fl-row-default-height > .fl-row-content-wrap, .fl-node-m9ovuw12tdig.fl-row-full-height > .fl-row-content-wrap, .fl-node-m9ovuw12tdig.fl-row-custom-height > .fl-row-content-wrap { 1081 align-items: center; 1082 justify-content: center; 1083} 1084 1085 1086 1087 .fl-builder-row-settings #fl-field-separator_position { 1088 display: none !important; 1089 } 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102.fl-node-u3hj07crfygx { 1103 width: 100%; 1104} 1105.fl-builder-edit .bb-bootstrap-alerts { 1106 display: block !important; 1107} 1108.bb-bootstrap-alerts a:hover { 1109 text-decoration:none; 1110} 1111.bb-bootstrap-alerts .alert { 1112 border: 1px solid transparent; 1113 border-radius: 4px; 1114} 1115.bb-bootstrap-alerts .fade { 1116 opacity: 0; 1117 -webkit-transition: opacity .15s linear; 1118 -o-transition: opacity .15s linear; 1119 transition: opacity .15s linear; 1120} 1121.bb-bootstrap-alerts .fade.in { 1122 opacity: 1; 1123} 1124.bb-bootstrap-alerts .alert-danger { 1125 color: #a94442; 1126 background-color: #f2dede; 1127 border-color: #ebccd1; 1128} 1129.bb-bootstrap-alerts .alert-warning { 1130 color: #8a6d3b; 1131 background-color: #fcf8e3; 1132 border-color: #faebcc; 1133} 1134.bb-bootstrap-alerts .alert-info { 1135 color: #31708f; 1136 background-color: #d9edf7; 1137 border-color: #bce8f1; 1138} 1139.bb-bootstrap-alerts .alert-success { 1140 color: #3c763d; 1141 background-color: #dff0d8; 1142 border-color: #d6e9c6; 1143} 1144.bb-bootstrap-alerts .close { 1145 float: right; 1146 margin: 10px; 1147 font-weight: 700; 1148 line-height: 1; 1149 color: #000; 1150 text-shadow: 0 1px 0 #fff; 1151 filter: alpha(opacity=20); 1152 opacity: .2; 1153} 1154.bb-bootstrap-alerts p { 1155 display: inline; 1156 margin: 0; 1157}/* typography */ 1158.fl-node-nm0ud8ypz5o6 { 1159 font-size: 20px; 1160 line-height: 28px; 1161 text-align:center; 1162} 1163 1164/* padding for the contents */ 1165.fl-node-nm0ud8ypz5o6 .alert-padding { 1166 padding-top: 20px; 1167 padding-bottom: 20px; 1168 padding-left: 20px; 1169 padding-right: 20px; 1170} 1171 1172/* custom notification type field css */ 1173.fl-node-nm0ud8ypz5o6 .alert-custom { 1174 color: ; 1175 background-color: ; 1176 border-color: ; 1177 border-width:1px; 1178 border-style:none; 1179 border-radius:4px; 1180} 1181 1182/* custom font color css */ 1183.fl-node-nm0ud8ypz5o6 .fi-background-color, 1184.fl-node-nm0ud8ypz5o6 .dashicons, 1185.fl-node-nm0ud8ypz5o6 .fa, 1186.fl-node-nm0ud8ypz5o6 .ua-icon 1187 { 1188 color: #c60027} 1189 1190/* link color css */ 1191.fl-node-nm0ud8ypz5o6 a * { 1192 color: #8a6d3b} 1193/* close button padding css */ 1194 1195.fl-node-nm0ud8ypz5o6 .close { 1196 font-size: 21px; 1197} 1198 1199/* for cookie base notification */ 1200.fl-node-nm0ud8ypz5o6 .bb-bootstrap-alerts { 1201 /*display:none;*/ 1202} 1203 .fl-node-nm0ud8ypz5o6 > .fl-module-content { 1204 margin-top:0px; 1205 margin-right:0px; 1206 margin-bottom:0px; 1207 margin-left:0px; 1208} 1209 1210/* Start Global Nodes CSS */ 1211
1212/* End Global Nodes CSS */ 1213 1214 1215/* Start Layout CSS */ 1216 1217/* End Layout CSS */ 1218 1219.fl-node-nm0ud8ypz5o6 .bb-bootstrap-alerts .alert { 1220 border-radius: 0; 1221} 1222 1223 1224/*# sourceURL=fl-builder-layout-43931-inline-css */</style><link data-optimized="1" rel='stylesheet' id='search-filter-plugin-styles-css' href='https://clpvd.org/wp-content/litespeed/css/14e82b99cc84e4576e1b4bb587245b32.css?ver=241de' media='all' /><link data-optimized="1" rel='stylesheet' id='gd-full-width-css' href='https://clpvd.org/wp-content/litespeed/css/6dff49b71de6cf354eeb6f69daaf1793.css?ver=64a0b' media='all' /><link data-optimized="1" rel='stylesheet' id='pp-animate-css' href='https://clpvd.org/wp-content/litespeed/css/575add1ed84710352290d8f1b7b6b64d.css?ver=404e6' media='all' />
1224<script id="jquery-core-js" data-cfasync="false" src="https://clpvd.org/wp-includes/js/jquery/jquery.min.js?ver=3.7.1"></script>
1224
1224<script data-optimized="1" id="jquery-migrate-js" src="https://clpvd.org/wp-content/litespeed/js/05e2f978094cd82abacd3a36bab85f3b.js?ver=4e9c5"></script>
1224
1224<script data-optimized="1" id="assabetinteractive-js" src="https://clpvd.org/wp-content/litespeed/js/7361618e5d03d9b2e83a63e8cfc7d505.js?ver=49630"></script>
1224
1224<script id="search-filter-pro-bb-js-extra">var SFVC_DATA = {"ajax_url":"https://clpvd.org/wp-admin/admin-ajax.php","home_url":"https://clpvd.org/"}; 1225//# sourceURL=search-filter-pro-bb-js-extra</script>
1225
1225<script data-optimized="1" id="search-filter-pro-bb-js" src="https://clpvd.org/wp-content/litespeed/js/ede75feb3bfe34eb8edfe2c717b5fe76.js?ver=29ade"></script>
1225
1225<script id="search-filter-plugin-build-js-extra">var SF_LDATA = {"ajax_url":"https://clpvd.org/wp-admin/admin-ajax.php","home_url":"https://clpvd.org/","extensions":[]}; 1226//# sourceURL=search-filter-plugin-build-js-extra</script>
1226
1226<script data-optimized="1" id="search-filter-plugin-build-js" src="https://clpvd.org/wp-content/litespeed/js/b74f303290e7a0c1042f50cedad8a900.js?ver=ed938"></script>
1226
1226<script id="search-filter-plugin-chosen-js" src="https://clpvd.org/wp-content/plugins/search-filter-pro/public/assets/js/chosen.jquery.min.js?ver=2.5.13"></script>
1226 <link rel="https://api.w.org/" href="https://clpvd.org/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://clpvd.org/wp-json/wp/v2/pages/3808" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://clpvd.org/xmlrpc.php?rsd" /><meta name="generator" content="WordPress 7.1.1" /><link rel='shortlink' href='https://clpvd.org/?p=3808' />
1226<script>var bb_powerpack = { 1227 version: '2.42.3', 1228 getAjaxUrl: function() { return atob( 'aHR0cHM6Ly9jbHB2ZC5vcmcvd3AtYWRtaW4vYWRtaW4tYWpheC5waHA=' ); }, 1229 callback: function() {}, 1230 mapMarkerData: {}, 1231 post_id: '3808', 1232 search_term: '', 1233 current_page: 'https://clpvd.org/search/', 1234 conditionals: { 1235 is_front_page: false, 1236 is_home: false, 1237 is_archive: false, 1238 current_post_type: '', 1239 is_tax: false, 1240 is_author: false, 1241 current_author: false, 1242 is_search: false, 1243 } 1244 };</script>
1244 <meta name="et-api-version" content="v1"><meta name="et-api-origin" content="https://clpvd.org"><link rel="https://theeventscalendar.com/" href="https://clpvd.org/wp-json/tribe/tickets/v1/" /><meta name="tec-api-version" content="v1"><meta name="tec-api-origin" content="https://clpvd.org"><link rel="alternate" href="https://clpvd.org/wp-json/tribe/events/v1/" /><link rel="stylesheet" href="https://use.typekit.net/tgk1dyc.css"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.2.0/css/all.min.css" integrity="sha512-xh6O/CkQoPOWDdYTDqeRdPCVd1SpvCA9XXcUnZS2FmJNp1coAFzvtCN9BmamE+4aHK8yyUHUSCcJHgXloTyT2A==" crossorigin="anonymous" referrerpolicy="no-referrer" />
1244<script>(function() { var d = document, fr = d.createElement('script'); fr.type = 'text/javascript'; fr.async = true; fr.src = 'https://static.fundrazr.com/widgets/loader.js'; var s = d.getElementsByTagName('script')[0]; s.parentNode.insertBefore(fr, s);})();</script>
1244
1244<script>
vendor: 327 bytes, lines 1244-1248
1244(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 1245new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 1246j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 1247'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 1248})(window,document,'script','dataLayer','
1248GTM-W2CD3P9
vendor: 3 bytes, line 1248
1248');
1248</script>
1248 <link rel="icon" href="https://clpvd.org/wp-content/uploads/2022/09/cropped-clpvd-icon-32x32.png" sizes="32x32" /><link rel="icon" href="https://clpvd.org/wp-content/uploads/2022/09/cropped-clpvd-icon-192x192.png" sizes="192x192" /><link rel="apple-touch-icon" href="https://clpvd.org/wp-content/uploads/2022/09/cropped-clpvd-icon-180x180.png" /><meta name="msapplication-TileImage" content="https://clpvd.org/wp-content/uploads/2022/09/cropped-clpvd-icon-270x270.png" /><style id="wp-custom-css">.gform-theme-datepicker:not(.gform-legacy-datepicker) .ui-datepicker-calendar td, 1249.gform-theme-datepicker:not(.gform-legacy-datepicker) .ui-datepicker-calendar th span{ 1250 font-size: 15px !important; 1251} 1252.gform-theme-datepicker:not(.gform-legacy-datepicker) .ui-datepicker-header select { 1253 font-size: 18px !important; 1254}</style><link data-optimized="1" rel='stylesheet' id='fl-builder-wp-editor-css' href='https://clpvd.org/wp-content/litespeed/css/6becd1a5e73131c5d844cfb7f602699c.css?ver=d4137' media='all' /></head><body class="wp-singular page-template-default page page-id-3808 wp-theme-genesis wp-child-theme-focus-pro fl-builder fl-builder-2-11-1 fl-themer-1-6 fl-no-js tribe-no-js tec-no-tickets-on-recurring tec-no-rsvp-on-recurring fl-theme-builder-part fl-theme-builder-part-announcement-bar header-full-width full-width-content genesis-breadcrumbs-hidden no-site-header gd-transparent-background gd-full-width tribe-theme-genesis" itemscope itemtype="https://schema.org/WebPage">
vendor: 68 bytes, lines 1254-1255
1254 1255<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
1255GTM-W2CD3P9
vendor: 82 bytes, lines 1255-1256
1255" 1256height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
1256<div class="site-container"><ul class="genesis-skip-link"><li><a href="#genesis-content" class="screen-reader-shortcut"> Skip to main content</a></li></ul><div class="fl-builder-content fl-builder-content-43931 fl-builder-global-templates-locked" data-post-id="43931" data-type="part"><div class="fl-row fl-row-full-width fl-row-bg-none fl-node-m9ovuw12tdig fl-row-default-height fl-row-align-center" data-node="m9ovuw12tdig"><div class="fl-row-content-wrap"><div class="fl-row-content fl-row-full-width fl-node-content"><div class="fl-col-group fl-node-o3a4eh87mk0g" data-node="o3a4eh87mk0g"><div class="fl-col fl-node-u3hj07crfygx fl-col-bg-color" data-node="u3hj07crfygx"><div class="fl-col-content fl-node-content"><div class="fl-module fl-module-bb-bootstrap-alerts-module fl-node-nm0ud8ypz5o6" data-node="nm0ud8ypz5o6" aria-label="Bootstrap Alerts for Beaver Builder"><div class="fl-module-content fl-node-content"><div class="bb-bootstrap-alerts"> 1257<a href="#" target="_blank" ><div class="alert alert-warning fade in" > 1258<span class="close" data-dismiss="alert" aria-label="close"><i class="fa fa-times" aria-hidden="true"></i></span> 1259<span class="bbn_information "><div class="alert-padding"> 1260<i class=""></i><h3><a href="https://clpvd.org/announcement-olneyville-library-is-moving/">Olneyville Library is closed as we await its new location!</a></h3><hr /><h3><span style="color: #000000;">IT'S BACK!</span><br /><span style="color: #ff9900;"><a style="color: #ff9900;" href="https://clpvd.org/spooky">Spooky Night at Knight at Knight Memorial Library, Thursday, October 29th from 6-9:30PM</a></span></h3><h3>Get your <span style="color: #ff9900;"><a style="color: #ff9900;" href="https://clpvd.org/spooky">tickets</a></span> today!</h3></div> 1261</span></div> 1262</a></div></div></div></div></div></div></div></div></div></div><div class="site-inner"><div class="content-sidebar-wrap"><main class="content" id="genesis-content"><article class="post-3808 page type-page status-publish entry" aria-label="Search" itemscope itemtype="https://schema.org/CreativeWork"><div class="entry-content" itemprop="text"><div class="fl-builder-content fl-builder-content-3808 fl-builder-content-primary fl-builder-global-templates-locked" data-post-id="3808"><div class="fl-row fl-row-full-width fl-row-bg-color fl-node-25ul7pjvig0y fl-row-full-height fl-row-align-top" data-node="25ul7pjvig0y"><div class="fl-row-content-wrap"><div class="fl-row-content fl-row-fixed-width fl-node-content"><div class="fl-col-group fl-node-b7e6hm31osdv fl-col-group-equal-height fl-col-group-align-center" data-node="b7e6hm31osdv"><div class="fl-col fl-node-dojh3wukz4ts fl-col-bg-color" data-node="dojh3wukz4ts"><div class="fl-col-content fl-node-content"><div class="fl-module fl-module-heading fl-node-xu9zr1wdahye" data-node="xu9zr1wdahye" aria-label="Heading"><div class="fl-module-content fl-node-content"><h1 class="fl-heading"> 1263<span class="fl-heading-text">Search</span></h1></div></div><div class="fl-module fl-module-rich-text fl-node-7f80x2rji4bv content-text-block" data-node="7f80x2rji4bv" aria-label="Text Editor"><div class="fl-module-content fl-node-content"><div class="fl-rich-text"><p>
1263<script>function checkSetting() { 1264 if (document.getElementById('option_encore').checked) { 1265 document.getElementById('clpvd_search_form').action = document.getElementById('option_encore').value; 1266 document.getElementById('clpvd_search_form_target').placeholder = "Find books, movies, music and more"; 1267 document.getElementById('clpvd_search_form_target').name = "lookfor"; 1268 console.log(document.getElementById('option_encore').value); 1269 } 1270 1271 if (document.getElementById('option_wordpress').checked) { 1272 document.getElementById('clpvd_search_form').action = document.getElementById('option_wordpress').value; 1273 document.getElementById('clpvd_search_form_target').placeholder = "Search this site"; 1274 document.getElementById('clpvd_search_form_target').name = "s"; 1275 console.log(document.getElementById('option_wordpress').value); 1276 } 1277 1278 }</script>
1278 <form id="clpvd_search_form" action="https://clpvd.oslri.net/Union/Search" target="_blank" method="get" name="clpvd_search_form"> 1279<input type="hidden" name="formids" value="target"> 1280<input type="hidden" name="lang" value="eng"> 1281<input type="hidden" name="suite" value="def"> 1282<input type="hidden" name="reservedids" value="lang,suite"> 1283<input type="hidden" name="submit mode" value=""> 1284<input type="hidden" name="submitname" value=""> 1285<input type="radio" value="https://clpvd.oslri.net/Union/Search" name="searchSwitch" id="option_encore" checked="selcheckedected" onChange="checkSetting()" /> 1286<label for="option_encore">Search Catalog</label> 1287<input type="radio" value="https://clpvd.org" name="searchSwitch" id="option_wordpress" onChange="checkSetting()" /> 1288<label for="option_wordpress">Search This Site</label> 1289<input id="clpvd_search_form_target" placeholder="Find books, movies, music and more" type="text" name="lookfor" value=""> 1290<input type="submit" class="form-submit" value="Search"></form>
1290<script>document.getElementById('option_encore').click();</script>
1290 </p></div></div></div></div></div></div></div></div></div></div></div></article></main></div></div><footer class="site-footer" itemscope itemtype="https://schema.org/WPFooter"><div class="wrap"><p></p></div></footer></div>
1290<script type="speculationrules">{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/focus-pro/*","/wp-content/themes/genesis/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}</script>
1290 <div class="gtranslate_wrapper" id="gt-wrapper-23308463"></div>
1290<script>( function ( body ) { 1291 'use strict'; 1292 body.className = body.className.replace( /\btribe-no-js\b/, 'tribe-js' ); 1293 } )( document.body );</script>
1293
1293<script type="text/javascript">var sbiajaxurl = "https://clpvd.org/wp-admin/admin-ajax.php";</script>
1293
1293<script>/* */var tribe_l10n_datatables = {"aria":{"sort_ascending":": activate to sort column ascending","sort_descending":": activate to sort column descending"},"length_menu":"Show _MENU_ entries","empty_table":"No data available in table","info":"Showing _START_ to _END_ of _TOTAL_ entries","info_empty":"Showing 0 to 0 of 0 entries","info_filtered":"(filtered from _MAX_ total entries)","zero_records":"No matching records found","search":"Search:","all_selected_text":"All items on this page were selected. ","select_all_link":"Select all pages","clear_selection":"Clear Selection.","pagination":{"all":"All","next":"Next","previous":"Previous"},"select":{"rows":{"0":"","_":": Selected %d rows","1":": Selected 1 row"}},"datepicker":{"dayNames":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"dayNamesShort":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"dayNamesMin":["S","M","T","W","T","F","S"],"monthNames":["January","February","March","April","May","June","July","August","September","October","November","December"],"monthNamesShort":["January","February","March","April","May","June","July","August","September","October","November","December"],"monthNamesMin":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"nextText":"Next","prevText":"Prev","currentText":"Today","closeText":"Done","today":"Today","clear":"Clear"},"registration_prompt":"There is unsaved attendee information. Are you sure you want to continue?"};/* */</script>
1293<script data-optimized="1" id="tec-user-agent-js" src="https://clpvd.org/wp-content/litespeed/js/c578bc60e8c832bf0664f888e23b03fb.js?ver=3ae99"></script>
1293
1293<script data-optimized="1" id="wpascript-js" src="https://clpvd.org/wp-content/litespeed/js/979a431c658af872bf8633de99376935.js?ver=a8951"></script>
1293
1293<script id="wpascript-js-after">wpa_field_info = JSON.parse(atob("eyJ3cGFfZmllbGRfbmFtZSI6ImFxZ2p5djgwMzAiLCJ3cGFfZmllbGRfdmFsdWUiOjQ5NTg5NCwid3BhX2FkZF90ZXN0Ijoibm8ifQ==")); 1294//# sourceURL=wpascript-js-after</script>
1294
1294<script data-optimized="1" id="bbn_boot-js" src="https://clpvd.org/wp-content/litespeed/js/e5bb829061309a7b88bcffcfaab4b45f.js?ver=6ee40"></script>
1294
1294<script data-optimized="1" id="bbn_cookie-js" src="https://clpvd.org/wp-content/litespeed/js/6b4216033519fd796108991ccb64739f.js?ver=b24cc"></script>
1294
1294<script id="jquery-ui-core-js-before">jQuery.uiBackCompat = true; 1295//# sourceURL=jquery-ui-core-js-before</script>
1295
1295<script data-optimized="1" id="jquery-ui-core-js" src="https://clpvd.org/wp-content/litespeed/js/b67bdfb1a8dcc26064feab9236ab9b11.js?ver=c7540"></script>
1295
1295<script data-optimized="1" id="jquery-ui-datepicker-js" src="https://clpvd.org/wp-content/litespeed/js/cd28740a44ac64aff45e59fff185f0dc.js?ver=8ec82"></script>
1295
1295<script id="jquery-ui-datepicker-js-after">jQuery(function(jQuery){jQuery.datepicker.setDefaults({"closeText":"Close","currentText":"Today","monthNames":["January","February","March","April","May","June","July","August","September","October","November","December"],"monthNamesShort":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"nextText":"Next","prevText":"Previous","dayNames":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"dayNamesShort":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"dayNamesMin":["S","M","T","W","T","F","S"],"dateFormat":"MM d, yy","firstDay":0,"isRTL":false});}); 1296//# sourceURL=jquery-ui-datepicker-js-after</script>
1296
1296<script data-optimized="1" id="skip-links-js" src="https://clpvd.org/wp-content/litespeed/js/048b8264b352694e436e10c2ecf62acc.js?ver=875dd"></script>
1296
1296<script data-optimized="1" id="page-links-to-js" src="https://clpvd.org/wp-content/litespeed/js/f765f64809ef19d3bcbfbd9d374bdd78.js?ver=84217"></script>
1296
1296<script id="gt_widget_script_23308463-js-before">window.gtranslateSettings = /* document.write */ window.gtranslateSettings || {};window.gtranslateSettings['23308463'] = {"default_language":"en","languages":["en","es"],"url_structure":"sub_directory","detect_browser_language":1,"flag_style":"3d","wrapper_selector":"#gt-wrapper-23308463","alt_flags":{"en":"usa","es":"mexico"},"float_switcher_open_direction":"top","switcher_horizontal_position":"left","switcher_vertical_position":"top","flags_location":"\/wp-content\/plugins\/gtranslate\/flags\/"}; 1297//# sourceURL=gt_widget_script_23308463-js-before</script>
1297<script src="https://clpvd.org/wp-content/plugins/gtranslate/js/float.js?ver=5.0.1" data-no-optimize="1" data-no-minify="1" data-gt-orig-url="/search/" data-gt-orig-domain="clpvd.org" data-gt-widget-id="23308463" defer></script>
1297<script>var wpAjaxUrl = 'https://clpvd.org/wp-admin/admin-ajax.php';var flBuilderUrl = 'https://clpvd.org/wp-content/plugins/bb-plugin/';var FLBuilderLayoutConfig = { 1298 anchorLinkAnimations : { 1299 duration : 1000, 1300 easing : 'swing', 1301 offset : 100 1302 }, 1303 paths : { 1304 pluginUrl : 'https://clpvd.org/wp-content/plugins/bb-plugin/', 1305 wpAjaxUrl : 'https://clpvd.org/wp-admin/admin-ajax.php' 1306 }, 1307 breakpoints : { 1308 small : 768, 1309 medium : 1023, 1310 large : 1200 }, 1311 waypoint: { 1312 offset: 80 1313 }, 1314 emptyColWidth: '0%', 1315 i18n : { 1316 opensInNewTab : '(opens in new tab)' 1317 } 1318}; 1319(function($){ 1320 1321 if(typeof FLBuilderLayout != 'undefined') { 1322 return; 1323 } 1324 1325 /** 1326 * Helper class with generic logic for a builder layout. 1327 * 1328 * @class FLBuilderLayout 1329 * @since 1.0 1330 */ 1331 FLBuilderLayout = { 1332 1333 /** 1334 * Initializes a builder layout. 1335 * 1336 * @since 1.0 1337 * @method init 1338 */ 1339 init: function() 1340 { 1341 // Destroy existing layout events. 1342 FLBuilderLayout._destroy(); 1343 1344 // Init CSS classes. 1345 FLBuilderLayout._initClasses(); 1346 1347 // Init backgrounds.
1348 FLBuilderLayout._initBackgrounds(); 1349 1350 // Init buttons. 1351 FLBuilderLayout._initButtons(); 1352 1353 // Init row shape layer height. 1354 FLBuilderLayout._initRowShapeLayerHeight(); 1355 1356 // Init the new tab notice on links opening in a new tab. 1357 FLBuilderLayout._initLinkNotices(); 1358 1359 // Only init if the builder isn't active. 1360 if ( 0 === $('.fl-builder-edit').length ) { 1361 1362 // Init anchor links. 1363 FLBuilderLayout._initAnchorLinks(); 1364 1365 // Init the browser hash. 1366 FLBuilderLayout._initHash(); 1367 1368 // Init forms. 1369 FLBuilderLayout._initForms(); 1370 1371 FLBuilderLayout._reorderMenu(); 1372 } 1373 else { 1374 FLBuilderLayout._initNestedColsWidth(); 1375 } 1376 $('body').removeClass( 'fl-no-js' ); 1377 }, 1378 1379 /** 1380 * Public method for refreshing Wookmark or MosaicFlow galleries 1381 * within an element. 1382 * 1383 * @since 1.7.4 1384 * @method refreshGalleries 1385 */ 1386 refreshGalleries: function( element ) 1387 { 1388 var $element = 'undefined' == typeof element ? $( 'body' ) : $( element ), 1389 mfContent = $element.find( '.fl-mosaicflow-content' ), 1390 wmContent = $element.find( '.fl-gallery' ), 1391 mfObject = null; 1392 1393 if ( mfContent ) { 1394 1395 mfObject = mfContent.data( 'mosaicflow' ); 1396 1397 if ( mfObject ) { 1398 mfObject.columns = $( [] ); 1399 mfObject.columnsHeights = []; 1400 mfContent.data( 'mosaicflow', mfObject ); 1401 mfContent.mosaicflow( 'refill' ); 1402 } 1403 } 1404 if ( wmContent ) { 1405 wmContent.trigger( 'refreshWookmark' ); 1406 } 1407 }, 1408 1409 /** 1410 * Public method for refreshing Masonry within an element 1411 * 1412 * @since 1.8.1 1413 * @method refreshGridLayout 1414 */ 1415 refreshGridLayout: function( element ) 1416 { 1417 var $element = 'undefined' == typeof element ? $( 'body' ) : $( element ), 1418 msnryContent = $element.find('.masonry'); 1419 1420 if ( msnryContent.length ) { 1421 msnryContent.masonry('layout'); 1422 } 1423 }, 1424 1425 /** 1426 * Public method for reloading BxSlider within an element 1427 * 1428 * @since 1.8.1 1429 * @method reloadSlider 1430 */ 1431 reloadSlider: function( content ) 1432 { 1433 var $content = 'undefined' == typeof content ? $('body') : $(content); 1434 1435 // reload sliders. 1436 if ($content.find('.bx-viewport > div').length > 0) { 1437 $.each($content.find('.bx-viewport > div'), function (key, slider) { 1438 setTimeout(function () { 1439 $(slider).data('bxSlider').reloadSlider(); 1440 }, 100); 1441 }); 1442 } 1443 }, 1444 1445 /** 1446 * Public method for resizing WP audio player 1447 * 1448 * @since 1.8.2 1449 * @method resizeAudio 1450 */ 1451 resizeAudio: function( element ) 1452 { 1453 var $element = 'undefined' == typeof element ? $( 'body' ) : $( element ), 1454 audioPlayers = $element.find('.wp-audio-shortcode.mejs-audio'), 1455 player = null, 1456 mejsPlayer = null, 1457 rail = null, 1458 railWidth = 400; 1459 1460 if ( audioPlayers.length && typeof mejs !== 'undefined' ) { 1461 audioPlayers.each(function(){ 1462 player = $(this); 1463 mejsPlayer = mejs.players[player.attr('id')]; 1464 rail = player.find('.mejs-controls .mejs-time-rail'); 1465 var innerMejs = player.find('.mejs-inner'), 1466 total = player.find('.mejs-controls .mejs-time-total'); 1467 1468 if ( typeof mejsPlayer !== 'undefined' ) { 1469 railWidth = Math.ceil(player.width() * 0.8); 1470 1471 if ( innerMejs.length ) { 1472 1473 rail.css('width', railWidth +'px!important'); 1474 //total.width(rail.width() - 10); 1475 1476 mejsPlayer.options.autosizeProgress = true; 1477 1478 // webkit has trouble doing this without a delay 1479 setTimeout(function () { 1480 mejsPlayer.setControlsSize(); 1481 }, 50); 1482 1483 player.find('.mejs-inner').css({ 1484 visibility: 'visible', 1485 height: 'inherit' 1486 }); 1487 } 1488 } 1489 }); 1490 } 1491 }, 1492 1493 /** 1494 * Public method for preloading WP audio player when it's inside the hidden element 1495 * 1496 * @since 1.8.2 1497 * @method preloadAudio 1498 */ 1499 preloadAudio: function(element) 1500 { 1501 var $element = 'undefined' == typeof element ? $( 'body' ) : $( element ), 1502 contentWrap = $element.closest('.fl-accordion-item'), 1503 audioPlayers = $element.find('.wp-audio-shortcode.mejs-audio'); 1504 1505 if ( ! contentWrap.hasClass('fl-accordion-item-active') && audioPlayers.find('.mejs-inner').length ) { 1506 audioPlayers.find('.mejs-inner').css({ 1507 visibility : 'hidden', 1508 height: 0 1509 }); 1510 } 1511 }, 1512 1513 /** 1514 * Public method for resizing slideshow momdule within the tab 1515 * 1516 * @since 1.10.5 1517 * @method resizeSlideshow 1518 */ 1519 resizeSlideshow: function(){ 1520 if(typeof YUI !== 'undefined') { 1521 YUI().use('node-event-simulate', function(Y) { 1522 Y.one(window).simulate("resize"); 1523 }); 1524 } 1525 }, 1526 1527 /** 1528 * Public method for reloading an embedded Google Map within the tabs or hidden element. 1529 * 1530 * @since 2.2 1531 * @method reloadGoogleMap 1532 */ 1533 reloadGoogleMap: function(element){ 1534 var $element = 'undefined' == typeof element ? $( 'body' ) : $( element ),
1535 googleMap = $element.find( 'iframe[src*="google.com/maps"]' ); 1536 1537 if ( googleMap.length ) { 1538 googleMap.attr( 'src', function(i, val) { 1539 return val; 1540 }); 1541 } 1542 }, 1543 1544 /** 1545 * Unbinds builder layout events. 1546 * 1547 * @since 1.0 1548 * @access private 1549 * @method _destroy 1550 */ 1551 _destroy: function() 1552 { 1553 var win = $(window); 1554 1555 win.off('scroll.fl-bg-parallax'); 1556 win.off('resize.fl-bg-video'); 1557 }, 1558 1559 /** 1560 * Checks to see if the current device has touch enabled. 1561 * 1562 * @since 1.0 1563 * @access private 1564 * @method _isTouch 1565 * @return {Boolean} 1566 */ 1567 _isTouch: function() 1568 { 1569 if(('ontouchstart' in window) || (window.DocumentTouch && document instanceof DocumentTouch)) { 1570 return true; 1571 } 1572 1573 return false; 1574 }, 1575 1576 /** 1577 * Checks to see if the current device is mobile. 1578 * 1579 * @since 1.7 1580 * @access private 1581 * @method _isMobile 1582 * @return {Boolean} 1583 */ 1584 _isMobile: function() 1585 { 1586 return /Mobile|Android|Silk\/|Kindle|BlackBerry|Opera Mini|Opera Mobi|webOS/i.test( navigator.userAgent ); 1587 }, 1588 1589 /** 1590 * Initializes builder body classes. 1591 * 1592 * @since 1.0 1593 * @access private 1594 * @method _initClasses 1595 */ 1596 _initClasses: function() 1597 { 1598 var body = $( 'body' ), 1599 ua = navigator.userAgent; 1600 1601 // Add the builder body class (skip on block-only frontend to avoid layout break). 1602 if ( ! body.hasClass( 'fl-builder-blocks-only' ) && ! body.hasClass( 'archive' ) && $( '.fl-builder-content-primary' ).length > 0 ) { 1603 body.addClass('fl-builder'); 1604 } 1605 1606 // Add the builder touch body class. 1607 if(FLBuilderLayout._isTouch()) { 1608 body.addClass('fl-builder-touch'); 1609 } 1610 1611 // Add the builder mobile body class. 1612 if(FLBuilderLayout._isMobile()) { 1613 body.addClass('fl-builder-mobile'); 1614 } 1615 1616 if ( $(window).width() < FLBuilderLayoutConfig.breakpoints.small ) { 1617 body.addClass( 'fl-builder-breakpoint-small' ); 1618 } 1619 1620 if ( $(window).width() > FLBuilderLayoutConfig.breakpoints.small && $(window).width() < FLBuilderLayoutConfig.breakpoints.medium ) { 1621 body.addClass( 'fl-builder-breakpoint-medium' ); 1622 } 1623 1624 if ( $(window).width() > FLBuilderLayoutConfig.breakpoints.medium && $(window).width() < FLBuilderLayoutConfig.breakpoints.large ) { 1625 body.addClass( 'fl-builder-breakpoint-large' ); 1626 } 1627 1628 if ( $(window).width() > FLBuilderLayoutConfig.breakpoints.large ) { 1629 body.addClass( 'fl-builder-breakpoint-default' ); 1630 } 1631 1632 // IE11 body class. 1633 if ( ua.indexOf( 'Trident/7.0' ) > -1 && ua.indexOf( 'rv:11.0' ) > -1 ) { 1634 body.addClass( 'fl-builder-ie-11' ); 1635 } 1636 }, 1637 1638 /** 1639 * Initializes builder node backgrounds that require 1640 * additional JavaScript logic such as parallax. 1641 * 1642 * @since 1.1.4 1643 * @access private
1644 * @method _initBackgrounds 1645 */ 1646 _initBackgrounds: function() 1647 { 1648 var win = $(window); 1649 1650 // Init parallax backgrounds. 1651 if($('.fl-row-bg-parallax').length > 0 && !FLBuilderLayout._isMobile()) { 1652 FLBuilderLayout._scrollParallaxBackgrounds(); 1653 FLBuilderLayout._initParallaxBackgrounds(); 1654 win.on('resize.fl-bg-parallax', FLBuilderLayout._initParallaxBackgrounds); 1655 win.on('scroll.fl-bg-parallax', FLBuilderLayout._scrollParallaxBackgrounds); 1656 } 1657 1658 // Init video backgrounds. 1659 if($('.fl-bg-video').length > 0) { 1660 FLBuilderLayout._initBgVideos(); 1661 FLBuilderLayout._resizeBgVideos(); 1662 1663 // Ensure FLBuilderLayout._resizeBgVideos() is only called once on window resize. 1664 var resizeBGTimer = null; 1665 win.on('resize.fl-bg-video', function(e){ 1666 clearTimeout( resizeBGTimer ); 1667 resizeBGTimer = setTimeout(function() { 1668 FLBuilderLayout._resizeBgVideos(e); 1669 }, 100 ); 1670 }); 1671 } 1672 }, 1673 1674 /** 1675 * Initializes all buttons in a layout. 1676 * 1677 * @since 2.10 1678 * @access private 1679 * @method _initButtons 1680 */ 1681 _initButtons: function() 1682 { 1683 // Trigger click event on Enter or Space key press for deprecated button markup. 1684 $('a.fl-button[role="button"]').on('keydown', function(event) { 1685 if (event.key === 'Enter' || event.key === ' ') { 1686 // Necessary to prevent the default behavior of the space key from scrolling the page 1687 event.preventDefault(); 1688 $(this).trigger('click'); 1689 } 1690 }); 1691 }, 1692 1693 /** 1694 * Initializes all parallax backgrounds in a layout. 1695 * 1696 * @since 1.1.4 1697 * @access private 1698 * @method _initParallaxBackgrounds 1699 */ 1700 _initParallaxBackgrounds: function() 1701 { 1702 $('.fl-row-bg-parallax').each(FLBuilderLayout._initParallaxBackground); 1703 }, 1704 1705 /** 1706 * Initializes a single parallax background. 1707 * 1708 * @since 1.1.4 1709 * @access private 1710 * @method _initParallaxBackgrounds 1711 */ 1712 _initParallaxBackground: function() 1713 { 1714 var row = $(this), 1715 content = row.find('> .fl-row-content-wrap'), 1716 winWidth = $(window).width(), 1717 screenSize = '', 1718 imageSrc = { 1719 default: '', 1720 medium: '', 1721 responsive: '', 1722 }; 1723 1724 imageSrc.default = row.data('parallax-image') || ''; 1725 imageSrc.medium = row.data('parallax-image-medium') || imageSrc.default; 1726 imageSrc.responsive = row.data('parallax-image-responsive') || imageSrc.medium; 1727 1728 if (winWidth > FLBuilderLayoutConfig.breakpoints.medium) { 1729 screenSize = 'default'; 1730 } else if (winWidth > FLBuilderLayoutConfig.breakpoints.small && winWidth <= FLBuilderLayoutConfig.breakpoints.medium ) { 1731 screenSize = 'medium'; 1732 } else if (winWidth <= FLBuilderLayoutConfig.breakpoints.small) { 1733 screenSize = 'responsive'; 1734 } 1735 1736 content.css('background-image', 'url(' + imageSrc[screenSize] + ')'); 1737 row.data('current-image-loaded', screenSize ); 1738 1739 }, 1740 1741 /** 1742 * Fires when the window is scrolled to adjust 1743 * parallax backgrounds. 1744 * 1745 * @since 1.1.4 1746 * @access private 1747 * @method _scrollParallaxBackgrounds 1748 */ 1749 _scrollParallaxBackgrounds: function() 1750 { 1751 $('.fl-row-bg-parallax').each(FLBuilderLayout._scrollParallaxBackground); 1752 }, 1753 1754 /** 1755 * Fires when the window is scrolled to adjust 1756 * a single parallax background. 1757 * 1758 * @since 1.1.4 1759 * @access private 1760 * @method _scrollParallaxBackground 1761 */ 1762 _scrollParallaxBackground: function() 1763 { 1764 var win = $(window), 1765 row = $(this), 1766 content = row.find('> .fl-row-content-wrap'), 1767 speed = row.data('parallax-speed'), 1768 offset = content.offset(), 1769 yPos = -((win.scrollTop() - offset.top) / speed), 1770 initialOffset = ( row.data('parallax-offset') != null ) ? row.data('parallax-offset') : 0, 1771 totalOffset = yPos - initialOffset; 1772 1773 content.css('background-position', 'center ' + totalOffset + 'px'); 1774 }, 1775 1776 /** 1777 * Initializes all video backgrounds. 1778 * 1779 * @since 1.6.3.3 1780 * @access private 1781 * @method _initBgVideos 1782 */ 1783 _initBgVideos: function() 1784 { 1785 $('.fl-bg-video').each(FLBuilderLayout._initBgVideo); 1786 }, 1787 1788 /** 1789 * Initializes a video background. 1790 * 1791 * @since 1.6.3.3 1792 * @access private 1793 * @method _initBgVideo 1794 */ 1795 _initBgVideo: function() 1796 { 1797 var wrap = $( this ), 1798 width = wrap.data( 'width' ), 1799 height = wrap.data( 'height' ), 1800 mp4 = wrap.data( 'mp4' ), 1801 youtube = wrap.data( 'youtube'), 1802 vimeo = wrap.data( 'vimeo'), 1803 mp4Type = wrap.data( 'mp4-type' ), 1804 webm = wrap.data( 'webm' ), 1805 webmType = wrap.data( 'webm-type' ), 1806 fallback = wrap.data( 'fallback' ), 1807 loaded = wrap.data( 'loaded' ), 1808 videoMobile = wrap.data( 'video-mobile' ), 1809 playPauseButton = wrap.find('.fl-bg-video-play-pause-control'), 1810 fallbackTag = '', 1811 videoTag = null, 1812 mp4Tag = null, 1813 webmTag = null; 1814 1815 // Return if the video has been loaded for this row. 1816 if ( loaded ) { 1817 return; 1818 } 1819
1820 videoTag = $( '<video autoplay loop muted playsinline></video>' ); 1821 1822 /** 1823 * Add poster image (fallback image) 1824 */ 1825 if( 'undefined' != typeof fallback && '' != fallback ) { 1826 videoTag.attr( 'poster', 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7' ) 1827 videoTag.css({ 1828 backgroundImage: 'url("' + fallback + '")', 1829 backgroundColor: 'transparent', 1830 backgroundRepeat: 'no-repeat', 1831 backgroundSize: 'cover', 1832 backgroundPosition: 'center center', 1833 }) 1834 } 1835 1836 // MP4 Source Tag 1837 if ( 'undefined' != typeof mp4 && '' != mp4 ) { 1838 1839 mp4Tag = $( '<source />' ); 1840 mp4Tag.attr( 'src', mp4 ); 1841 mp4Tag.attr( 'type', mp4Type ); 1842 1843 videoTag.append( mp4Tag ); 1844 } 1845 // WebM Source Tag 1846 if ( 'undefined' != typeof webm && '' != webm ) { 1847 1848 webmTag = $( '<source />' ); 1849 webmTag.attr( 'src', webm ); 1850 webmTag.attr( 'type', webmType ); 1851 1852 videoTag.append( webmTag ); 1853 } 1854 1855 // This is either desktop, or mobile is enabled. 1856 if ( ! FLBuilderLayout._isMobile() || ( FLBuilderLayout._isMobile() && "yes" == videoMobile ) ) { 1857 if ( 'undefined' != typeof youtube ) { 1858 FLBuilderLayout._initYoutubeBgVideo.apply( this ); 1859 } 1860 else if ( 'undefined' != typeof vimeo ) { 1861 FLBuilderLayout._initVimeoBgVideo.apply( this ); 1862 } 1863 else { 1864 wrap.append( videoTag ); 1865 1866 if ( playPauseButton.length > 0 ) { 1867 var video = videoTag[0]; 1868 1869 playPauseButton.on( 'click', { video: video }, function(e) { 1870 var video = e.data.video; 1871 1872 if ( video.paused ) { 1873 video.play(); 1874 } else { 1875 video.pause(); 1876 } 1877 } ); 1878 1879 $( video ).on( 'play playing', function () { 1880 playPauseButton.removeClass( 'fa-play' ).addClass( 'fa-pause' ); 1881 } ); 1882 1883 $( video ).on( 'pause ended waiting', function () { 1884 playPauseButton.removeClass( 'fa-pause' ).addClass( 'fa-play' ); 1885 } ); 1886 } 1887 } 1888 } 1889 else { 1890 // if we are here, it means we are on mobile and NO is set so remove video src and use fallback 1891 videoTag.attr('src', '') 1892 wrap.append( videoTag ); 1893 } 1894 1895 // Mark this video as loaded. 1896 wrap.data('loaded', true); 1897 }, 1898 1899 /** 1900 * Initializes Youtube video background 1901 * 1902 * @since 1.9 1903 * @access private 1904 * @method _initYoutubeBgVideo 1905 */ 1906 _initYoutubeBgVideo: function() 1907 { 1908 var playerWrap = $(this), 1909 videoId = playerWrap.data('video-id'), 1910 videoPlayer = playerWrap.find('.fl-bg-video-player'), 1911 enableAudio = playerWrap.data('enable-audio'), 1912 audioButton = playerWrap.find('.fl-bg-video-audio'), 1913 playPauseButton = playerWrap.find('.fl-bg-video-play-pause-control'), 1914 startTime = 'undefined' !== typeof playerWrap.data('start') ? playerWrap.data('start') : 0, 1915 startTime = 'undefined' !== typeof playerWrap.data('t') && startTime === 0 ? playerWrap.data('t') : startTime, 1916 endTime = 'undefined' !== typeof playerWrap.data('end') ? playerWrap.data('end') : 0, 1917 loop = 'undefined' !== typeof playerWrap.data('loop') ? playerWrap.data('loop') : 1, 1918 stateCount = 0, 1919 player,fallback_showing; 1920 1921 if ( videoId ) { 1922 fallback = playerWrap.data('fallback') || false 1923 if( fallback ) { 1924 playerWrap.find('iframe').remove() 1925 fallbackTag = $( '<div></div>' ); 1926 fallbackTag.addClass( 'fl-bg-video-fallback' ); 1927 fallbackTag.css( 'background-image', 'url(' + playerWrap.data('fallback') + ')' ); 1928 fallbackTag.css( 'background-size', 'cover' ); 1929 fallbackTag.css( 'transition', 'background-image 1s') 1930 playerWrap.append( fallbackTag ); 1931 fallback_showing = true; 1932 } 1933 FLBuilderLayout._onYoutubeApiReady( function( YT ) { 1934 setTimeout( function() { 1935 1936 player = new YT.Player( videoPlayer[0], { 1937 videoId: videoId, 1938 events: { 1939 onReady: function(event) { 1940 if ( "no" === enableAudio || FLBuilderLayout._isMobile() ) { 1941 event.target.mute(); 1942 } 1943 else if ( "yes" === enableAudio && event.target.isMuted ) { 1944 event.target.unMute(); 1945 } 1946 1947 // Store an instance to a parent 1948 playerWrap.data('YTPlayer', player); 1949 FLBuilderLayout._resizeYoutubeBgVideo.apply(playerWrap); 1950 1951 // Queue the video. 1952 event.target.playVideo(); 1953 1954 if ( audioButton.length > 0 && ! FLBuilderLayout._isMobile() ) {
1955 audioButton.on( 'click', {button: audioButton, player: player}, FLBuilderLayout._toggleBgVideoAudio ); 1956 } 1957 1958 if ( playPauseButton.length > 0 ) { 1959 playPauseButton.on( 'click', {player: player}, function(e) { 1960 var player = e.data.player; 1961 1962 if ( 1 === player.getPlayerState() ) { 1963 player.pauseVideo(); 1964 } else { 1965 player.playVideo(); 1966 } 1967 }); 1968 } 1969 }, 1970 onStateChange: function( event ) { 1971 1972 if ( event.data === 1 ) { 1973 if ( fallback_showing ) { 1974 $( '.fl-bg-video-fallback' ).css( 'background-image', 'url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)' ) 1975 } 1976 } 1977 // Manual check if video is not playable in some browsers. 1978 // StateChange order: [-1, 3, -1] 1979 if ( stateCount < 4 ) { 1980 stateCount++; 1981 } 1982 1983 // Comply with the audio policy in some browsers like Chrome and Safari. 1984 if ( stateCount > 1 && -1 === event.data && "yes" === enableAudio ) { 1985 player.mute(); 1986 player.playVideo(); 1987 audioButton.show(); 1988 } 1989 1990 if ( event.data === YT.PlayerState.ENDED && 1 === loop ) { 1991 if ( startTime > 0 ) { 1992 player.seekTo( startTime ); 1993 } 1994 else { 1995 player.playVideo(); 1996 } 1997 } 1998 1999 if ( event.data === YT.PlayerState.PLAYING ) { 2000 playPauseButton.removeClass( 'fa-play' ).addClass( 'fa-pause' ); 2001 } else if ( event.data === YT.PlayerState.PAUSED ) { 2002 playPauseButton.removeClass( 'fa-pause' ).addClass( 'fa-play' ); 2003 } else if ( event.data === YT.PlayerState.BUFFERING ) { 2004 playPauseButton.removeClass( 'fa-play' ).addClass( 'fa-pause' ); 2005 } else if ( event.data === YT.PlayerState.CUED ) { 2006 playPauseButton.removeClass( 'fa-pause' ).addClass( 'fa-play' ); 2007 } else if ( event.data === YT.PlayerState.ENDED ) { 2008 playPauseButton.removeClass( 'fa-pause' ).addClass( 'fa-play' ); 2009 } 2010 }, 2011 onError: function(event) { 2012 console.info('YT Error: ' + event.data) 2013 FLBuilderLayout._onErrorYoutubeVimeo(playerWrap) 2014 } 2015 }, 2016 playerVars: { 2017 playsinline: FLBuilderLayout._isMobile() ? 1 : 0, 2018 controls: 0, 2019 showinfo: 0, 2020 rel : 0, 2021 start: startTime, 2022 end: endTime, 2023 } 2024 } ); 2025 }, 1 ); 2026 } ); 2027 } 2028 }, 2029 2030 /** 2031 * On youtube or vimeo error show the fallback image if available. 2032 * @since 2.0.7 2033 */ 2034 _onErrorYoutubeVimeo: function(playerWrap) { 2035 2036 fallback = playerWrap.data('fallback') || false 2037 if( ! fallback ) { 2038 return false; 2039 } 2040 playerWrap.find('iframe').remove() 2041 fallbackTag = $( '<div></div>' ); 2042 fallbackTag.addClass( 'fl-bg-video-fallback' ); 2043 fallbackTag.css( 'background-image', 'url(' + playerWrap.data('fallback') + ')' ); 2044 playerWrap.append( fallbackTag ); 2045 }, 2046 2047 /** 2048 * Check if Youtube API has been downloaded 2049 * 2050 * @since 1.9 2051 * @access private 2052 * @method _onYoutubeApiReady 2053 * @param {Function} callback Method to call when YT API has been loaded 2054 */ 2055 _onYoutubeApiReady: function( callback ) { 2056 if ( window.YT && YT.loaded ) { 2057 callback( YT ); 2058 } else { 2059 // If not ready check again by timeout.. 2060 setTimeout( function() { 2061 FLBuilderLayout._onYoutubeApiReady( callback ); 2062 }, 350 ); 2063 } 2064 }, 2065 2066 /** 2067 * Initializes Vimeo video background 2068 * 2069 * @since 1.9 2070 * @access private 2071 * @method _initVimeoBgVideo 2072 */ 2073 _initVimeoBgVideo: function() 2074 { 2075 var playerWrap = $(this), 2076 videoId = playerWrap.data('video-id'), 2077 videoHash = playerWrap.data('video-hash'), 2078 videoPlayer = playerWrap.find('.fl-bg-video-player'), 2079 enableAudio = playerWrap.data('enable-audio'), 2080 audioButton = playerWrap.find('.fl-bg-video-audio'), 2081 playPauseButton = playerWrap.find('.fl-bg-video-play-pause-control'), 2082 playerState = '', 2083 player, 2084 width = playerWrap.outerWidth(), 2085 ua = navigator.userAgent; 2086 2087 if ( typeof Vimeo !== 'undefined' && videoId ) { 2088 2089 const vimOptions = { 2090 loop : true, 2091 title : false, 2092 portrait : false, 2093 background : true, 2094 autopause : false, 2095 muted : true, 2096 }; 2097 2098 if ( videoHash.length ) { 2099 vimOptions.url = `https://player.vimeo.com/video/${ videoId }?h=${ videoHash }`; 2100 } else { 2101 vimOptions.id = videoId; 2102 } 2103 2104 player = new Vimeo.Player(videoPlayer[0], vimOptions ); 2105 playerWrap.data('VMPlayer', player); 2106 if ( "no" === enableAudio ) { 2107 player.setVolume(0); 2108 } 2109 else if ("yes" === enableAudio ) { 2110 // Chrome, Safari, Firefox have audio policy restrictions for autoplay videos. 2111 if ( ua.indexOf("Safari") > -1 || ua.indexOf("Chrome") > -1 || ua.indexOf("Firefox") > -1 ) { 2112 player.setVolume(0); 2113 audioButton.show(); 2114 } 2115 else { 2116 player.setVolume(1); 2117 } 2118 } 2119 2120 player.play().catch(function(error) { 2121 FLBuilderLayout._onErrorYoutubeVimeo(playerWrap) 2122 }); 2123 2124 if ( audioButton.length > 0 ) {
2125 audioButton.on( 'click', {button: audioButton, player: player}, FLBuilderLayout._toggleBgVideoAudio ); 2126 } 2127 2128 player.on( 'play', function() { 2129 playerState = 'play'; 2130 playPauseButton.removeClass( 'fa-play' ).addClass( 'fa-pause' ); 2131 } ); 2132 player.on( 'pause', function() { 2133 playerState = 'pause'; 2134 playPauseButton.removeClass( 'fa-pause' ).addClass( 'fa-play' ); 2135 } ); 2136 player.on( 'ended', function() { 2137 playerState = 'ended'; 2138 playPauseButton.removeClass( 'fa-pause' ).addClass( 'fa-play' ); 2139 } ); 2140 player.on( 'bufferstart', function() { 2141 playerState = 'bufferstart'; 2142 playPauseButton.removeClass( 'fa-play' ).addClass( 'fa-pause' ); 2143 } ); 2144 2145 if ( playPauseButton.length > 0 ) { 2146 playPauseButton.on( 'click', { player: player }, function( e ) { 2147 var player = e.data.player; 2148 2149 if ( playerState === 'play' ) { 2150 player.pause(); 2151 } else { 2152 player.play(); 2153 } 2154 } ); 2155 } 2156 } 2157 }, 2158 2159 /** 2160 * Mute / unmute audio on row's video background. 2161 * It works for both Youtube and Vimeo. 2162 * 2163 * @since 2.1.3 2164 * @access private 2165 * @method _toggleBgVideoAudio 2166 * @param {Object} e Method arguments 2167 */ 2168 _toggleBgVideoAudio: function( e ) { 2169 var player = e.data.player, 2170 control = e.data.button.find('.fl-audio-control'); 2171 2172 if ( control.hasClass( 'fa-volume-off' ) ) { 2173 // Unmute 2174 control 2175 .removeClass( 'fa-volume-off' ) 2176 .addClass( 'fa-volume-up' ); 2177 e.data.button.find( '.fa-times' ).hide(); 2178 2179 if ( 'function' === typeof player.unMute ) { 2180 player.unMute(); 2181 } 2182 else { 2183 player.setVolume( 1 ); 2184 } 2185 } 2186 else { 2187 // Mute 2188 control 2189 .removeClass( 'fa-volume-up' ) 2190 .addClass( 'fa-volume-off' ); 2191 e.data.button.find( '.fa-times' ).show(); 2192 2193 if ( 'function' === typeof player.unMute ) { 2194 player.mute(); 2195 } 2196 else { 2197 player.setVolume( 0 ); 2198 } 2199 } 2200 }, 2201 2202 /** 2203 * Fires when there is an error loading a video 2204 * background source and shows the fallback. 2205 * 2206 * @since 1.6.3.3 2207 * @access private 2208 * @method _videoBgSourceError 2209 * @param {Object} e An event object 2210 * @deprecated 2.0.3 2211 */ 2212 _videoBgSourceError: function( e ) 2213 { 2214 var source = $( e.target ), 2215 wrap = source.closest( '.fl-bg-video' ), 2216 vid = wrap.find( 'video' ), 2217 fallback = wrap.data( 'fallback' ), 2218 fallbackTag = ''; 2219 source.remove(); 2220 2221 if ( vid.find( 'source' ).length ) { 2222 // Don't show the fallback if we still have other sources to check. 2223 return; 2224 } else if ( '' !== fallback ) { 2225 fallbackTag = $( '<div></div>' ); 2226 fallbackTag.addClass( 'fl-bg-video-fallback' ); 2227 fallbackTag.css( 'background-image', 'url(' + fallback + ')' ); 2228 wrap.append( fallbackTag ); 2229 vid.remove(); 2230 } 2231 }, 2232 2233 /** 2234 * Fires when the window is resized to resize 2235 * all video backgrounds. 2236 * 2237 * @since 1.1.4 2238 * @access private 2239 * @method _resizeBgVideos 2240 */ 2241 _resizeBgVideos: function() 2242 { 2243 $('.fl-bg-video').each( function() { 2244 2245 FLBuilderLayout._resizeBgVideo.apply( this ); 2246 2247 if ( $( this ).parent().find( 'img' ).length > 0 ) { 2248 $( this ).parent().imagesLoaded( $.proxy( FLBuilderLayout._resizeBgVideo, this ) ); 2249 } 2250 } ); 2251 }, 2252 2253 /** 2254 * Fires when the window is resized to resize 2255 * a single video background. 2256 * 2257 * @since 1.1.4 2258 * @access private 2259 * @method _resizeBgVideo 2260 */ 2261 _resizeBgVideo: function() 2262 { 2263 if ( 0 === $( this ).find( 'video' ).length && 0 === $( this ).find( 'iframe' ).length ) { 2264 return; 2265 } 2266 2267 var wrap = $(this), 2268 wrapHeight = wrap.outerHeight(), 2269 wrapWidth = wrap.outerWidth(), 2270 vid = wrap.find('video'), 2271 vidHeight = wrap.data('height'), 2272 vidWidth = wrap.data('width'), 2273 newWidth = wrapWidth, 2274 newHeight = Math.round(vidHeight * wrapWidth/vidWidth), 2275 newLeft = 0, 2276 newTop = 0, 2277 iframe = wrap.find('iframe'), 2278 isRowFullHeight = $(this).closest('.fl-row-bg-video').hasClass('fl-row-full-height'), 2279 vidCSS = { 2280 top: '50%', 2281 left: '50%', 2282 transform: 'translate(-50%,-50%)', 2283 }; 2284 2285 if ( vid.length ) { 2286 if(vidHeight === '' || typeof vidHeight === 'undefined' || vidWidth === '' || typeof vidWidth === 'undefined') { 2287 vid.css({ 2288 'left' : '0px', 2289 'top' : '0px', 2290 'width' : newWidth + 'px' 2291 }); 2292 2293 // Try to set the actual video dimension on 'loadedmetadata' when using URL as video source 2294 vid.on('loadedmetadata', FLBuilderLayout._resizeOnLoadedMeta); 2295 2296 return; 2297 } 2298 2299 if ( ! isRowFullHeight ) { 2300 if ( newHeight < wrapHeight ) { 2301 newHeight = wrapHeight; 2302 newWidth = vidHeight ? Math.round(vidWidth * wrapHeight/vidHeight) : newWidth; 2303 newLeft = -((newWidth - wrapWidth) / 2); 2304 } 2305 else { 2306 newTop = -((newHeight - wrapHeight)/2); 2307 } 2308 vidCSS = { 2309 left : newLeft + 'px', 2310 top : newTop + 'px', 2311 height : newHeight + 'px', 2312 width : newWidth + 'px', 2313 } 2314 } 2315 2316 vid.css( vidCSS ); 2317 2318 } 2319 else if ( iframe.length ) { 2320 2321 // Resize Youtube video player within iframe tag 2322 if ( typeof wrap.data('youtube') !== 'undefined' ) { 2323 FLBuilderLayout._resizeYoutubeBgVideo.apply(this); 2324 } 2325 } 2326 }, 2327 2328 /** 2329 * Fires when video meta has been loaded. 2330 * This will be Triggered when width/height attributes were not specified during video background resizing. 2331 * 2332 * @since 1.8.5 2333 * @access private 2334 * @method _resizeOnLoadedMeta 2335 */ 2336 _resizeOnLoadedMeta: function(){ 2337 var video = $(this), 2338 wrapHeight = video.parent().outerHeight(), 2339 wrapWidth = video.parent().outerWidth(), 2340 vidWidth = video[0].videoWidth, 2341 vidHeight = video[0].videoHeight, 2342 newHeight = Math.round(vidHeight * wrapWidth/vidWidth), 2343 newWidth = wrapWidth, 2344 newLeft = 0, 2345 newTop = 0; 2346 2347 if(newHeight < wrapHeight) { 2348 newHeight = wrapHeight; 2349 newWidth = Math.round(vidWidth * wrapHeight/vidHeight); 2350 newLeft = -((newWidth - wrapWidth)/2); 2351 } 2352 else { 2353 newTop = -((newHeight - wrapHeight)/2); 2354 } 2355 2356 video.parent().data('width', vidWidth); 2357 video.parent().data('height', vidHeight); 2358 2359 video.css({ 2360 'left' : newLeft + 'px', 2361 'top' : newTop + 'px', 2362 'width' : newWidth + 'px', 2363 'height' : newHeight + 'px' 2364 }); 2365 }, 2366 2367 /** 2368 * Fires when the window is resized to resize 2369 * a single Youtube video background. 2370 * 2371 * @since 1.9 2372 * @access private 2373 * @method _resizeYoutubeBgVideo 2374 */ 2375 _resizeYoutubeBgVideo: function() 2376 { 2377 var wrap = $(this), 2378 wrapWidth = wrap.outerWidth(), 2379 wrapHeight = wrap.outerHeight(), 2380 player = wrap.data('YTPlayer'), 2381 video = player ? player.getIframe() : null, 2382 aspectRatioSetting = '16:9', // Medium 2383 aspectRatioArray = aspectRatioSetting.split( ':' ),
2384 aspectRatio = aspectRatioArray[0] / aspectRatioArray[1], 2385 ratioWidth = wrapWidth / aspectRatio, 2386 ratioHeight = wrapHeight * aspectRatio, 2387 isWidthFixed = wrapWidth / wrapHeight > aspectRatio, 2388 width = isWidthFixed ? wrapWidth : ratioHeight, 2389 height = isWidthFixed ? ratioWidth : wrapHeight; 2390 2391 if ( video ) { 2392 $(video).width( width ).height( height ); 2393 } 2394 }, 2395 2396 /** 2397 * Opens a tab or accordion item if the browser hash is set 2398 * to the ID of one on the page. 2399 * 2400 * @since 1.6.0 2401 * @access private 2402 * @method _initHash 2403 */ 2404 _initHash: function() 2405 { 2406 var hash = window.location.hash.replace( '#', '' ).split( '/' ).shift(), 2407 element = null, 2408 tabs = null, 2409 responsiveLabel = null, 2410 tabIndex = null, 2411 label = null; 2412 2413 if ( '' !== hash ) { 2414 2415 try { 2416 2417 element = $( '#' + hash ); 2418 2419 if ( element.length > 0 ) { 2420 2421 if ( element.hasClass( 'fl-accordion-item' ) ) { 2422 setTimeout( function() { 2423 element.find( '.fl-accordion-button' ).trigger( 'click' ); 2424 }, 100 ); 2425 } 2426 if ( element.hasClass( 'fl-tabs-panel' ) ) { 2427 setTimeout( function() { 2428 tabs = element.closest( '.fl-tabs' ); 2429 responsiveLabel = element.find( '.fl-tabs-panel-label' ); 2430 tabIndex = responsiveLabel.data( 'index' ); 2431 label = tabs.find( '.fl-tabs-labels .fl-tabs-label[data-index=' + tabIndex + ']' ); 2432 2433 label[0].click(); 2434 FLBuilderLayout._scrollToElement(element); 2435 }, 100 ); 2436 } 2437 } 2438 } 2439 catch( e ) {} 2440 } 2441 }, 2442 2443 /** 2444 * Adds a visually-hidden "(opens in new tab)" notice to links 2445 * inside a builder layout that target a new tab, and removes it 2446 * from ones that don't. Runs on the live DOM only, across every 2447 * module, so the notice is never part of any saved content. Covers 2448 * both real anchors (`target` attribute) and non-anchor elements 2449 * like the Box module's `role="link"` div, which carries the same 2450 * intent via a `data-link-target` attribute instead. 2451 * 2452 * @since 2.12 2453 * @access private 2454 * @method _initLinkNotices 2455 */ 2456 _initLinkNotices: function() 2457 { 2458 $( '.fl-builder-content a[target], .fl-builder-content [role="link"][data-link-target]' ).each( function() { 2459 var link = $( this ), 2460 notice = link.children( 'span.fl-new-tab-notice' ), 2461 target = link.attr( 'target' ) || link.attr( 'data-link-target' ); 2462 2463 if ( '_blank' === target ) { 2464 if ( 0 === notice.length ) { 2465 link.append( '<span class="fl-new-tab-notice sr-only">' + FLBuilderLayoutConfig.i18n.opensInNewTab + '</span>' ); 2466 } 2467 } else if ( notice.length > 0 ) { 2468 notice.remove(); 2469 } 2470 }); 2471 }, 2472 2473 /** 2474 * Initializes all anchor links on the page for smooth scrolling. 2475 * 2476 * @since 1.4.9 2477 * @access private 2478 * @method _initAnchorLinks 2479 */ 2480 _initAnchorLinks: function() 2481 { 2482 $( 'a, [role="link"]' ).each( FLBuilderLayout._initAnchorLink ); 2483 }, 2484 2485 /** 2486 * Initializes a single anchor link for smooth scrolling. 2487 * 2488 * @since 1.4.9 2489 * @access private 2490 * @method _initAnchorLink 2491 */ 2492 _initAnchorLink: function() 2493 { 2494 var link = $( this ), 2495 href = link.data( 'url' ) ? link.data( 'url' ) : link.attr( 'href' ), 2496 target = link.data( 'url' ) ? new URL( href, window.location.href ) : this, 2497 loc = window.location, 2498 id = null, 2499 element = null, 2500 flNode = false; 2501 2502 if ( 'undefined' != typeof href && href.indexOf( '#' ) > -1 && link.closest('svg').length < 1 ) { 2503 2504 if ( loc.pathname.replace( /^\//, '' ) == target.pathname.replace( /^\//, '' ) && loc.hostname == target.hostname ) { 2505 2506 try { 2507 2508 id = href.split( '#' ).pop(); 2509 // If there is no ID then we have nowhere to look 2510 // Fixes a quirk in jQuery and FireFox 2511 if( ! id ) { 2512 return; 2513 } 2514 element = $( '#' + id ); 2515 2516 if ( element.length > 0 ) { 2517 flNode = element.hasClass( 'fl-row' ) || element.hasClass( 'fl-col' ) || element.hasClass( 'fl-module' ); 2518 if ( !element.hasClass( 'fl-no-scroll' ) && ( link.hasClass( 'fl-scroll-link' ) || flNode ) ) { 2519 $( link ).on( 'click', FLBuilderLayout._scrollToElementOnLinkClick ); 2520 } 2521 if ( element.hasClass( 'fl-accordion-item' ) ) { 2522 $( link ).on( 'click', FLBuilderLayout._scrollToAccordionOnLinkClick ); 2523 } 2524 if ( element.hasClass( 'fl-tabs-panel' ) ) { 2525 $( link ).on( 'click', FLBuilderLayout._scrollToTabOnLinkClick ); 2526 } 2527 } 2528 } 2529 catch( e ) {} 2530 } 2531 } 2532 }, 2533 2534 /** 2535 * Scrolls to an element when an anchor link is clicked. 2536 * 2537 * @since 1.4.9 2538 * @access private 2539 * @method _scrollToElementOnLinkClick 2540 * @param {Object} e An event object. 2541 * @param {Function} callback A function to call when the scroll is complete. 2542 */ 2543 _scrollToElementOnLinkClick: function( e, callback ) 2544 { 2545 var attribute = $( this ).data( 'url' ) ? $( this ).data( 'url' ) : $( this ).attr( 'href' ); 2546 var element = $( '#' + attribute.split( '#' ).pop() ); 2547 2548 FLBuilderLayout._scrollToElement( element, callback ); 2549 2550 e.preventDefault(); 2551 }, 2552 2553 /** 2554 * Scrolls to an element. 2555 * 2556 * @since 1.6.4.5 2557 * @access private 2558 * @method _scrollToElement 2559 * @param {Object} element The element to scroll to. 2560 * @param {Function} callback A function to call when the scroll is complete. 2561 */ 2562 _scrollToElement: function( element, callback ) 2563 { 2564 var config = FLBuilderLayoutConfig.anchorLinkAnimations, 2565 dest = 0, 2566 win = $( window ), 2567 doc = $( document ); 2568 2569 if ( element.length > 0 ) { 2570 2571 if ( 'fixed' === element.css('position') || 'fixed' === element.parent().css('position') ) { 2572 dest = element.position().top; 2573 } 2574 else if ( element.offset().top > doc.height() - win.height() ) { 2575 dest = doc.height() - win.height(); 2576 } 2577 else { 2578 dest = element.offset().top - config.offset; 2579 } 2580 2581 $( 'html, body' ).stop( true ).animate( { scrollTop: dest }, config.duration, config.easing, function() { 2582 2583 if ( 'undefined' != typeof callback ) { 2584 callback(); 2585 } 2586 2587 if ( undefined != element.attr( 'id' ) && window.location.hash !== '#' + element.attr( 'id' ) ) { 2588 2589 var firefox_version = window.navigator.userAgent.match( /Firefox\/(\d+)\./ ), 2590 firefox_version = firefox_version ? parseInt( firefox_version[1], 10 ) : null; 2591 2592 if ( firefox_version !== null && firefox_version < 135 ) { 2593 window.location.hash = element.attr( 'id' ); 2594 } else { 2595 if ( history.pushState ) { 2596 history.pushState( null, null, '#' + element.attr( 'id' ) ); 2597 } else { 2598 window.location.hash = element.attr( 'id' ); 2599 } 2600 } 2601 } 2602 } ); 2603 } 2604 }, 2605 2606 /** 2607 * Scrolls to an accordion item when a link is clicked. 2608 * 2609 * @since 1.5.9 2610 * @access private 2611 * @method _scrollToAccordionOnLinkClick 2612 * @param {Object} e An event object. 2613 */ 2614 _scrollToAccordionOnLinkClick: function( e ) 2615 { 2616 var element = $( '#' + $( this ).attr( 'href' ).split( '#' ).pop() ); 2617 2618 if ( element.length > 0 ) { 2619 2620 var callback = function() { 2621 if ( element ) { 2622 element.find( '.fl-accordion-button' ).trigger( 'click' ); 2623 element = false;
2624 } 2625 }; 2626 2627 FLBuilderLayout._scrollToElementOnLinkClick.call( this, e, callback ); 2628 } 2629 }, 2630 2631 /** 2632 * Scrolls to a tab panel when a link is clicked. 2633 * 2634 * @since 1.5.9 2635 * @access private 2636 * @method _scrollToTabOnLinkClick 2637 * @param {Object} e An event object. 2638 */ 2639 _scrollToTabOnLinkClick: function( e ) 2640 { 2641 var element = $( '#' + $( this ).attr( 'href' ).split( '#' ).pop() ), 2642 tabs = null, 2643 label = null, 2644 responsiveLabel = null; 2645 2646 if ( element.length > 0 ) { 2647 2648 tabs = element.closest( '.fl-tabs' ); 2649 responsiveLabel = element.find( '.fl-tabs-panel-label' ); 2650 tabIndex = responsiveLabel.data( 'index' ); 2651 label = tabs.find( '.fl-tabs-labels .fl-tabs-label[data-index=' + tabIndex + ']' ); 2652 2653 if ( responsiveLabel.is( ':visible' ) ) { 2654 2655 var callback = function() { 2656 if ( element ) { 2657 responsiveLabel.trigger( $.Event( 'click', { which: 1 } ) ); 2658 } 2659 }; 2660 2661 FLBuilderLayout._scrollToElementOnLinkClick.call( this, e, callback ); 2662 } 2663 else { 2664 label[0].click(); 2665 FLBuilderLayout._scrollToElement( element ); 2666 } 2667 2668 e.preventDefault(); 2669 } 2670 }, 2671 2672 /** 2673 * Initializes all builder forms on a page. 2674 * 2675 * @since 1.5.4 2676 * @access private 2677 * @method _initForms 2678 */ 2679 _initForms: function() 2680 { 2681 if ( ! FLBuilderLayout._hasPlaceholderSupport ) { 2682 $( '.fl-form-field input' ).each( FLBuilderLayout._initFormFieldPlaceholderFallback ); 2683 } 2684 2685 $( '.fl-form-field input' ).on( 'focus', FLBuilderLayout._clearFormFieldError ); 2686 }, 2687 2688 /** 2689 * Checks to see if the current device has HTML5 2690 * placeholder support. 2691 * 2692 * @since 1.5.4 2693 * @access private 2694 * @method _hasPlaceholderSupport 2695 * @return {Boolean} 2696 */ 2697 _hasPlaceholderSupport: function() 2698 { 2699 var input = document.createElement( 'input' ); 2700 2701 return 'undefined' != input.placeholder; 2702 }, 2703 2704 /** 2705 * Initializes the fallback for when placeholders aren't supported. 2706 * 2707 * @since 1.5.4 2708 * @access private 2709 * @method _initFormFieldPlaceholderFallback 2710 */ 2711 _initFormFieldPlaceholderFallback: function() 2712 { 2713 var field = $( this ), 2714 val = field.val(), 2715 placeholder = field.attr( 'placeholder' ); 2716 2717 if ( 'undefined' != placeholder && '' === val ) { 2718 field.val( placeholder ); 2719 field.on( 'focus', FLBuilderLayout._hideFormFieldPlaceholderFallback ); 2720 field.on( 'blur', FLBuilderLayout._showFormFieldPlaceholderFallback ); 2721 } 2722 }, 2723 2724 /** 2725 * Hides a fallback placeholder on focus. 2726 * 2727 * @since 1.5.4 2728 * @access private 2729 * @method _hideFormFieldPlaceholderFallback 2730 */ 2731 _hideFormFieldPlaceholderFallback: function() 2732 { 2733 var field = $( this ), 2734 val = field.val(), 2735 placeholder = field.attr( 'placeholder' ); 2736 2737 if ( val == placeholder ) { 2738 field.val( '' ); 2739 } 2740 }, 2741 2742 /** 2743 * Shows a fallback placeholder on blur. 2744 * 2745 * @since 1.5.4 2746 * @access private 2747 * @method _showFormFieldPlaceholderFallback 2748 */ 2749 _showFormFieldPlaceholderFallback: function() 2750 { 2751 var field = $( this ), 2752 val = field.val(), 2753 placeholder = field.attr( 'placeholder' ); 2754 2755 if ( '' === val ) { 2756 field.val( placeholder ); 2757 } 2758 }, 2759 2760 /** 2761 * Clears a form field error message. 2762 * 2763 * @since 1.5.4 2764 * @access private 2765 * @method _clearFormFieldError 2766 */ 2767 _clearFormFieldError: function() 2768 { 2769 var field = $( this ); 2770 2771 field.removeAttr( 'aria-invalid' ); 2772 field.removeClass( 'fl-form-error' ); 2773 const message = field.attr('aria-describedby'); 2774 message ? $( '#' + message ).hide() : field.siblings( '.fl-form-error-message' ).hide(); 2775 }, 2776 2777 /** 2778 * Init Row Shape Layer's height. 2779 * 2780 * @since 2.5.3 2781 * @access private 2782 * @method _initRowShapeLayerHeight 2783 */ 2784 _initRowShapeLayerHeight: function () { 2785 FLBuilderLayout._adjustRowShapeLayerHeight(); 2786 $( window ).on( 'resize', FLBuilderLayout._adjustRowShapeLayerHeight ); 2787 }, 2788 2789 /** 2790 * Set parent column width of nested columns when it's zero or blank. 2791 * 2792 * @since 2.7.4 2793 * @access private 2794 * @method _initNestedColsWidth 2795 */ 2796 _initNestedColsWidth: function() 2797 { 2798 var nestedCols = $( '.fl-col-has-cols' ); 2799 2800 if ( nestedCols.length <= 0 ) { 2801 return; 2802 } 2803 2804 $( nestedCols ).each( function(index, col ){ 2805 if ( $( col ).width() <= 0 ) { 2806 $( col ).css( 'width', FLBuilderLayoutConfig.emptyColWidth ); 2807 } 2808 }); 2809 }, 2810 2811 /** 2812 * Adjust Row Shape Layer's height to fix to remove the fine line that appears on certain screen sizes. 2813 * 2814 * @since 2.5.3 2815 * @access private 2816 * @method _adjustRowShapeLayerHeight 2817 */
2818 _adjustRowShapeLayerHeight: function() { 2819 var rowShapeLayers = $('.fl-builder-shape-layer'); 2820 2821 $( rowShapeLayers ).each(function (index) { 2822 var rowShapeLayer = $(this), 2823 shape = $(rowShapeLayer).find('svg'), 2824 height = shape.height(), 2825 excludeShapes = '.fl-builder-shape-circle, .fl-builder-shape-dot-cluster, .fl-builder-shape-topography, .fl-builder-shape-rect'; 2826 2827 if ( ! rowShapeLayer.is( excludeShapes ) ) { 2828 $(shape).css('height', Math.ceil( height ) ); 2829 } 2830 }); 2831 }, 2832 _string_to_slug: function( str ) { 2833 str = str.replace(/^\s+|\s+$/g, ''); // trim 2834 if ( 'undefined' == typeof window._fl_string_to_slug_regex ) { 2835 regex = new RegExp('[^a-zA-Z0-9\'":() !.,-_|]', 'g'); 2836 } else { 2837 regex = new RegExp('[^' + window._fl_string_to_slug_regex + '\'":\(\) !.,-_|\\\p{Letter}]', 'ug'); 2838 } 2839 str = str.replace(regex, '') // remove invalid chars 2840 .replace(/\s+/g, ' '); // collapse whitespace and replace by a space 2841 return str; 2842 }, 2843 _reorderMenu: function() { 2844 if ( $('#wp-admin-bar-fl-builder-frontend-edit-link-default li').length > 1 ) { 2845 $( '#wp-admin-bar-fl-builder-frontend-duplicate-link' ) 2846 .appendTo('#wp-admin-bar-fl-builder-frontend-edit-link-default') 2847 .css( 'padding-top', '5px' ) 2848 .css( 'border-top', '2px solid #1D2125' ) 2849 .css( 'margin-top', '5px' ) 2850 } 2851 } 2852 }; 2853 2854 /* Initializes the builder layout. */ 2855 $(function(){ 2856 FLBuilderLayout.init(); 2857 }); 2858 2859})(jQuery); 2860(function($){ 2861 2862 if(typeof FLBuilderLayoutModules !== 'undefined') { 2863 return; 2864 } 2865 2866 /** 2867 * Helper class with generic logic for builder modules. 2868 * If generic module code needs to work in both the block 2869 * editor and builder, it should go here. Otherwise, it 2870 * should go on FLBuilderLayout. 2871 * 2872 * @since 2.9 2873 */ 2874 FLBuilderLayoutModules = { 2875 2876 /** 2877 * Initializes builder module logic. 2878 * 2879 * @since 2.9 2880 * @method init 2881 */ 2882 init: function() 2883 { 2884 // Only init if the builder isn't active. 2885 if ( 0 === $('.fl-builder-edit').length ) { 2886 2887 // Init module animations. 2888 FLBuilderLayoutModules._initModuleAnimations(); 2889 } 2890 }, 2891 2892 /** 2893 * Initializes module animations. 2894 * 2895 * @since 1.1.9 2896 * @access private 2897 * @method _initModuleAnimations 2898 */ 2899 _initModuleAnimations: function() 2900 { 2901 if(typeof jQuery.fn.waypoint !== 'undefined') { 2902 $('.fl-animation').each( function() { 2903 var node = $( this ), 2904 nodeTop = node.offset().top, 2905 winHeight = $( window ).height(), 2906 bodyHeight = $( 'body' ).height(), 2907 waypoint = FLBuilderLayoutConfig.waypoint, 2908 offset = '80%'; 2909 2910 if ( typeof waypoint.offset !== undefined ) { 2911 offset = FLBuilderLayoutConfig.waypoint.offset + '%'; 2912 } 2913 2914 if ( bodyHeight - nodeTop < winHeight * 0.2 ) { 2915 offset = '100%'; 2916 } 2917 2918 node.waypoint({ 2919 offset: offset, 2920 handler: FLBuilderLayoutModules._doModuleAnimation 2921 }); 2922 } ); 2923 } 2924 }, 2925 2926 /** 2927 * Runs a module animation. 2928 * 2929 * @since 1.1.9 2930 * @access private 2931 * @method _doModuleAnimation 2932 */ 2933 _doModuleAnimation: function() 2934 { 2935 var module = 'undefined' == typeof this.element ? $(this) : $(this.element), 2936 delay = parseFloat(module.data('animation-delay')), 2937 duration = parseFloat(module.data('animation-duration')); 2938 2939 if ( ! isNaN( duration ) ) { 2940 module.css( 'animation-duration', duration + 's' ); 2941 } 2942 2943 if(!isNaN(delay) && delay > 0) { 2944 setTimeout(function(){ 2945 module.addClass('fl-animated'); 2946 }, delay * 1000); 2947 } else { 2948 setTimeout(function(){ 2949 module.addClass('fl-animated'); 2950 }, 1); 2951 } 2952 } 2953 }; 2954 2955 /* Initializes builder module logic. */ 2956 $(function(){ 2957 FLBuilderLayoutModules.init(); 2958 }); 2959 2960})(jQuery); 2961 2962/* Start Global JS */ 2963 2964/* End Global JS */ 2965 2966 2967/* Start Global Node Custom JS */ 2968 2969/* End Global Node Custom JS */ 2970 2971 2972/* Start Layout Custom JS */ 2973 2974/* End Layout Custom JS */ 2975 2976 2977; 2978(function($){ 2979 BBAlert = function (settings) { 2980 2981 this.settings = settings; 2982 this.node = settings.id; 2983 this.duration = settings.duration; 2984 2985 var cookie_name = 'bbba-'+this.node; 2986 2987 2988 if ( Cookies.get(cookie_name)== '1') 2989 { 2990 var element = '.fl-node-'+this.node+' .bb-bootstrap-alerts'; 2991 jQuery(element).hide(); 2992 } 2993 var alert= this; 2994 var selector='.fl-node-'+this.node+' .close'; 2995 jQuery(selector).click(function(){ 2996 alert._setCookie(); 2997 }); 2998 }; 2999 3000 BBAlert.prototype = { 3001 settings : {}, 3002 node : '', 3003 duration : '', 3004 3005 _setCookie: function() { 3006 $this = this; 3007 var $cookie_duration = Math.round($this.duration); 3008 var $cookie_name = 'bbba-'+$this.node; 3009 Cookies.set($cookie_name,'1',{ expires: $cookie_duration }); 3010 } 3011 }; 3012 3013})(jQuery);(function($) { 3014jQuery(document).ready(function(){ 3015 3016 3017 3018 new BBAlert({ 3019 id:'nm0ud8ypz5o6', 3020 duration: 0, 3021 }); 3022 3023 }); 3024})(jQuery); 3025/* Start Layout Custom JS */ 3026 3027/* End Layout Custom JS */</script>
3027<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"8f022cdec0074a99b6b50252dd705755","r":1,"spa":2}' crossorigin="anonymous"></script>
3027 3028</body></html> 3029<!-- Page optimized by LiteSpeed Cache @2026-09-23 20:42:38 --> 3030 3031<!-- Page cached by LiteSpeed Cache 7.9.1 on 2026-09-23 20:42:38 -->
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.