CINXE.COM
<!DOCTYPE HTML><html lang="en-US"><head><meta charset="UTF-8"><meta name="content-type" content="text/html; charset=UTF-8"><title class="panspeaktitle">Resources - Palo Alto Networks</title><meta name="keywords" content="X-Portfolio"><meta name="pan-keywords" content="X-Portfolio"><meta class="panspeaksummary" name="description" content="Resources: In The News, Press Release, White Paper, Video, Webinar"><meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=yes"><link rel="canonical" href="https://www.paloaltonetworks.com/resources"/><meta name="msapplication-TileImage" content="/etc/clientlibs/pan/img/favicons2020/mstile-144x144.png"><meta name="msapplication-config" content="/etc/clientlibs/pan/img/favicons2020/browserconfig.xml"><meta name="msapplication-TileColor" content="#da532c"><meta name="theme-color" content="#8ad3de"><meta name="google-site-verification" content="yZTC3zLUAlohH5KdyGFhucj62F6WYFsceaLFqQjj3wM" /><link rel="apple-touch-icon" sizes="57x57" href="/etc/clientlibs/pan/img/favicons2020/apple-touch-icon-57x57.png"><link rel="apple-touch-icon" sizes="60x60" href="/etc/clientlibs/pan/img/favicons2020/apple-touch-icon-60x60.png"><link rel="apple-touch-icon" sizes="72x72" href="/etc/clientlibs/pan/img/favicons2020/apple-touch-icon-72x72.png"><link rel="apple-touch-icon" sizes="76x76" href="/etc/clientlibs/pan/img/favicons2020/apple-touch-icon-76x76.png"><link rel="apple-touch-icon" sizes="114x114" href="/etc/clientlibs/pan/img/favicons2020/apple-touch-icon-114x114.png"><link rel="apple-touch-icon" sizes="120x120" href="/etc/clientlibs/pan/img/favicons2020/apple-touch-icon-120x120.png"><link rel="apple-touch-icon" sizes="144x144" href="/etc/clientlibs/pan/img/favicons2020/apple-touch-icon-144x144.png"><link rel="apple-touch-icon" sizes="152x152" href="/etc/clientlibs/pan/img/favicons2020/apple-touch-icon-152x152.png"><link rel="apple-touch-icon" sizes="180x180" href="/etc/clientlibs/pan/img/favicons2020/apple-touch-icon-180x180.png"><link rel="icon" type="image/png" href="/etc/clientlibs/pan/img/favicons2020/favicon-32x32.png" sizes="32x32"><link rel="icon" type="image/png" href="/etc/clientlibs/pan/img/favicons2020/favicon-194x194.png" sizes="194x194"><link rel="icon" type="image/png" href="/etc/clientlibs/pan/img/favicons2020/favicon-96x96.png" sizes="96x96"><link rel="icon" type="image/png" href="/etc/clientlibs/pan/img/favicons2020/android-chrome-192x192.png" sizes="192x192"><link rel="icon" type="image/png" href="/etc/clientlibs/pan/img/favicons2020/favicon-16x16.png" sizes="16x16"><link rel="manifest" href="/etc/clientlibs/pan/img/favicons2020/manifest.json"><link rel="mask-icon" href="/etc/clientlibs/pan/img/favicons2020/safari-pinned-tab.svg" color="#FA582D"><link rel="shortcut icon" href="/etc/clientlibs/pan/img/favicons2020/favicon.ico"><link rel='preload' as='image' href='/content/dam/pan/en_US/cyberpedia-redesign/cyberpedia_banner.jpg' ><script>/* jQuery v3.6.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */ !function(H,bb){"object"==typeof module&&"object"==typeof module.exports?module.exports=H.document?bb(H,!0):function(cb){if(!cb.document)throw Error("jQuery requires a window with a document");return bb(cb)}:bb(H)}("undefined"!=typeof window?window:this,function(H,bb){function cb(a,b,c){var e,f,g=(c=c||O).createElement("script");if(g.text=a,b)for(e in Tc)(f=b[e]||b.getAttribute&&b.getAttribute(e))&&g.setAttribute(e,f);c.head.appendChild(g).parentNode.removeChild(g)}function Qa(a){return null==a?a+ "":"object"==typeof a||"function"==typeof a?nb[Yb.call(a)]||"object":typeof a}function Db(a){var b=!!a&&"length"in a&&a.length,c=Qa(a);return!J(a)&&!Ra(a)&&("array"===c||0===b||"number"==typeof b&&0<b&&b-1 in a)}function qa(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}function Eb(a,b,c){return J(b)?d.grep(a,function(e,f){return!!b.call(e,f,e)!==c}):b.nodeType?d.grep(a,function(e){return e===b!==c}):"string"!=typeof b?d.grep(a,function(e){return-1<ob.call(b,e)!==c}):d.filter(b, a,c)}function Zb(a,b){for(;(a=a[b])&&1!==a.nodeType;);return a}function Sa(a){return a}function pb(a){throw a;}function $b(a,b,c,e){var f;try{a&&J(f=a.promise)?f.call(a).done(b).fail(c):a&&J(f=a.then)?f.call(a,b,c):b.apply(void 0,[a].slice(e))}catch(g){c.apply(void 0,[g])}}function qb(){O.removeEventListener("DOMContentLoaded",qb);H.removeEventListener("load",qb);d.ready()}function Uc(a,b){return b.toUpperCase()}function Aa(a){return a.replace(Vc,"ms-").replace(Wc,Uc)}function db(){this.expando=d.expando+ db.uid++}function ac(a,b,c){var e,f;if(void 0===c&&1===a.nodeType)if(e="data-"+b.replace(Xc,"-$&").toLowerCase(),"string"==typeof(c=a.getAttribute(e))){try{c="true"===(f=c)||"false"!==f&&("null"===f?null:f===+f+""?+f:Yc.test(f)?JSON.parse(f):f)}catch(g){}la.set(a,b,c)}else c=void 0;return c}function bc(a,b,c,e){var f,g,h=20,n=e?function(){return e.cur()}:function(){return d.css(a,b,"")},m=n(),t=c&&c[3]||(d.cssNumber[b]?"":"px"),v=a.nodeType&&(d.cssNumber[b]||"px"!==t&&+m)&&eb.exec(d.css(a,b));if(v&& v[3]!==t){m/=2;t=t||v[3];for(v=+m||1;h--;)d.style(a,b,v+t),0>=(1-g)*(1-(g=n()/m||.5))&&(h=0),v/=g;v*=2;d.style(a,b,v+t);c=c||[]}return c&&(v=+v||+m||0,f=c[1]?v+(c[1]+1)*c[2]:+c[2],e&&(e.unit=t,e.start=v,e.end=f)),f}function Ta(a,b){for(var c,e,f,g,h,n,m,t=[],v=0,q=a.length;v<q;v++)(e=a[v]).style&&(c=e.style.display,b?("none"===c&&(t[v]=F.get(e,"display")||null,t[v]||(e.style.display="")),""===e.style.display&&rb(e)&&(t[v]=(m=h=g=void 0,h=(f=e).ownerDocument,n=f.nodeName,(m=cc[n])||(g=h.body.appendChild(h.createElement(n)), m=d.css(g,"display"),g.parentNode.removeChild(g),"none"===m&&(m="block"),cc[n]=m)))):"none"!==c&&(t[v]="none",F.set(e,"display",c)));for(v=0;v<q;v++)null!=t[v]&&(a[v].style.display=t[v]);return a}function ma(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&qa(a,b)?d.merge([a],c):c}function Fb(a,b){for(var c=0,e=a.length;c<e;c++)F.set(a[c],"globalEval",!b||F.get(b[c],"globalEval"))} function dc(a,b,c,e,f){for(var g,h,n,m,t=b.createDocumentFragment(),v=[],q=0,z=a.length;q<z;q++)if((g=a[q])||0===g)if("object"===Qa(g))d.merge(v,g.nodeType?[g]:g);else if(Zc.test(g)){h=h||t.appendChild(b.createElement("div"));n=(ec.exec(g)||["",""])[1].toLowerCase();n=ra[n]||ra._default;h.innerHTML=n[1]+d.htmlPrefilter(g)+n[2];for(n=n[0];n--;)h=h.lastChild;d.merge(v,h.childNodes);(h=t.firstChild).textContent=""}else v.push(b.createTextNode(g));t.textContent="";for(q=0;g=v[q++];)if(e&&-1<d.inArray(g, e))f&&f.push(g);else if(m=Ua(g),h=ma(t.appendChild(g),"script"),m&&Fb(h),c)for(n=0;g=h[n++];)fc.test(g.type||"")&&c.push(g);return t}function Va(){return!0}function Wa(){return!1}function $c(a,b){a:{try{var c=O.activeElement;break a}catch(e){}c=void 0}return a===c==("focus"===b)}function Gb(a,b,c,e,f,g){var h,n;if("object"==typeof b){for(n in"string"!=typeof c&&(e=e||c,c=void 0),b)Gb(a,n,c,e,b[n],g);return a}if(null==e&&null==f?(f=c,e=c=void 0):null==f&&("string"==typeof c?(f=e,e=void 0):(f=e,e=c, c=void 0)),!1===f)f=Wa;else if(!f)return a;return 1===g&&(h=f,(f=function(m){return d().off(m),h.apply(this,arguments)}).guid=h.guid||(h.guid=d.guid++)),a.each(function(){d.event.add(this,b,f,e,c)})}function sb(a,b,c){c?(F.set(a,b,!1),d.event.add(a,b,{namespace:!1,handler:function(e){var f,g,h=F.get(this,b);if(1&e.isTrigger&&this[b])if(h.length)(d.event.special[b]||{}).delegateType&&e.stopPropagation();else{if(h=Ha.call(arguments),F.set(this,b,h),f=c(this,b),this[b](),h!==(g=F.get(this,b))||f?F.set(this, b,!1):g={},h!==g)return e.stopImmediatePropagation(),e.preventDefault(),g&&g.value}else h.length&&(F.set(this,b,{value:d.event.trigger(d.extend(h[0],d.Event.prototype),h.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===F.get(a,b)&&d.event.add(a,b,Va)}function gc(a,b){return qa(a,"table")&&qa(11!==b.nodeType?b:b.firstChild,"tr")&&d(a).children("tbody")[0]||a}function ad(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function bd(a){return"true/"===(a.type||"").slice(0,5)?a.type= a.type.slice(5):a.removeAttribute("type"),a}function hc(a,b){var c,e,f,g,h;if(1===b.nodeType){if(F.hasData(a)&&(h=F.get(a).events))for(e in F.remove(b,"handle events"),h){var n=0;for(c=h[e].length;n<c;n++)d.event.add(b,e,h[e][n])}la.hasData(a)&&(f=la.access(a),g=d.extend({},f),la.set(b,g))}}function Xa(a,b,c,e){b=ic(b);var f,g,h,n=0,m=a.length,t=m-1,v=b[0],q=J(v);if(q||1<m&&"string"==typeof v&&!R.checkClone&&cd.test(v))return a.each(function(A){var B=a.eq(A);q&&(b[0]=v.call(this,A,B.html()));Xa(B, b,c,e)});if(m&&(g=(f=dc(b,a[0].ownerDocument,!1,a,e)).firstChild,1===f.childNodes.length&&(f=g),g||e)){for(h=(g=d.map(ma(f,"script"),ad)).length;n<m;n++){var z=f;n!==t&&(z=d.clone(z,!0,!0),h&&d.merge(g,ma(z,"script")));c.call(a[n],z,n)}if(h)for(f=g[g.length-1].ownerDocument,d.map(g,bd),n=0;n<h;n++)z=g[n],fc.test(z.type||"")&&!F.access(z,"globalEval")&&d.contains(f,z)&&(z.src&&"module"!==(z.type||"").toLowerCase()?d._evalUrl&&!z.noModule&&d._evalUrl(z.src,{nonce:z.nonce||z.getAttribute("nonce")},f): cb(z.textContent.replace(dd,""),z,f))}return a}function jc(a,b,c){for(var e=b?d.filter(b,a):a,f=0;null!=(b=e[f]);f++)c||1!==b.nodeType||d.cleanData(ma(b)),b.parentNode&&(c&&Ua(b)&&Fb(ma(b,"script")),b.parentNode.removeChild(b));return a}function fb(a,b,c){var e,f,g,h,n=Hb.test(b),m=a.style;return(c=c||tb(a))&&(h=c.getPropertyValue(b)||c[b],n&&(h=h.replace(ed,"$1")),""!==h||Ua(a)||(h=d.style(a,b)),!R.pixelBoxStyles()&&Ib.test(h)&&fd.test(b)&&(e=m.width,f=m.minWidth,g=m.maxWidth,m.minWidth=m.maxWidth= m.width=h,h=c.width,m.width=e,m.minWidth=f,m.maxWidth=g)),void 0!==h?h+"":h}function kc(a,b){return{get:function(){if(!a())return(this.get=b).apply(this,arguments);delete this.get}}}function Jb(a){var b;if(!(b=d.cssProps[a]||lc[a])){if(!(a in mc)){a:{b=a;for(var c=b[0].toUpperCase()+b.slice(1),e=nc.length;e--;)if((b=nc[e]+c)in mc)break a;b=void 0}a=lc[a]=b||a}b=a}return b}function oc(a,b,c){return(a=eb.exec(b))?Math.max(0,a[2]-(c||0))+(a[3]||"px"):b}function Kb(a,b,c,e,f,g){var h="width"===b?1:0, n=0,m=0;if(c===(e?"border":"content"))return 0;for(;4>h;h+=2)"margin"===c&&(m+=d.css(a,c+Ca[h],!0,f)),e?("content"===c&&(m-=d.css(a,"padding"+Ca[h],!0,f)),"margin"!==c&&(m-=d.css(a,"border"+Ca[h]+"Width",!0,f))):(m+=d.css(a,"padding"+Ca[h],!0,f),"padding"!==c?m+=d.css(a,"border"+Ca[h]+"Width",!0,f):n+=d.css(a,"border"+Ca[h]+"Width",!0,f));return!e&&0<=g&&(m+=Math.max(0,Math.ceil(a["offset"+b[0].toUpperCase()+b.slice(1)]-g-m-n-.5))||0),m}function pc(a,b,c){var e=tb(a),f=(!R.boxSizingReliable()||c)&& "border-box"===d.css(a,"boxSizing",!1,e),g=f,h=fb(a,b,e),n="offset"+b[0].toUpperCase()+b.slice(1);if(Ib.test(h)){if(!c)return h;h="auto"}return(!R.boxSizingReliable()&&f||!R.reliableTrDimensions()&&qa(a,"tr")||"auto"===h||!parseFloat(h)&&"inline"===d.css(a,"display",!1,e))&&a.getClientRects().length&&(f="border-box"===d.css(a,"boxSizing",!1,e),(g=n in a)&&(h=a[n])),(h=parseFloat(h)||0)+Kb(a,b,c||(f?"border":"content"),g,e,h)+"px"}function ta(a,b,c,e,f){return new ta.prototype.init(a,b,c,e,f)}function Lb(){ub&& (!1===O.hidden&&H.requestAnimationFrame?H.requestAnimationFrame(Lb):H.setTimeout(Lb,d.fx.interval),d.fx.tick())}function qc(){return H.setTimeout(function(){Ya=void 0}),Ya=Date.now()}function vb(a,b){var c,e=0,f={height:a};for(b=b?1:0;4>e;e+=2-b)f["margin"+(c=Ca[e])]=f["padding"+c]=a;return b&&(f.opacity=f.width=a),f}function rc(a,b,c){for(var e,f=(ua.tweeners[b]||[]).concat(ua.tweeners["*"]),g=0,h=f.length;g<h;g++)if(e=f[g].call(c,b,a))return e}function ua(a,b,c){var e,f=0,g=ua.prefilters.length, h=d.Deferred().always(function(){delete n.elem}),n=function(){if(e)return!1;var t=Ya||qc();t=Math.max(0,m.startTime+m.duration-t);for(var v=1-(t/m.duration||0),q=0,z=m.tweens.length;q<z;q++)m.tweens[q].run(v);return h.notifyWith(a,[m,v,t]),1>v&&z?t:(z||h.notifyWith(a,[m,1,0]),h.resolveWith(a,[m]),!1)},m=h.promise({elem:a,props:d.extend({},b),opts:d.extend(!0,{specialEasing:{},easing:d.easing._default},c),originalProperties:b,originalOptions:c,startTime:Ya||qc(),duration:c.duration,tweens:[],createTween:function(t, v){var q=d.Tween(a,m.opts,t,v,m.opts.specialEasing[t]||m.opts.easing);return m.tweens.push(q),q},stop:function(t){var v=0,q=t?m.tweens.length:0;if(e)return this;for(e=!0;v<q;v++)m.tweens[v].run(1);return t?(h.notifyWith(a,[m,1,0]),h.resolveWith(a,[m,t])):h.rejectWith(a,[m,t]),this}});c=m.props;!function(t,v){var q,z,A,B,K;for(q in t)if(A=v[z=Aa(q)],B=t[q],Array.isArray(B)&&(A=B[1],B=t[q]=B[0]),q!==z&&(t[z]=B,delete t[q]),(K=d.cssHooks[z])&&"expand"in K)for(q in B=K.expand(B),delete t[z],B)q in t|| (t[q]=B[q],v[q]=A);else v[z]=A}(c,m.opts.specialEasing);for(;f<g;f++)if(b=ua.prefilters[f].call(m,a,c,m.opts))return J(b.stop)&&(d._queueHooks(m.elem,m.opts.queue).stop=b.stop.bind(b)),b;return d.map(c,rc,m),J(m.opts.start)&&m.opts.start.call(a,m),m.progress(m.opts.progress).done(m.opts.done,m.opts.complete).fail(m.opts.fail).always(m.opts.always),d.fx.timer(d.extend(n,{elem:a,anim:m,queue:m.opts.queue})),m}function Ja(a){return(a.match(Ba)||[]).join(" ")}function Ka(a){return a.getAttribute&&a.getAttribute("class")|| ""}function Mb(a){return Array.isArray(a)?a:"string"==typeof a&&a.match(Ba)||[]}function Nb(a,b,c,e){var f;if(Array.isArray(b))d.each(b,function(g,h){c||gd.test(a)?e(a,h):Nb(a+"["+("object"==typeof h&&null!=h?g:"")+"]",h,c,e)});else if(c||"object"!==Qa(b))e(a,b);else for(f in b)Nb(a+"["+f+"]",b[f],c,e)}function sc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var e,f=0,g=b.toLowerCase().match(Ba)||[];if(J(c))for(;e=g[f++];)"+"===e[0]?(e=e.slice(1)||"*",(a[e]=a[e]||[]).unshift(c)):(a[e]= a[e]||[]).push(c)}}function tc(a,b,c,e){function f(n){var m;return g[n]=!0,d.each(a[n]||[],function(t,v){var q=v(b,c,e);return"string"!=typeof q||h||g[q]?h?!(m=q):void 0:(b.dataTypes.unshift(q),f(q),!1)}),m}var g={},h=a===Ob;return f(b.dataTypes[0])||!g["*"]&&f("*")}function Pb(a,b){var c,e,f=d.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((f[c]?a:e||(e={}))[c]=b[c]);return e&&d.extend(!0,a,e),a}var Da=[],uc=Object.getPrototypeOf,Ha=Da.slice,ic=Da.flat?function(a){return Da.flat.call(a)}: function(a){return Da.concat.apply([],a)},Qb=Da.push,ob=Da.indexOf,nb={},Yb=nb.toString,wb=nb.hasOwnProperty,vc=wb.toString,hd=vc.call(Object),R={},J=function(a){return"function"==typeof a&&"number"!=typeof a.nodeType&&"function"!=typeof a.item},Ra=function(a){return null!=a&&a===a.window},O=H.document,Tc={type:!0,src:!0,nonce:!0,noModule:!0},d=function(a,b){return new d.fn.init(a,b)};d.fn=d.prototype={jquery:"3.6.1",constructor:d,length:0,toArray:function(){return Ha.call(this)},get:function(a){return null== a?Ha.call(this):0>a?this[a+this.length]:this[a]},pushStack:function(a){a=d.merge(this.constructor(),a);return a.prevObject=this,a},each:function(a){return d.each(this,a)},map:function(a){return this.pushStack(d.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(Ha.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(d.grep(this,function(a,b){return(b+1)%2}))},odd:function(){return this.pushStack(d.grep(this, function(a,b){return b%2}))},eq:function(a){var b=this.length;a=+a+(0>a?b:0);return this.pushStack(0<=a&&a<b?[this[a]]:[])},end:function(){return this.prevObject||this.constructor()},push:Qb,sort:Da.sort,splice:Da.splice};d.extend=d.fn.extend=function(){var a,b,c,e,f,g=arguments[0]||{},h=1,n=arguments.length,m=!1;"boolean"==typeof g&&(m=g,g=arguments[h]||{},h++);"object"==typeof g||J(g)||(g={});for(h===n&&(g=this,h--);h<n;h++)if(null!=(a=arguments[h]))for(b in a){var t=a[b];"__proto__"!==b&&g!==t&& (m&&t&&(d.isPlainObject(t)||(e=Array.isArray(t)))?(c=g[b],f=e&&!Array.isArray(c)?[]:e||d.isPlainObject(c)?c:{},e=!1,g[b]=d.extend(m,f,t)):void 0!==t&&(g[b]=t))}return g};d.extend({expando:"jQuery"+("3.6.1"+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw Error(a);},noop:function(){},isPlainObject:function(a){var b,c;return!(!a||"[object Object]"!==Yb.call(a))&&(!(b=uc(a))||"function"==typeof(c=wb.call(b,"constructor")&&b.constructor)&&vc.call(c)===hd)},isEmptyObject:function(a){for(var b in a)return!1; return!0},globalEval:function(a,b,c){cb(a,{nonce:b&&b.nonce},c)},each:function(a,b){var c,e=0;if(Db(a))for(c=a.length;e<c&&!1!==b.call(a[e],e,a[e]);e++);else for(e in a)if(!1===b.call(a[e],e,a[e]))break;return a},makeArray:function(a,b){var c=b||[];return null!=a&&(Db(Object(a))?d.merge(c,"string"==typeof a?[a]:a):Qb.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:ob.call(b,a,c)},merge:function(a,b){for(var c=+b.length,e=0,f=a.length;e<c;e++)a[f++]=b[e];return a.length=f,a},grep:function(a, b,c){var e=[],f=0,g=a.length;for(c=!c;f<g;f++)!b(a[f],f)!==c&&e.push(a[f]);return e},map:function(a,b,c){var e,f,g=0,h=[];if(Db(a))for(e=a.length;g<e;g++)null!=(f=b(a[g],g,c))&&h.push(f);else for(g in a)null!=(f=b(a[g],g,c))&&h.push(f);return ic(h)},guid:1,support:R});"function"==typeof Symbol&&(d.fn[Symbol.iterator]=Da[Symbol.iterator]);d.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){nb["[object "+b+"]"]=b.toLowerCase()});var Oa=function(a){function b(k, l,p,r){var u,x,w,C,y=l&&l.ownerDocument;var E=l?l.nodeType:9;if(p=p||[],"string"!=typeof k||!k||1!==E&&9!==E&&11!==E)return p;if(!r&&(ka(l),l=l||P,W)){if(11!==E&&(C=id.exec(k)))if(u=C[1])if(9===E){if(!(x=l.getElementById(u)))return p;if(x.id===u)return p.push(x),p}else{if(y&&(x=y.getElementById(u))&&da(l,x)&&x.id===u)return p.push(x),p}else{if(C[2])return Ia.apply(p,l.getElementsByTagName(k)),p;if((u=C[3])&&D.getElementsByClassName&&l.getElementsByClassName)return Ia.apply(p,l.getElementsByClassName(u)), p}if(!(!D.qsa||xb[k+" "]||S&&S.test(k)||1===E&&"object"===l.nodeName.toLowerCase())){if(u=k,y=l,1===E&&(jd.test(k)||wc.test(k))){(y=Rb.test(k)&&q(l.parentNode)||l)===l&&D.scope||((w=l.getAttribute("id"))?w=w.replace(xc,yc):l.setAttribute("id",w=G));for(E=(u=Y(k)).length;E--;)u[E]=(w?"#"+w:":scope")+" "+A(u[E]);u=u.join(",")}try{return Ia.apply(p,y.querySelectorAll(u)),p}catch(L){xb(k,!0)}finally{w===G&&l.removeAttribute("id")}}}return yb(k.replace(zb,"$1"),l,p,r)}function c(){var k=[];return function u(p, r){return k.push(p+" ")>M.cacheLength&&delete u[k.shift()],u[p+" "]=r}}function e(k){return k[G]=!0,k}function f(k){var l=P.createElement("fieldset");try{return!!k(l)}catch(p){return!1}finally{l.parentNode&&l.parentNode.removeChild(l)}}function g(k,l){for(var p=k.split("|"),r=p.length;r--;)M.attrHandle[p[r]]=l}function h(k,l){var p=l&&k,r=p&&1===k.nodeType&&1===l.nodeType&&k.sourceIndex-l.sourceIndex;if(r)return r;if(p)for(;p=p.nextSibling;)if(p===l)return-1;return k?1:-1}function n(k){return function(l){return"input"=== l.nodeName.toLowerCase()&&l.type===k}}function m(k){return function(l){var p=l.nodeName.toLowerCase();return("input"===p||"button"===p)&&l.type===k}}function t(k){return function(l){return"form"in l?l.parentNode&&!1===l.disabled?"label"in l?"label"in l.parentNode?l.parentNode.disabled===k:l.disabled===k:l.isDisabled===k||l.isDisabled!==!k&&kd(l)===k:l.disabled===k:"label"in l&&l.disabled===k}}function v(k){return e(function(l){return l=+l,e(function(p,r){for(var u,x=k([],p.length,l),w=x.length;w--;)p[u= x[w]]&&(p[u]=!(r[u]=p[u]))})})}function q(k){return k&&"undefined"!=typeof k.getElementsByTagName&&k}function z(){}function A(k){for(var l=0,p=k.length,r="";l<p;l++)r+=k[l].value;return r}function B(k,l,p){var r=l.dir,u=l.next,x=u||r,w=p&&"parentNode"===x,C=ca++;return l.first?function(y,E,L){for(;y=y[r];)if(1===y.nodeType||w)return k(y,E,L);return!1}:function(y,E,L){var aa,Z,I,Q=[ea,C];if(L)for(;y=y[r];){if((1===y.nodeType||w)&&k(y,E,L))return!0}else for(;y=y[r];)if(1===y.nodeType||w)if(Z=(I=y[G]|| (y[G]={}))[y.uniqueID]||(I[y.uniqueID]={}),u&&u===y.nodeName.toLowerCase())y=y[r]||y;else{if((aa=Z[x])&&aa[0]===ea&&aa[1]===C)return Q[2]=aa[2];if((Z[x]=Q)[2]=k(y,E,L))return!0}return!1}}function K(k){return 1<k.length?function(l,p,r){for(var u=k.length;u--;)if(!k[u](l,p,r))return!1;return!0}:k[0]}function U(k,l,p,r,u){for(var x,w=[],C=0,y=k.length,E=null!=l;C<y;C++)(x=k[C])&&(p&&!p(x,r,u)||(w.push(x),E&&l.push(C)));return w}function va(k,l,p,r,u,x){return r&&!r[G]&&(r=va(r)),u&&!u[G]&&(u=va(u,x)), e(function(w,C,y,E){var L,aa=[],Z=[],I=C.length,Q;if(!(Q=w)){Q=l||"*";for(var T=y.nodeType?[y]:y,wa=[],ia=0,fa=T.length;ia<fa;ia++)b(Q,T[ia],wa);Q=wa}Q=!k||!w&&l?Q:U(Q,aa,k,y,E);T=p?u||(w?k:I||r)?[]:C:Q;if(p&&p(Q,T,y,E),r){var ba=U(T,Z);r(ba,[],y,E);for(y=ba.length;y--;)(L=ba[y])&&(T[Z[y]]=!(Q[Z[y]]=L))}if(w){if(u||k){if(u){ba=[];for(y=T.length;y--;)(L=T[y])&&ba.push(Q[y]=L);u(null,T=[],ba,E)}for(y=T.length;y--;)(L=T[y])&&-1<(ba=u?La(w,L):aa[y])&&(w[ba]=!(C[ba]=L))}}else T=U(T===C?T.splice(I,T.length): T),u?u(null,C,T,E):Ia.apply(C,T)})}function ha(k){var l,p,r=k.length,u=M.relative[k[0].type];var x=u||M.relative[" "];for(var w=u?1:0,C=B(function(L){return L===l},x,!0),y=B(function(L){return-1<La(l,L)},x,!0),E=[function(L,aa,Z){L=!u&&(Z||aa!==na)||((l=aa).nodeType?C(L,aa,Z):y(L,aa,Z));return l=null,L}];w<r;w++)if(x=M.relative[k[w].type])E=[B(K(E),x)];else{if((x=M.filter[k[w].type].apply(null,k[w].matches))[G]){for(p=++w;p<r&&!M.relative[k[p].type];p++);return va(1<w&&K(E),1<w&&A(k.slice(0,w-1).concat({value:" "=== k[w-2].type?"*":""})).replace(zb,"$1"),x,w<p&&ha(k.slice(w,p)),p<r&&ha(k=k.slice(p)),p<r&&A(k))}E.push(x)}return K(E)}var oa,D,M,ja,N,Y,Za,yb,na,sa,xa,ka,P,X,W,S,pa,ya,da,G="sizzle"+1*new Date,V=a.document,ea=0,ca=0,za=c(),Ma=c(),Ab=c(),xb=c(),Sb=function(k,l){return k===l&&(xa=!0),0},ld={}.hasOwnProperty,Na=[],md=Na.pop,nd=Na.push,Ia=Na.push,zc=Na.slice,La=function(k,l){for(var p=0,r=k.length;p<r;p++)if(k[p]===l)return p;return-1},od=RegExp("[\\x20\\t\\r\\n\\f]+","g"),zb=RegExp("^[\\x20\\t\\r\\n\\f]+|((?:^|[^\\\\])(?:\\\\.)*)[\\x20\\t\\r\\n\\f]+$", "g"),pd=RegExp("^[\\x20\\t\\r\\n\\f]*,[\\x20\\t\\r\\n\\f]*"),wc=RegExp("^[\\x20\\t\\r\\n\\f]*([>+~]|[\\x20\\t\\r\\n\\f])[\\x20\\t\\r\\n\\f]*"),jd=RegExp("[\\x20\\t\\r\\n\\f]|>"),qd=RegExp(":((?:\\\\[\\da-fA-F]{1,6}[\\x20\\t\\r\\n\\f]?|\\\\[^\\r\\n\\f]|[\\w-]|[^\x00-\\x7f])+)(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|\\[[\\x20\\t\\r\\n\\f]*((?:\\\\[\\da-fA-F]{1,6}[\\x20\\t\\r\\n\\f]?|\\\\[^\\r\\n\\f]|[\\w-]|[^\x00-\\x7f])+)(?:[\\x20\\t\\r\\n\\f]*([*^$|!~]?=)[\\x20\\t\\r\\n\\f]*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|((?:\\\\[\\da-fA-F]{1,6}[\\x20\\t\\r\\n\\f]?|\\\\[^\\r\\n\\f]|[\\w-]|[^\x00-\\x7f])+))|)[\\x20\\t\\r\\n\\f]*\\])*)|.*)\\)|)"), rd=RegExp("^(?:\\\\[\\da-fA-F]{1,6}[\\x20\\t\\r\\n\\f]?|\\\\[^\\r\\n\\f]|[\\w-]|[^\x00-\\x7f])+$"),Bb={ID:RegExp("^#((?:\\\\[\\da-fA-F]{1,6}[\\x20\\t\\r\\n\\f]?|\\\\[^\\r\\n\\f]|[\\w-]|[^\x00-\\x7f])+)"),CLASS:RegExp("^\\.((?:\\\\[\\da-fA-F]{1,6}[\\x20\\t\\r\\n\\f]?|\\\\[^\\r\\n\\f]|[\\w-]|[^\x00-\\x7f])+)"),TAG:RegExp("^((?:\\\\[\\da-fA-F]{1,6}[\\x20\\t\\r\\n\\f]?|\\\\[^\\r\\n\\f]|[\\w-]|[^\x00-\\x7f])+|[*])"),ATTR:RegExp("^\\[[\\x20\\t\\r\\n\\f]*((?:\\\\[\\da-fA-F]{1,6}[\\x20\\t\\r\\n\\f]?|\\\\[^\\r\\n\\f]|[\\w-]|[^\x00-\\x7f])+)(?:[\\x20\\t\\r\\n\\f]*([*^$|!~]?=)[\\x20\\t\\r\\n\\f]*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|((?:\\\\[\\da-fA-F]{1,6}[\\x20\\t\\r\\n\\f]?|\\\\[^\\r\\n\\f]|[\\w-]|[^\x00-\\x7f])+))|)[\\x20\\t\\r\\n\\f]*\\]"), PSEUDO:RegExp("^:((?:\\\\[\\da-fA-F]{1,6}[\\x20\\t\\r\\n\\f]?|\\\\[^\\r\\n\\f]|[\\w-]|[^\x00-\\x7f])+)(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|\\[[\\x20\\t\\r\\n\\f]*((?:\\\\[\\da-fA-F]{1,6}[\\x20\\t\\r\\n\\f]?|\\\\[^\\r\\n\\f]|[\\w-]|[^\x00-\\x7f])+)(?:[\\x20\\t\\r\\n\\f]*([*^$|!~]?=)[\\x20\\t\\r\\n\\f]*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|((?:\\\\[\\da-fA-F]{1,6}[\\x20\\t\\r\\n\\f]?|\\\\[^\\r\\n\\f]|[\\w-]|[^\x00-\\x7f])+))|)[\\x20\\t\\r\\n\\f]*\\])*)|.*)\\)|)"), CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\([\\x20\\t\\r\\n\\f]*(even|odd|(([+-]|)(\\d*)n|)[\\x20\\t\\r\\n\\f]*(?:([+-]|)[\\x20\\t\\r\\n\\f]*(\\d+)|))[\\x20\\t\\r\\n\\f]*\\)|)","i"),bool:RegExp("^(?:checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped)$","i"),needsContext:RegExp("^[\\x20\\t\\r\\n\\f]*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\([\\x20\\t\\r\\n\\f]*((?:-\\d)?\\d*)[\\x20\\t\\r\\n\\f]*\\)|)(?=[^-]|$)", "i")},sd=/HTML$/i,td=/^(?:input|select|textarea|button)$/i,ud=/^h\d$/i,gb=/^[^{]+\{\s*\[native \w/,id=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,Rb=/[+~]/,Ea=RegExp("\\\\[\\da-fA-F]{1,6}[\\x20\\t\\r\\n\\f]?|\\\\([^\\r\\n\\f])","g"),Fa=function(k,l){var p="0x"+k.slice(1)-65536;return l||(0>p?String.fromCharCode(p+65536):String.fromCharCode(p>>10|55296,1023&p|56320))},xc=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,yc=function(k,l){return l?"\x00"===k?"\ufffd":k.slice(0,-1)+"\\"+k.charCodeAt(k.length- 1).toString(16)+" ":"\\"+k},Ac=function(){ka()},kd=B(function(k){return!0===k.disabled&&"fieldset"===k.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{Ia.apply(Na=zc.call(V.childNodes),V.childNodes),Na[V.childNodes.length].nodeType}catch(k){Ia={apply:Na.length?function(l,p){nd.apply(l,zc.call(p))}:function(l,p){for(var r=l.length,u=0;l[r++]=p[u++];);l.length=r-1}}}for(oa in D=b.support={},N=b.isXML=function(k){var l=k&&(k.ownerDocument||k).documentElement;return!sd.test(k&&k.namespaceURI|| l&&l.nodeName||"HTML")},ka=b.setDocument=function(k){var l,p;k=k?k.ownerDocument||k:V;return k!=P&&9===k.nodeType&&k.documentElement&&(X=(P=k).documentElement,W=!N(P),V!=P&&(p=P.defaultView)&&p.top!==p&&(p.addEventListener?p.addEventListener("unload",Ac,!1):p.attachEvent&&p.attachEvent("onunload",Ac)),D.scope=f(function(r){return X.appendChild(r).appendChild(P.createElement("div")),"undefined"!=typeof r.querySelectorAll&&!r.querySelectorAll(":scope fieldset div").length}),D.attributes=f(function(r){return r.className= "i",!r.getAttribute("className")}),D.getElementsByTagName=f(function(r){return r.appendChild(P.createComment("")),!r.getElementsByTagName("*").length}),D.getElementsByClassName=gb.test(P.getElementsByClassName),D.getById=f(function(r){return X.appendChild(r).id=G,!P.getElementsByName||!P.getElementsByName(G).length}),D.getById?(M.filter.ID=function(r){var u=r.replace(Ea,Fa);return function(x){return x.getAttribute("id")===u}},M.find.ID=function(r,u){if("undefined"!=typeof u.getElementById&&W){var x= u.getElementById(r);return x?[x]:[]}}):(M.filter.ID=function(r){var u=r.replace(Ea,Fa);return function(x){return(x="undefined"!=typeof x.getAttributeNode&&x.getAttributeNode("id"))&&x.value===u}},M.find.ID=function(r,u){if("undefined"!=typeof u.getElementById&&W){var x,w,C=u.getElementById(r);if(C){if((x=C.getAttributeNode("id"))&&x.value===r)return[C];var y=u.getElementsByName(r);for(w=0;C=y[w++];)if((x=C.getAttributeNode("id"))&&x.value===r)return[C]}return[]}}),M.find.TAG=D.getElementsByTagName? function(r,u){return"undefined"!=typeof u.getElementsByTagName?u.getElementsByTagName(r):D.qsa?u.querySelectorAll(r):void 0}:function(r,u){var x,w=[],C=0,y=u.getElementsByTagName(r);if("*"===r){for(;x=y[C++];)1===x.nodeType&&w.push(x);return w}return y},M.find.CLASS=D.getElementsByClassName&&function(r,u){if("undefined"!=typeof u.getElementsByClassName&&W)return u.getElementsByClassName(r)},pa=[],S=[],(D.qsa=gb.test(P.querySelectorAll))&&(f(function(r){var u;X.appendChild(r).innerHTML="<a id='"+G+ "'></a><select id='"+G+"-\r\\' msallowcapture=''><option selected=''></option></select>";r.querySelectorAll("[msallowcapture^='']").length&&S.push("[*^$]=[\\x20\\t\\r\\n\\f]*(?:''|\"\")");r.querySelectorAll("[selected]").length||S.push("\\[[\\x20\\t\\r\\n\\f]*(?:value|checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped)");r.querySelectorAll("[id~="+G+"-]").length||S.push("~=");(u=P.createElement("input")).setAttribute("name",""); r.appendChild(u);r.querySelectorAll("[name='']").length||S.push("\\[[\\x20\\t\\r\\n\\f]*name[\\x20\\t\\r\\n\\f]*=[\\x20\\t\\r\\n\\f]*(?:''|\"\")");r.querySelectorAll(":checked").length||S.push(":checked");r.querySelectorAll("a#"+G+"+*").length||S.push(".#.+[+~]");r.querySelectorAll("\\\f");S.push("[\\r\\n\\f]")}),f(function(r){r.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var u=P.createElement("input");u.setAttribute("type","hidden");r.appendChild(u).setAttribute("name", "D");r.querySelectorAll("[name=d]").length&&S.push("name[\\x20\\t\\r\\n\\f]*[*^$|!~]?=");2!==r.querySelectorAll(":enabled").length&&S.push(":enabled",":disabled");X.appendChild(r).disabled=!0;2!==r.querySelectorAll(":disabled").length&&S.push(":enabled",":disabled");r.querySelectorAll("*,:x");S.push(",.*:")})),(D.matchesSelector=gb.test(ya=X.matches||X.webkitMatchesSelector||X.mozMatchesSelector||X.oMatchesSelector||X.msMatchesSelector))&&f(function(r){D.disconnectedMatch=ya.call(r,"*");ya.call(r, "[s!='']:x");pa.push("!=",":((?:\\\\[\\da-fA-F]{1,6}[\\x20\\t\\r\\n\\f]?|\\\\[^\\r\\n\\f]|[\\w-]|[^\x00-\\x7f])+)(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|\\[[\\x20\\t\\r\\n\\f]*((?:\\\\[\\da-fA-F]{1,6}[\\x20\\t\\r\\n\\f]?|\\\\[^\\r\\n\\f]|[\\w-]|[^\x00-\\x7f])+)(?:[\\x20\\t\\r\\n\\f]*([*^$|!~]?=)[\\x20\\t\\r\\n\\f]*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|((?:\\\\[\\da-fA-F]{1,6}[\\x20\\t\\r\\n\\f]?|\\\\[^\\r\\n\\f]|[\\w-]|[^\x00-\\x7f])+))|)[\\x20\\t\\r\\n\\f]*\\])*)|.*)\\)|)")}), S=S.length&&new RegExp(S.join("|")),pa=pa.length&&new RegExp(pa.join("|")),l=gb.test(X.compareDocumentPosition),da=l||gb.test(X.contains)?function(r,u){var x=9===r.nodeType?r.documentElement:r,w=u&&u.parentNode;return r===w||!(!w||1!==w.nodeType||!(x.contains?x.contains(w):r.compareDocumentPosition&&16&r.compareDocumentPosition(w)))}:function(r,u){if(u)for(;u=u.parentNode;)if(u===r)return!0;return!1},Sb=l?function(r,u){if(r===u)return xa=!0,0;var x=!r.compareDocumentPosition-!u.compareDocumentPosition; return x||(1&(x=(r.ownerDocument||r)==(u.ownerDocument||u)?r.compareDocumentPosition(u):1)||!D.sortDetached&&u.compareDocumentPosition(r)===x?r==P||r.ownerDocument==V&&da(V,r)?-1:u==P||u.ownerDocument==V&&da(V,u)?1:sa?La(sa,r)-La(sa,u):0:4&x?-1:1)}:function(r,u){if(r===u)return xa=!0,0;var x=0;var w=r.parentNode;var C=u.parentNode,y=[r],E=[u];if(!w||!C)return r==P?-1:u==P?1:w?-1:C?1:sa?La(sa,r)-La(sa,u):0;if(w===C)return h(r,u);for(w=r;w=w.parentNode;)y.unshift(w);for(w=u;w=w.parentNode;)E.unshift(w); for(;y[x]===E[x];)x++;return x?h(y[x],E[x]):y[x]==V?-1:E[x]==V?1:0}),P},b.matches=function(k,l){return b(k,null,null,l)},b.matchesSelector=function(k,l){if(ka(k),!(!D.matchesSelector||!W||xb[l+" "]||pa&&pa.test(l)||S&&S.test(l)))try{var p=ya.call(k,l);if(p||D.disconnectedMatch||k.document&&11!==k.document.nodeType)return p}catch(r){xb(l,!0)}return 0<b(l,P,null,[k]).length},b.contains=function(k,l){return(k.ownerDocument||k)!=P&&ka(k),da(k,l)},b.attr=function(k,l){(k.ownerDocument||k)!=P&&ka(k);var p= M.attrHandle[l.toLowerCase()];p=p&&ld.call(M.attrHandle,l.toLowerCase())?p(k,l,!W):void 0;return void 0!==p?p:D.attributes||!W?k.getAttribute(l):(p=k.getAttributeNode(l))&&p.specified?p.value:null},b.escape=function(k){return(k+"").replace(xc,yc)},b.error=function(k){throw Error("Syntax error, unrecognized expression: "+k);},b.uniqueSort=function(k){var l,p=[],r=0,u=0;if(xa=!D.detectDuplicates,sa=!D.sortStable&&k.slice(0),k.sort(Sb),xa){for(;l=k[u++];)l===k[u]&&(r=p.push(u));for(;r--;)k.splice(p[r], 1)}return sa=null,k},ja=b.getText=function(k){var l,p="",r=0;if(l=k.nodeType)if(1===l||9===l||11===l){if("string"==typeof k.textContent)return k.textContent;for(k=k.firstChild;k;k=k.nextSibling)p+=ja(k)}else{if(3===l||4===l)return k.nodeValue}else for(;l=k[r++];)p+=ja(l);return p},(M=b.selectors={cacheLength:50,createPseudo:e,match:Bb,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(k){return k[1]= k[1].replace(Ea,Fa),k[3]=(k[3]||k[4]||k[5]||"").replace(Ea,Fa),"~="===k[2]&&(k[3]=" "+k[3]+" "),k.slice(0,4)},CHILD:function(k){return k[1]=k[1].toLowerCase(),"nth"===k[1].slice(0,3)?(k[3]||b.error(k[0]),k[4]=+(k[4]?k[5]+(k[6]||1):2*("even"===k[3]||"odd"===k[3])),k[5]=+(k[7]+k[8]||"odd"===k[3])):k[3]&&b.error(k[0]),k},PSEUDO:function(k){var l,p=!k[6]&&k[2];return Bb.CHILD.test(k[0])?null:(k[3]?k[2]=k[4]||k[5]||"":p&&qd.test(p)&&(l=Y(p,!0))&&(l=p.indexOf(")",p.length-l)-p.length)&&(k[0]=k[0].slice(0, l),k[2]=p.slice(0,l)),k.slice(0,3))}},filter:{TAG:function(k){var l=k.replace(Ea,Fa).toLowerCase();return"*"===k?function(){return!0}:function(p){return p.nodeName&&p.nodeName.toLowerCase()===l}},CLASS:function(k){var l=za[k+" "];return l||(l=new RegExp("(^|[\\x20\\t\\r\\n\\f])"+k+"([\\x20\\t\\r\\n\\f]|$)"),za(k,function(p){return l.test("string"==typeof p.className&&p.className||"undefined"!=typeof p.getAttribute&&p.getAttribute("class")||"")}))},ATTR:function(k,l,p){return function(r){r=b.attr(r, k);return null==r?"!="===l:!l||(r+="","="===l?r===p:"!="===l?r!==p:"^="===l?p&&0===r.indexOf(p):"*="===l?p&&-1<r.indexOf(p):"$="===l?p&&r.slice(-p.length)===p:"~="===l?-1<(" "+r.replace(od," ")+" ").indexOf(p):"|="===l&&(r===p||r.slice(0,p.length+1)===p+"-"))}},CHILD:function(k,l,p,r,u){var x="nth"!==k.slice(0,3),w="last"!==k.slice(-4),C="of-type"===l;return 1===r&&0===u?function(y){return!!y.parentNode}:function(y,E,L){var aa,Z,I,Q;E=x!==w?"nextSibling":"previousSibling";var T=y.parentNode,wa=C&& y.nodeName.toLowerCase(),ia=!L&&!C,fa=!1;if(T){if(x){for(;E;){for(I=y;I=I[E];)if(C?I.nodeName.toLowerCase()===wa:1===I.nodeType)return!1;var ba=E="only"===k&&!ba&&"nextSibling"}return!0}if(ba=[w?T.firstChild:T.lastChild],w&&ia)for(fa=(Q=(aa=(L=(Z=(I=T)[G]||(I[G]={}))[I.uniqueID]||(Z[I.uniqueID]={}))[k]||[])[0]===ea&&aa[1])&&aa[2],I=Q&&T.childNodes[Q];I=++Q&&I&&I[E]||(fa=Q=0)||ba.pop();){if(1===I.nodeType&&++fa&&I===y){L[k]=[ea,Q,fa];break}}else if(ia&&(fa=Q=(aa=((Z=(I=y)[G]||(I[G]={}))[I.uniqueID]|| (Z[I.uniqueID]={}))[k]||[])[0]===ea&&aa[1]),!1===fa)for(;(I=++Q&&I&&I[E]||(fa=Q=0)||ba.pop())&&((C?I.nodeName.toLowerCase()!==wa:1!==I.nodeType)||!++fa||(ia&&((L=(Z=I[G]||(I[G]={}))[I.uniqueID]||(Z[I.uniqueID]={}))[k]=[ea,fa]),I!==y)););return(fa-=u)===r||0==fa%r&&0<=fa/r}}},PSEUDO:function(k,l){var p,r=M.pseudos[k]||M.setFilters[k.toLowerCase()]||b.error("unsupported pseudo: "+k);return r[G]?r(l):1<r.length?(p=[k,k,"",l],M.setFilters.hasOwnProperty(k.toLowerCase())?e(function(u,x){for(var w,C=r(u, l),y=C.length;y--;)u[w=La(u,C[y])]=!(x[w]=C[y])}):function(u){return r(u,0,p)}):r}},pseudos:{not:e(function(k){var l=[],p=[],r=Za(k.replace(zb,"$1"));return r[G]?e(function(u,x,w,C){var y;w=r(u,null,C,[]);for(C=u.length;C--;)(y=w[C])&&(u[C]=!(x[C]=y))}):function(u,x,w){return l[0]=u,r(l,null,w,p),l[0]=null,!p.pop()}}),has:e(function(k){return function(l){return 0<b(k,l).length}}),contains:e(function(k){return k=k.replace(Ea,Fa),function(l){return-1<(l.textContent||ja(l)).indexOf(k)}}),lang:e(function(k){return rd.test(k|| "")||b.error("unsupported lang: "+k),k=k.replace(Ea,Fa).toLowerCase(),function(l){var p;do if(p=W?l.lang:l.getAttribute("xml:lang")||l.getAttribute("lang"))return(p=p.toLowerCase())===k||0===p.indexOf(k+"-");while((l=l.parentNode)&&1===l.nodeType);return!1}}),target:function(k){var l=a.location&&a.location.hash;return l&&l.slice(1)===k.id},root:function(k){return k===X},focus:function(k){return k===P.activeElement&&(!P.hasFocus||P.hasFocus())&&!!(k.type||k.href||~k.tabIndex)},enabled:t(!1),disabled:t(!0), checked:function(k){var l=k.nodeName.toLowerCase();return"input"===l&&!!k.checked||"option"===l&&!!k.selected},selected:function(k){return k.parentNode&&k.parentNode.selectedIndex,!0===k.selected},empty:function(k){for(k=k.firstChild;k;k=k.nextSibling)if(6>k.nodeType)return!1;return!0},parent:function(k){return!M.pseudos.empty(k)},header:function(k){return ud.test(k.nodeName)},input:function(k){return td.test(k.nodeName)},button:function(k){var l=k.nodeName.toLowerCase();return"input"===l&&"button"=== k.type||"button"===l},text:function(k){var l;return"input"===k.nodeName.toLowerCase()&&"text"===k.type&&(null==(l=k.getAttribute("type"))||"text"===l.toLowerCase())},first:v(function(){return[0]}),last:v(function(k,l){return[l-1]}),eq:v(function(k,l,p){return[0>p?p+l:p]}),even:v(function(k,l){for(var p=0;p<l;p+=2)k.push(p);return k}),odd:v(function(k,l){for(var p=1;p<l;p+=2)k.push(p);return k}),lt:v(function(k,l,p){for(l=0>p?p+l:l<p?l:p;0<=--l;)k.push(l);return k}),gt:v(function(k,l,p){for(p=0>p? p+l:p;++p<l;)k.push(p);return k})}}).pseudos.nth=M.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})M.pseudos[oa]=n(oa);for(oa in{submit:!0,reset:!0})M.pseudos[oa]=m(oa);return z.prototype=M.filters=M.pseudos,M.setFilters=new z,Y=b.tokenize=function(k,l){var p,r,u,x,w,C;if(w=Ma[k+" "])return l?0:w.slice(0);w=k;var y=[];for(C=M.preFilter;w;){for(x in p&&!(r=pd.exec(w))||(r&&(w=w.slice(r[0].length)||w),y.push(u=[])),p=!1,(r=wc.exec(w))&&(p=r.shift(),u.push({value:p,type:r[0].replace(zb, " ")}),w=w.slice(p.length)),M.filter)!(r=Bb[x].exec(w))||C[x]&&!(r=C[x](r))||(p=r.shift(),u.push({value:p,type:x,matches:r}),w=w.slice(p.length));if(!p)break}return l?w.length:w?b.error(k):Ma(k,y).slice(0)},Za=b.compile=function(k,l){var p,r,u,x,w=[],C=[],y=Ab[k+" "];if(!y){l||(l=Y(k));for(p=l.length;p--;)(y=ha(l[p]))[G]?w.push(y):C.push(y);(y=Ab(k,(r=0<w.length,u=0<C.length,x=function(E,L,aa,Z,I){var Q,T,wa=0,ia="0",fa=E&&[],ba=[],Bc=na,Cc=E||u&&M.find.TAG("*",I),Dc=ea+=null==Bc?1:Math.random()|| .1,vd=Cc.length;for(I&&(na=L==P||L||I);ia!==vd&&null!=(Q=Cc[ia]);ia++){if(u&&Q){var Tb=0;for(L||Q.ownerDocument==P||(ka(Q),aa=!W);T=C[Tb++];)if(T(Q,L||P,aa)){Z.push(Q);break}I&&(ea=Dc)}r&&((Q=!T&&Q)&&wa--,E&&fa.push(Q))}if(wa+=ia,r&&ia!==wa){for(Tb=0;T=w[Tb++];)T(fa,ba,L,aa);if(E){if(0<wa)for(;ia--;)fa[ia]||ba[ia]||(ba[ia]=md.call(Z));ba=U(ba)}Ia.apply(Z,ba);I&&!E&&0<ba.length&&1<wa+w.length&&b.uniqueSort(Z)}return I&&(ea=Dc,na=Bc),fa},r?e(x):x))).selector=k}return y},yb=b.select=function(k,l,p,r){var u, x,w,C,y,E="function"==typeof k&&k,L=!r&&Y(k=E.selector||k);if(p=p||[],1===L.length){if(2<(x=L[0]=L[0].slice(0)).length&&"ID"===(w=x[0]).type&&9===l.nodeType&&W&&M.relative[x[1].type]){if(!(l=(M.find.ID(w.matches[0].replace(Ea,Fa),l)||[])[0]))return p;E&&(l=l.parentNode);k=k.slice(x.shift().value.length)}for(u=Bb.needsContext.test(k)?0:x.length;u--&&(w=x[u],!M.relative[C=w.type]);)if((y=M.find[C])&&(r=y(w.matches[0].replace(Ea,Fa),Rb.test(x[0].type)&&q(l.parentNode)||l))){if(x.splice(u,1),!(k=r.length&& A(x)))return Ia.apply(p,r),p;break}}return(E||Za(k,L))(r,l,!W,p,!l||Rb.test(k)&&q(l.parentNode)||l),p},D.sortStable=G.split("").sort(Sb).join("")===G,D.detectDuplicates=!!xa,ka(),D.sortDetached=f(function(k){return 1&k.compareDocumentPosition(P.createElement("fieldset"))}),f(function(k){return k.innerHTML="<a href='#'></a>","#"===k.firstChild.getAttribute("href")})||g("type|href|height|width",function(k,l,p){if(!p)return k.getAttribute(l,"type"===l.toLowerCase()?1:2)}),D.attributes&&f(function(k){return k.innerHTML= "<input/>",k.firstChild.setAttribute("value",""),""===k.firstChild.getAttribute("value")})||g("value",function(k,l,p){if(!p&&"input"===k.nodeName.toLowerCase())return k.defaultValue}),f(function(k){return null==k.getAttribute("disabled")})||g("checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",function(k,l,p){var r;if(!p)return!0===k[l]?l.toLowerCase():(r=k.getAttributeNode(l))&&r.specified?r.value:null}),b}(H);d.find=Oa;d.expr= Oa.selectors;d.expr[":"]=d.expr.pseudos;d.uniqueSort=d.unique=Oa.uniqueSort;d.text=Oa.getText;d.isXMLDoc=Oa.isXML;d.contains=Oa.contains;d.escapeSelector=Oa.escape;var $a=function(a,b,c){for(var e=[],f=void 0!==c;(a=a[b])&&9!==a.nodeType;)if(1===a.nodeType){if(f&&d(a).is(c))break;e.push(a)}return e},Ec=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},Fc=d.expr.match.needsContext,Gc=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;d.filter=function(a, b,c){var e=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===e.nodeType?d.find.matchesSelector(e,a)?[e]:[]:d.find.matches(a,d.grep(b,function(f){return 1===f.nodeType}))};d.fn.extend({find:function(a){var b,c=this.length,e=this;if("string"!=typeof a)return this.pushStack(d(a).filter(function(){for(b=0;b<c;b++)if(d.contains(e[b],this))return!0}));var f=this.pushStack([]);for(b=0;b<c;b++)d.find(a,e[b],f);return 1<c?d.uniqueSort(f):f},filter:function(a){return this.pushStack(Eb(this,a||[],!1))},not:function(a){return this.pushStack(Eb(this, a||[],!0))},is:function(a){return!!Eb(this,"string"==typeof a&&Fc.test(a)?d(a):a||[],!1).length}});var wd=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(d.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||xd,"string"==typeof a){if(!(e="<"===a[0]&&">"===a[a.length-1]&&3<=a.length?[null,a,null]:wd.exec(a))||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof d?b[0]:b,d.merge(this,d.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:O,!0)),Gc.test(e[1])&&d.isPlainObject(b))for(e in b)J(this[e])? this[e](b[e]):this.attr(e,b[e]);return this}return(f=O.getElementById(e[2]))&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):J(a)?void 0!==c.ready?c.ready(a):a(d):d.makeArray(a,this)}).prototype=d.fn;var xd=d(O);var yd=/^(?:parents|prev(?:Until|All))/,zd={children:!0,contents:!0,next:!0,prev:!0};d.fn.extend({has:function(a){var b=d(a,this),c=b.length;return this.filter(function(){for(var e=0;e<c;e++)if(d.contains(this,b[e]))return!0})},closest:function(a,b){var c, e=0,f=this.length,g=[],h="string"!=typeof a&&d(a);if(!Fc.test(a))for(;e<f;e++)for(c=this[e];c&&c!==b;c=c.parentNode)if(11>c.nodeType&&(h?-1<h.index(c):1===c.nodeType&&d.find.matchesSelector(c,a))){g.push(c);break}return this.pushStack(1<g.length?d.uniqueSort(g):g)},index:function(a){return a?"string"==typeof a?ob.call(d(a),this[0]):ob.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(d.uniqueSort(d.merge(this.get(),d(a, b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});d.each({parent:function(a){return(a=a.parentNode)&&11!==a.nodeType?a:null},parents:function(a){return $a(a,"parentNode")},parentsUntil:function(a,b,c){return $a(a,"parentNode",c)},next:function(a){return Zb(a,"nextSibling")},prev:function(a){return Zb(a,"previousSibling")},nextAll:function(a){return $a(a,"nextSibling")},prevAll:function(a){return $a(a,"previousSibling")},nextUntil:function(a,b,c){return $a(a, "nextSibling",c)},prevUntil:function(a,b,c){return $a(a,"previousSibling",c)},siblings:function(a){return Ec((a.parentNode||{}).firstChild,a)},children:function(a){return Ec(a.firstChild)},contents:function(a){return null!=a.contentDocument&&uc(a.contentDocument)?a.contentDocument:(qa(a,"template")&&(a=a.content||a),d.merge([],a.childNodes))}},function(a,b){d.fn[a]=function(c,e){var f=d.map(this,b,c);return"Until"!==a.slice(-5)&&(e=c),e&&"string"==typeof e&&(f=d.filter(e,f)),1<this.length&&(zd[a]|| d.uniqueSort(f),yd.test(a)&&f.reverse()),this.pushStack(f)}});var Ba=/[^\x20\t\r\n\f]+/g;d.Callbacks=function(a){var b,c;a="string"==typeof a?(b=a,c={},d.each(b.match(Ba)||[],function(z,A){c[A]=!0}),c):d.extend({},a);var e,f,g,h,n=[],m=[],t=-1,v=function(){h=h||a.once;for(g=e=!0;m.length;t=-1)for(f=m.shift();++t<n.length;)!1===n[t].apply(f[0],f[1])&&a.stopOnFalse&&(t=n.length,f=!1);a.memory||(f=!1);e=!1;h&&(n=f?[]:"")},q={add:function(){return n&&(f&&!e&&(t=n.length-1,m.push(f)),function B(A){d.each(A, function(K,U){J(U)?a.unique&&q.has(U)||n.push(U):U&&U.length&&"string"!==Qa(U)&&B(U)})}(arguments),f&&!e&&v()),this},remove:function(){return d.each(arguments,function(z,A){for(var B;-1<(B=d.inArray(A,n,B));)n.splice(B,1),B<=t&&t--}),this},has:function(z){return z?-1<d.inArray(z,n):0<n.length},empty:function(){return n&&(n=[]),this},disable:function(){return h=m=[],n=f="",this},disabled:function(){return!n},lock:function(){return h=m=[],f||e||(n=f=""),this},locked:function(){return!!h},fireWith:function(z, A){return h||(A=[z,(A=A||[]).slice?A.slice():A],m.push(A),e||v()),this},fire:function(){return q.fireWith(this,arguments),this},fired:function(){return!!g}};return q};d.extend({Deferred:function(a){var b=[["notify","progress",d.Callbacks("memory"),d.Callbacks("memory"),2],["resolve","done",d.Callbacks("once memory"),d.Callbacks("once memory"),0,"resolved"],["reject","fail",d.Callbacks("once memory"),d.Callbacks("once memory"),1,"rejected"]],c="pending",e={state:function(){return c},always:function(){return f.done(arguments).fail(arguments), this},"catch":function(g){return e.then(null,g)},pipe:function(){var g=arguments;return d.Deferred(function(h){d.each(b,function(n,m){var t=J(g[m[4]])&&g[m[4]];f[m[1]](function(){var v=t&&t.apply(this,arguments);v&&J(v.promise)?v.promise().progress(h.notify).done(h.resolve).fail(h.reject):h[m[0]+"With"](this,t?[v]:arguments)})});g=null}).promise()},then:function(g,h,n){function m(v,q,z,A){return function(){var B=this,K=arguments,U=function(){var ha;if(!(v<t)){if((ha=z.apply(B,K))===q.promise())throw new TypeError("Thenable self-resolution"); var oa=ha&&("object"==typeof ha||"function"==typeof ha)&&ha.then;J(oa)?A?oa.call(ha,m(t,q,Sa,A),m(t,q,pb,A)):(t++,oa.call(ha,m(t,q,Sa,A),m(t,q,pb,A),m(t,q,Sa,q.notifyWith))):(z!==Sa&&(B=void 0,K=[ha]),(A||q.resolveWith)(B,K))}},va=A?U:function(){try{U()}catch(ha){d.Deferred.exceptionHook&&d.Deferred.exceptionHook(ha,va.stackTrace),t<=v+1&&(z!==pb&&(B=void 0,K=[ha]),q.rejectWith(B,K))}};v?va():(d.Deferred.getStackHook&&(va.stackTrace=d.Deferred.getStackHook()),H.setTimeout(va))}}var t=0;return d.Deferred(function(v){b[0][3].add(m(0, v,J(n)?n:Sa,v.notifyWith));b[1][3].add(m(0,v,J(g)?g:Sa));b[2][3].add(m(0,v,J(h)?h:pb))}).promise()},promise:function(g){return null!=g?d.extend(g,e):e}},f={};return d.each(b,function(g,h){var n=h[2],m=h[5];e[h[1]]=n.add;m&&n.add(function(){c=m},b[3-g][2].disable,b[3-g][3].disable,b[0][2].lock,b[0][3].lock);n.add(h[3].fire);f[h[0]]=function(){return f[h[0]+"With"](this===f?void 0:this,arguments),this};f[h[0]+"With"]=n.fireWith}),e.promise(f),a&&a.call(f,f),f},when:function(a){var b=arguments.length, c=b,e=Array(c),f=Ha.call(arguments),g=d.Deferred(),h=function(n){return function(m){e[n]=this;f[n]=1<arguments.length?Ha.call(arguments):m;--b||g.resolveWith(e,f)}};if(1>=b&&($b(a,g.done(h(c)).resolve,g.reject,!b),"pending"===g.state()||J(f[c]&&f[c].then)))return g.then();for(;c--;)$b(f[c],h(c),g.reject);return g.promise()}});var Ad=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;d.Deferred.exceptionHook=function(a,b){H.console&&H.console.warn&&a&&Ad.test(a.name)&&H.console.warn("jQuery.Deferred exception: "+ a.message,a.stack,b)};d.readyException=function(a){H.setTimeout(function(){throw a;})};var Ub=d.Deferred();d.fn.ready=function(a){return Ub.then(a)["catch"](function(b){d.readyException(b)}),this};d.extend({isReady:!1,readyWait:1,ready:function(a){(!0===a?--d.readyWait:d.isReady)||(d.isReady=!0)!==a&&0<--d.readyWait||Ub.resolveWith(O,[d])}});d.ready.then=Ub.then;"complete"===O.readyState||"loading"!==O.readyState&&!O.documentElement.doScroll?H.setTimeout(d.ready):(O.addEventListener("DOMContentLoaded", qb),H.addEventListener("load",qb));var Ga=function(a,b,c,e,f,g,h){var n=0,m=a.length,t=null==c;if("object"===Qa(c))for(n in f=!0,c)Ga(a,b,n,c[n],!0,g,h);else if(void 0!==e&&(f=!0,J(e)||(h=!0),t&&(h?(b.call(a,e),b=null):(t=b,b=function(v,q,z){return t.call(d(v),z)})),b))for(;n<m;n++)b(a[n],c,h?e:e.call(a[n],n,b(a[n],c)));return f?a:t?b.call(a):m?b(a[0],c):g},Vc=/^-ms-/,Wc=/-([a-z])/g,hb=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};db.uid=1;db.prototype={cache:function(a){var b= a[this.expando];return b||(b={},hb(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var e;a=this.cache(a);if("string"==typeof b)a[Aa(b)]=c;else for(e in b)a[Aa(e)]=b[e];return a},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][Aa(b)]},access:function(a,b,c){return void 0===b||b&&"string"==typeof b&&void 0===c?this.get(a,b):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c=a[this.expando]; if(void 0!==c){if(void 0!==b){var e=(b=Array.isArray(b)?b.map(Aa):(b=Aa(b))in c?[b]:b.match(Ba)||[]).length;for(;e--;)delete c[b[e]]}(void 0===b||d.isEmptyObject(c))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){a=a[this.expando];return void 0!==a&&!d.isEmptyObject(a)}};var F=new db,la=new db,Yc=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Xc=/[A-Z]/g;d.extend({hasData:function(a){return la.hasData(a)||F.hasData(a)},data:function(a,b,c){return la.access(a,b,c)},removeData:function(a, b){la.remove(a,b)},_data:function(a,b,c){return F.access(a,b,c)},_removeData:function(a,b){F.remove(a,b)}});d.fn.extend({data:function(a,b){var c,e,f,g=this[0],h=g&&g.attributes;if(void 0===a){if(this.length&&(f=la.get(g),1===g.nodeType&&!F.get(g,"hasDataAttrs"))){for(c=h.length;c--;)h[c]&&0===(e=h[c].name).indexOf("data-")&&(e=Aa(e.slice(5)),ac(g,e,f[e]));F.set(g,"hasDataAttrs",!0)}return f}return"object"==typeof a?this.each(function(){la.set(this,a)}):Ga(this,function(n){var m;if(g&&void 0===n)return void 0!== (m=la.get(g,a))?m:void 0!==(m=ac(g,a))?m:void 0;this.each(function(){la.set(this,a,n)})},null,b,1<arguments.length,null,!0)},removeData:function(a){return this.each(function(){la.remove(this,a)})}});d.extend({queue:function(a,b,c){var e;if(a)return b=(b||"fx")+"queue",e=F.get(a,b),c&&(!e||Array.isArray(c)?e=F.access(a,b,d.makeArray(c)):e.push(c)),e||[]},dequeue:function(a,b){b=b||"fx";var c=d.queue(a,b),e=c.length,f=c.shift(),g=d._queueHooks(a,b);"inprogress"===f&&(f=c.shift(),e--);f&&("fx"===b&& c.unshift("inprogress"),delete g.stop,f.call(a,function(){d.dequeue(a,b)},g));!e&&g&&g.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return F.get(a,c)||F.access(a,c,{empty:d.Callbacks("once memory").add(function(){F.remove(a,[b+"queue",c])})})}});d.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?d.queue(this[0],a):void 0===b?this:this.each(function(){var e=d.queue(this,a,b);d._queueHooks(this,a);"fx"===a&&"inprogress"!==e[0]&&d.dequeue(this, a)})},dequeue:function(a){return this.each(function(){d.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,e=1,f=d.Deferred(),g=this,h=this.length,n=function(){--e||f.resolveWith(g,[g])};"string"!=typeof a&&(b=a,a=void 0);for(a=a||"fx";h--;)(c=F.get(g[h],a+"queueHooks"))&&c.empty&&(e++,c.empty.add(n));return n(),f.promise(b)}});var Hc=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,eb=new RegExp("^(?:([+-])=|)("+Hc+")([a-z%]*)$","i"),Ca=["Top","Right", "Bottom","Left"],Pa=O.documentElement,Ua=function(a){return d.contains(a.ownerDocument,a)},Bd={composed:!0};Pa.getRootNode&&(Ua=function(a){return d.contains(a.ownerDocument,a)||a.getRootNode(Bd)===a.ownerDocument});var rb=function(a,b){return"none"===(a=b||a).style.display||""===a.style.display&&Ua(a)&&"none"===d.css(a,"display")},cc={};d.fn.extend({show:function(){return Ta(this,!0)},hide:function(){return Ta(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){rb(this)? d(this).show():d(this).hide()})}});var Cb,ib=/^(?:checkbox|radio)$/i,ec=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,fc=/^$|^module$|\/(?:java|ecma)script/i;var ab=O.createDocumentFragment().appendChild(O.createElement("div"));(Cb=O.createElement("input")).setAttribute("type","radio");Cb.setAttribute("checked","checked");Cb.setAttribute("name","t");ab.appendChild(Cb);R.checkClone=ab.cloneNode(!0).cloneNode(!0).lastChild.checked;ab.innerHTML="<textarea>x</textarea>";R.noCloneChecked=!!ab.cloneNode(!0).lastChild.defaultValue; ab.innerHTML="<option></option>";R.option=!!ab.lastChild;var ra={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ra.tbody=ra.tfoot=ra.colgroup=ra.caption=ra.thead;ra.th=ra.td;R.option||(ra.optgroup=ra.option=[1,"<select multiple='multiple'>","</select>"]);var Zc=/<|&#?\w+;/,Ic=/^([^.]*)(?:\.(.+)|)/;d.event={global:{},add:function(a,b,c,e,f){var g,h,n, m,t,v,q,z;var A=F.get(a);if(hb(a))for(c.handler&&(c=(g=c).handler,f=g.selector),f&&d.find.matchesSelector(Pa,f),c.guid||(c.guid=d.guid++),(m=A.events)||(m=A.events=Object.create(null)),(h=A.handle)||(h=A.handle=function(K){return"undefined"!=typeof d&&d.event.triggered!==K.type?d.event.dispatch.apply(a,arguments):void 0}),A=(b=(b||"").match(Ba)||[""]).length;A--;){var B=z=(n=Ic.exec(b[A])||[])[1];n=(n[2]||"").split(".").sort();B&&(v=d.event.special[B]||{},B=(f?v.delegateType:v.bindType)||B,v=d.event.special[B]|| {},t=d.extend({type:B,origType:z,data:e,handler:c,guid:c.guid,selector:f,needsContext:f&&d.expr.match.needsContext.test(f),namespace:n.join(".")},g),(q=m[B])||((q=m[B]=[]).delegateCount=0,v.setup&&!1!==v.setup.call(a,e,n,h)||a.addEventListener&&a.addEventListener(B,h)),v.add&&(v.add.call(a,t),t.handler.guid||(t.handler.guid=c.guid)),f?q.splice(q.delegateCount++,0,t):q.push(t),d.event.global[B]=!0)}},remove:function(a,b,c,e,f){var g,h,n,m,t,v,q,z,A=F.hasData(a)&&F.get(a);if(A&&(m=A.events)){for(t= (b=(b||"").match(Ba)||[""]).length;t--;)if(v=z=(n=Ic.exec(b[t])||[])[1],q=(n[2]||"").split(".").sort(),v){var B=d.event.special[v]||{};var K=m[v=(e?B.delegateType:B.bindType)||v]||[];n=n[2]&&new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)");for(h=g=K.length;g--;){var U=K[g];!f&&z!==U.origType||c&&c.guid!==U.guid||n&&!n.test(U.namespace)||e&&e!==U.selector&&("**"!==e||!U.selector)||(K.splice(g,1),U.selector&&K.delegateCount--,B.remove&&B.remove.call(a,U))}h&&!K.length&&(B.teardown&&!1!==B.teardown.call(a, q,A.handle)||d.removeEvent(a,v,A.handle),delete m[v])}else for(v in m)d.event.remove(a,v+b[t],c,e,!0);d.isEmptyObject(m)&&F.remove(a,"handle events")}},dispatch:function(a){var b,c,e,f,g=Array(arguments.length),h=d.event.fix(a);var n=(F.get(this,"events")||Object.create(null))[h.type]||[];var m=d.event.special[h.type]||{};g[0]=h;for(b=1;b<arguments.length;b++)g[b]=arguments[b];if(h.delegateTarget=this,!m.preDispatch||!1!==m.preDispatch.call(this,h)){var t=d.event.handlers.call(this,h,n);for(b=0;(e= t[b++])&&!h.isPropagationStopped();)for(h.currentTarget=e.elem,n=0;(f=e.handlers[n++])&&!h.isImmediatePropagationStopped();)h.rnamespace&&!1!==f.namespace&&!h.rnamespace.test(f.namespace)||(h.handleObj=f,h.data=f.data,void 0!==(c=((d.event.special[f.origType]||{}).handle||f.handler).apply(e.elem,g))&&!1===(h.result=c)&&(h.preventDefault(),h.stopPropagation()));return m.postDispatch&&m.postDispatch.call(this,h),h.result}},handlers:function(a,b){var c,e,f,g=[],h=b.delegateCount,n=a.target;if(h&&n.nodeType&& !("click"===a.type&&1<=a.button))for(;n!==this;n=n.parentNode||this)if(1===n.nodeType&&("click"!==a.type||!0!==n.disabled)){var m=[];var t={};for(c=0;c<h;c++)void 0===t[f=(e=b[c]).selector+" "]&&(t[f]=e.needsContext?-1<d(f,this).index(n):d.find(f,this,null,[n]).length),t[f]&&m.push(e);m.length&&g.push({elem:n,handlers:m})}return n=this,h<b.length&&g.push({elem:n,handlers:b.slice(h)}),g},addProp:function(a,b){Object.defineProperty(d.Event.prototype,a,{enumerable:!0,configurable:!0,get:J(b)?function(){if(this.originalEvent)return b(this.originalEvent)}: function(){if(this.originalEvent)return this.originalEvent[a]},set:function(c){Object.defineProperty(this,a,{enumerable:!0,configurable:!0,writable:!0,value:c})}})},fix:function(a){return a[d.expando]?a:new d.Event(a)},special:{load:{noBubble:!0},click:{setup:function(a){a=this||a;return ib.test(a.type)&&a.click&&qa(a,"input")&&sb(a,"click",Va),!1},trigger:function(a){a=this||a;return ib.test(a.type)&&a.click&&qa(a,"input")&&sb(a,"click"),!0},_default:function(a){a=a.target;return ib.test(a.type)&& a.click&&qa(a,"input")&&F.get(a,"click")||qa(a,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}}};d.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)};d.Event=function(a,b){if(!(this instanceof d.Event))return new d.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&!1===a.returnValue?Va:Wa,this.target=a.target&&3=== a.target.nodeType?a.target.parentNode:a.target,this.currentTarget=a.currentTarget,this.relatedTarget=a.relatedTarget):this.type=a;b&&d.extend(this,b);this.timeStamp=a&&a.timeStamp||Date.now();this[d.expando]=!0};d.Event.prototype={constructor:d.Event,isDefaultPrevented:Wa,isPropagationStopped:Wa,isImmediatePropagationStopped:Wa,isSimulated:!1,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=Va;a&&!this.isSimulated&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent; this.isPropagationStopped=Va;a&&!this.isSimulated&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=Va;a&&!this.isSimulated&&a.stopImmediatePropagation();this.stopPropagation()}};d.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0, pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},d.event.addProp);d.each({focus:"focusin",blur:"focusout"},function(a,b){d.event.special[a]={setup:function(){return sb(this,a,$c),!1},trigger:function(){return sb(this,a),!0},_default:function(c){return F.get(c.target,a)},delegateType:b}});d.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){d.event.special[a]={delegateType:b,bindType:b, handle:function(c){var e,f=c.relatedTarget,g=c.handleObj;return f&&(f===this||d.contains(this,f))||(c.type=g.origType,e=g.handler.apply(this,arguments),c.type=b),e}}});d.fn.extend({on:function(a,b,c,e){return Gb(this,a,b,c,e)},one:function(a,b,c,e){return Gb(this,a,b,c,e,1)},off:function(a,b,c){var e,f;if(a&&a.preventDefault&&a.handleObj)return e=a.handleObj,d(a.delegateTarget).off(e.namespace?e.origType+"."+e.namespace:e.origType,e.selector,e.handler),this;if("object"==typeof a){for(f in a)this.off(f, b,a[f]);return this}return!1!==b&&"function"!=typeof b||(c=b,b=void 0),!1===c&&(c=Wa),this.each(function(){d.event.remove(this,a,c,b)})}});var Cd=/<script|<style|<link/i,cd=/checked\s*(?:[^=]|=\s*.checked.)/i,dd=/^\s*<!\[CDATA\[|\]\]>\s*$/g;d.extend({htmlPrefilter:function(a){return a},clone:function(a,b,c){var e,f,g,h=a.cloneNode(!0),n=Ua(a);if(!(R.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||d.isXMLDoc(a))){var m=ma(h);var t=0;for(e=(f=ma(a)).length;t<e;t++){var v=f[t];var q=m[t];void 0;"input"=== (g=q.nodeName.toLowerCase())&&ib.test(v.type)?q.checked=v.checked:"input"!==g&&"textarea"!==g||(q.defaultValue=v.defaultValue)}}if(b)if(c)for(f=f||ma(a),m=m||ma(h),t=0,e=f.length;t<e;t++)hc(f[t],m[t]);else hc(a,h);return 0<(m=ma(h,"script")).length&&Fb(m,!n&&ma(a,"script")),h},cleanData:function(a){for(var b,c,e,f=d.event.special,g=0;void 0!==(c=a[g]);g++)if(hb(c)){if(b=c[F.expando]){if(b.events)for(e in b.events)f[e]?d.event.remove(c,e):d.removeEvent(c,e,b.handle);c[F.expando]=void 0}c[la.expando]&& (c[la.expando]=void 0)}}});d.fn.extend({detach:function(a){return jc(this,a,!0)},remove:function(a){return jc(this,a)},text:function(a){return Ga(this,function(b){return void 0===b?d.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=b)})},null,a,arguments.length)},append:function(){return Xa(this,arguments,function(a){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||gc(this,a).appendChild(a)})},prepend:function(){return Xa(this, arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=gc(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Xa(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Xa(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(d.cleanData(ma(a,!1)),a.textContent="");return this},clone:function(a, b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return d.clone(this,a,b)})},html:function(a){return Ga(this,function(b){var c=this[0]||{},e=0,f=this.length;if(void 0===b&&1===c.nodeType)return c.innerHTML;if("string"==typeof b&&!Cd.test(b)&&!ra[(ec.exec(b)||["",""])[1].toLowerCase()]){b=d.htmlPrefilter(b);try{for(;e<f;e++)1===(c=this[e]||{}).nodeType&&(d.cleanData(ma(c,!1)),c.innerHTML=b);c=0}catch(g){}}c&&this.empty().append(b)},null,a,arguments.length)},replaceWith:function(){var a=[]; return Xa(this,arguments,function(b){var c=this.parentNode;0>d.inArray(this,a)&&(d.cleanData(ma(this)),c&&c.replaceChild(b,this))},a)}});d.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){d.fn[a]=function(c){for(var e=[],f=d(c),g=f.length-1,h=0;h<=g;h++)c=h===g?this:this.clone(!0),d(f[h])[b](c),Qb.apply(e,c.get());return this.pushStack(e)}});var Ib=new RegExp("^("+Hc+")(?!px)[a-z%]+$","i"),Hb=/^--/,tb=function(a){var b=a.ownerDocument.defaultView; return b&&b.opener||(b=H),b.getComputedStyle(a)},Jc=function(a,b,c){var e,f={};for(e in b)f[e]=a.style[e],a.style[e]=b[e];for(e in c=c.call(a),b)a.style[e]=f[e];return c},fd=new RegExp(Ca.join("|"),"i"),ed=RegExp("^[\\x20\\t\\r\\n\\f]+|((?:^|[^\\\\])(?:\\\\.)*)[\\x20\\t\\r\\n\\f]+$","g");!function(){function a(){if(m){n.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0";m.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%"; Pa.appendChild(n).appendChild(m);var t=H.getComputedStyle(m);b="1%"!==t.top;h=12===Math.round(parseFloat(t.marginLeft));m.style.right="60%";f=36===Math.round(parseFloat(t.right));c=36===Math.round(parseFloat(t.width));m.style.position="absolute";e=12===Math.round(parseFloat(m.offsetWidth/3));Pa.removeChild(n);m=null}}var b,c,e,f,g,h,n=O.createElement("div"),m=O.createElement("div");m.style&&(m.style.backgroundClip="content-box",m.cloneNode(!0).style.backgroundClip="",R.clearCloneStyle="content-box"=== m.style.backgroundClip,d.extend(R,{boxSizingReliable:function(){return a(),c},pixelBoxStyles:function(){return a(),f},pixelPosition:function(){return a(),b},reliableMarginLeft:function(){return a(),h},scrollboxSize:function(){return a(),e},reliableTrDimensions:function(){var t,v,q,z;return null==g&&(t=O.createElement("table"),v=O.createElement("tr"),q=O.createElement("div"),t.style.cssText="position:absolute;left:-11111px;border-collapse:separate",v.style.cssText="border:1px solid",v.style.height= "1px",q.style.height="9px",q.style.display="block",Pa.appendChild(t).appendChild(v).appendChild(q),z=H.getComputedStyle(v),g=parseInt(z.height,10)+parseInt(z.borderTopWidth,10)+parseInt(z.borderBottomWidth,10)===v.offsetHeight,Pa.removeChild(t)),g}}))}();var nc=["Webkit","Moz","ms"],mc=O.createElement("div").style,lc={},Dd=/^(none|table(?!-c[ea]).+)/,Ed={position:"absolute",visibility:"hidden",display:"block"},Kc={letterSpacing:"0",fontWeight:"400"};d.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c= fb(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(a,b,c,e){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var f,g,h,n=Aa(b),m=Hb.test(b),t=a.style;if(m||(b=Jb(n)),h=d.cssHooks[b]||d.cssHooks[n],void 0=== c)return h&&"get"in h&&void 0!==(f=h.get(a,!1,e))?f:t[b];"string"===(g=typeof c)&&(f=eb.exec(c))&&f[1]&&(c=bc(a,b,f),g="number");null!=c&&c==c&&("number"!==g||m||(c+=f&&f[3]||(d.cssNumber[n]?"":"px")),R.clearCloneStyle||""!==c||0!==b.indexOf("background")||(t[b]="inherit"),h&&"set"in h&&void 0===(c=h.set(a,c,e))||(m?t.setProperty(b,c):t[b]=c))}},css:function(a,b,c,e){var f,g,h,n=Aa(b);return Hb.test(b)||(b=Jb(n)),(h=d.cssHooks[b]||d.cssHooks[n])&&"get"in h&&(f=h.get(a,!0,c)),void 0===f&&(f=fb(a,b, e)),"normal"===f&&b in Kc&&(f=Kc[b]),""===c||c?(g=parseFloat(f),!0===c||isFinite(g)?g||0:f):f}});d.each(["height","width"],function(a,b){d.cssHooks[b]={get:function(c,e,f){if(e)return!Dd.test(d.css(c,"display"))||c.getClientRects().length&&c.getBoundingClientRect().width?pc(c,b,f):Jc(c,Ed,function(){return pc(c,b,f)})},set:function(c,e,f){var g,h=tb(c),n=!R.scrollboxSize()&&"absolute"===h.position,m=(n||f)&&"border-box"===d.css(c,"boxSizing",!1,h);f=f?Kb(c,b,f,m,h):0;return m&&n&&(f-=Math.ceil(c["offset"+ b[0].toUpperCase()+b.slice(1)]-parseFloat(h[b])-Kb(c,b,"border",!1,h)-.5)),f&&(g=eb.exec(e))&&"px"!==(g[3]||"px")&&(c.style[b]=e,e=d.css(c,b)),oc(0,e,f)}}});d.cssHooks.marginLeft=kc(R.reliableMarginLeft,function(a,b){if(b)return(parseFloat(fb(a,"marginLeft"))||a.getBoundingClientRect().left-Jc(a,{marginLeft:0},function(){return a.getBoundingClientRect().left}))+"px"});d.each({margin:"",padding:"",border:"Width"},function(a,b){d.cssHooks[a+b]={expand:function(c){var e=0,f={};for(c="string"==typeof c? c.split(" "):[c];4>e;e++)f[a+Ca[e]+b]=c[e]||c[e-2]||c[0];return f}};"margin"!==a&&(d.cssHooks[a+b].set=oc)});d.fn.extend({css:function(a,b){return Ga(this,function(c,e,f){var g,h={},n=0;if(Array.isArray(e)){f=tb(c);for(g=e.length;n<g;n++)h[e[n]]=d.css(c,e[n],!1,f);return h}return void 0!==f?d.style(c,e,f):d.css(c,e)},a,b,1<arguments.length)}});((d.Tween=ta).prototype={constructor:ta,init:function(a,b,c,e,f,g){this.elem=a;this.prop=c;this.easing=f||d.easing._default;this.options=b;this.start=this.now= this.cur();this.end=e;this.unit=g||(d.cssNumber[c]?"":"px")},cur:function(){var a=ta.propHooks[this.prop];return a&&a.get?a.get(this):ta.propHooks._default.get(this)},run:function(a){var b,c=ta.propHooks[this.prop];return this.options.duration?this.pos=b=d.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):ta.propHooks._default.set(this), this}}).init.prototype=ta.prototype;(ta.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=d.css(a.elem,a.prop,""))&&"auto"!==b?b:0},set:function(a){d.fx.step[a.prop]?d.fx.step[a.prop](a):1!==a.elem.nodeType||!d.cssHooks[a.prop]&&null==a.elem.style[Jb(a.prop)]?a.elem[a.prop]=a.now:d.style(a.elem,a.prop,a.now+a.unit)}}}).scrollTop=ta.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]= a.now)}};d.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"};d.fx=ta.prototype.init;d.fx.step={};var Ya,ub,Fd=/^(?:toggle|show|hide)$/,Gd=/queueHooks$/;d.Animation=d.extend(ua,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return bc(c.elem,a,eb.exec(b),c),c}]},tweener:function(a,b){J(a)?(b=a,a=["*"]):a=a.match(Ba);for(var c,e=0,f=a.length;e<f;e++)c=a[e],ua.tweeners[c]=ua.tweeners[c]||[],ua.tweeners[c].unshift(b)},prefilters:[function(a, b,c){var e,f,g,h,n,m,t,v="width"in b||"height"in b,q=this,z={},A=a.style,B=a.nodeType&&rb(a),K=F.get(a,"fxshow");for(e in c.queue||(null==(h=d._queueHooks(a,"fx")).unqueued&&(h.unqueued=0,n=h.empty.fire,h.empty.fire=function(){h.unqueued||n()}),h.unqueued++,q.always(function(){q.always(function(){h.unqueued--;d.queue(a,"fx").length||h.empty.fire()})})),b)if(f=b[e],Fd.test(f)){if(delete b[e],g=g||"toggle"===f,f===(B?"hide":"show")){if("show"!==f||!K||void 0===K[e])continue;B=!0}z[e]=K&&K[e]||d.style(a, e)}if((b=!d.isEmptyObject(b))||!d.isEmptyObject(z))for(e in v&&1===a.nodeType&&(c.overflow=[A.overflow,A.overflowX,A.overflowY],null==(m=K&&K.display)&&(m=F.get(a,"display")),"none"===(t=d.css(a,"display"))&&(m?t=m:(Ta([a],!0),m=a.style.display||m,t=d.css(a,"display"),Ta([a]))),("inline"===t||"inline-block"===t&&null!=m)&&"none"===d.css(a,"float")&&(b||(q.done(function(){A.display=m}),null==m&&(t=A.display,m="none"===t?"":t)),A.display="inline-block")),c.overflow&&(A.overflow="hidden",q.always(function(){A.overflow= c.overflow[0];A.overflowX=c.overflow[1];A.overflowY=c.overflow[2]})),b=!1,z)b||(K?"hidden"in K&&(B=K.hidden):K=F.access(a,"fxshow",{display:m}),g&&(K.hidden=!B),B&&Ta([a],!0),q.done(function(){for(e in B||Ta([a]),F.remove(a,"fxshow"),z)d.style(a,e,z[e])})),b=rc(B?K[e]:0,e,q),e in K||(K[e]=b.start,B&&(b.end=b.start,b.start=0))}],prefilter:function(a,b){b?ua.prefilters.unshift(a):ua.prefilters.push(a)}});d.speed=function(a,b,c){var e=a&&"object"==typeof a?d.extend({},a):{complete:c||!c&&b||J(a)&&a, duration:a,easing:c&&b||b&&!J(b)&&b};return d.fx.off?e.duration=0:"number"!=typeof e.duration&&(e.duration in d.fx.speeds?e.duration=d.fx.speeds[e.duration]:e.duration=d.fx.speeds._default),null!=e.queue&&!0!==e.queue||(e.queue="fx"),e.old=e.complete,e.complete=function(){J(e.old)&&e.old.call(this);e.queue&&d.dequeue(this,e.queue)},e};d.fn.extend({fadeTo:function(a,b,c,e){return this.filter(rb).css("opacity",0).show().end().animate({opacity:b},a,c,e)},animate:function(a,b,c,e){var f=d.isEmptyObject(a), g=d.speed(b,c,e);b=function(){var h=ua(this,d.extend({},a),g);(f||F.get(this,"finish"))&&h.stop(!0)};return b.finish=b,f||!1===g.queue?this.each(b):this.queue(g.queue,b)},stop:function(a,b,c){var e=function(f){var g=f.stop;delete f.stop;g(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&this.queue(a||"fx",[]),this.each(function(){var f=!0,g=null!=a&&a+"queueHooks",h=d.timers,n=F.get(this);if(g)n[g]&&n[g].stop&&e(n[g]);else for(g in n)n[g]&&n[g].stop&&Gd.test(g)&&e(n[g]);for(g=h.length;g--;)h[g].elem!== this||null!=a&&h[g].queue!==a||(h[g].anim.stop(c),f=!1,h.splice(g,1));!f&&c||d.dequeue(this,a)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var b=F.get(this),c=b[a+"queue"];var e=b[a+"queueHooks"];var f=d.timers,g=c?c.length:0;b.finish=!0;d.queue(this,a,[]);e&&e.stop&&e.stop.call(this,!0);for(e=f.length;e--;)f[e].elem===this&&f[e].queue===a&&(f[e].anim.stop(!0),f.splice(e,1));for(e=0;e<g;e++)c[e]&&c[e].finish&&c[e].finish.call(this);delete b.finish})}});d.each(["toggle","show", "hide"],function(a,b){var c=d.fn[b];d.fn[b]=function(e,f,g){return null==e||"boolean"==typeof e?c.apply(this,arguments):this.animate(vb(b,!0),e,f,g)}});d.each({slideDown:vb("show"),slideUp:vb("hide"),slideToggle:vb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){d.fn[a]=function(c,e,f){return this.animate(b,c,e,f)}});d.timers=[];d.fx.tick=function(){var a,b=0,c=d.timers;for(Ya=Date.now();b<c.length;b++)(a=c[b])()||c[b]!==a||c.splice(b--,1);c.length|| d.fx.stop();Ya=void 0};d.fx.timer=function(a){d.timers.push(a);d.fx.start()};d.fx.interval=13;d.fx.start=function(){ub||(ub=!0,Lb())};d.fx.stop=function(){ub=null};d.fx.speeds={slow:600,fast:200,_default:400};d.fn.delay=function(a,b){return a=d.fx&&d.fx.speeds[a]||a,b=b||"fx",this.queue(b,function(c,e){var f=H.setTimeout(c,a);e.stop=function(){H.clearTimeout(f)}})};var jb=O.createElement("input");var Hd=O.createElement("select").appendChild(O.createElement("option"));jb.type="checkbox";R.checkOn= ""!==jb.value;R.optSelected=Hd.selected;(jb=O.createElement("input")).value="t";jb.type="radio";R.radioValue="t"===jb.value;var kb=d.expr.attrHandle;d.fn.extend({attr:function(a,b){return Ga(this,d.attr,a,b,1<arguments.length)},removeAttr:function(a){return this.each(function(){d.removeAttr(this,a)})}});d.extend({attr:function(a,b,c){var e,f,g=a.nodeType;if(3!==g&&8!==g&&2!==g)return"undefined"==typeof a.getAttribute?d.prop(a,b,c):(1===g&&d.isXMLDoc(a)||(f=d.attrHooks[b.toLowerCase()]||(d.expr.match.bool.test(b)? Id:void 0)),void 0!==c?null===c?void d.removeAttr(a,b):f&&"set"in f&&void 0!==(e=f.set(a,c,b))?e:(a.setAttribute(b,c+""),c):f&&"get"in f&&null!==(e=f.get(a,b))?e:null==(e=d.find.attr(a,b))?void 0:e)},attrHooks:{type:{set:function(a,b){if(!R.radioValue&&"radio"===b&&qa(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,e=0,f=b&&b.match(Ba);if(f&&1===a.nodeType)for(;c=f[e++];)a.removeAttribute(c)}});var Id={set:function(a,b,c){return!1===b? d.removeAttr(a,c):a.setAttribute(c,c),c}};d.each(d.expr.match.bool.source.match(/\w+/g),function(a,b){var c=kb[b]||d.find.attr;kb[b]=function(e,f,g){var h,n,m=f.toLowerCase();return g||(n=kb[m],kb[m]=h,h=null!=c(e,f,g)?m:null,kb[m]=n),h}});var Jd=/^(?:input|select|textarea|button)$/i,Kd=/^(?:a|area)$/i;d.fn.extend({prop:function(a,b){return Ga(this,d.prop,a,b,1<arguments.length)},removeProp:function(a){return this.each(function(){delete this[d.propFix[a]||a]})}});d.extend({prop:function(a,b,c){var e, f,g=a.nodeType;if(3!==g&&8!==g&&2!==g)return 1===g&&d.isXMLDoc(a)||(b=d.propFix[b]||b,f=d.propHooks[b]),void 0!==c?f&&"set"in f&&void 0!==(e=f.set(a,c,b))?e:a[b]=c:f&&"get"in f&&null!==(e=f.get(a,b))?e:a[b]},propHooks:{tabIndex:{get:function(a){var b=d.find.attr(a,"tabindex");return b?parseInt(b,10):Jd.test(a.nodeName)||Kd.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}});R.optSelected||(d.propHooks.selected={get:function(a){a=a.parentNode;return a&&a.parentNode&&a.parentNode.selectedIndex, null},set:function(a){a=a.parentNode;a&&(a.selectedIndex,a.parentNode&&a.parentNode.selectedIndex)}});d.each("tabIndex readOnly maxLength cellSpacing cellPadding rowSpan colSpan useMap frameBorder contentEditable".split(" "),function(){d.propFix[this.toLowerCase()]=this});d.fn.extend({addClass:function(a){var b,c,e,f,g,h;return J(a)?this.each(function(n){d(this).addClass(a.call(this,n,Ka(this)))}):(b=Mb(a)).length?this.each(function(){if(e=Ka(this),c=1===this.nodeType&&" "+Ja(e)+" "){for(g=0;g<b.length;g++)f= b[g],0>c.indexOf(" "+f+" ")&&(c+=f+" ");h=Ja(c);e!==h&&this.setAttribute("class",h)}}):this},removeClass:function(a){var b,c,e,f,g,h;return J(a)?this.each(function(n){d(this).removeClass(a.call(this,n,Ka(this)))}):arguments.length?(b=Mb(a)).length?this.each(function(){if(e=Ka(this),c=1===this.nodeType&&" "+Ja(e)+" "){for(g=0;g<b.length;g++)for(f=b[g];-1<c.indexOf(" "+f+" ");)c=c.replace(" "+f+" "," ");h=Ja(c);e!==h&&this.setAttribute("class",h)}}):this:this.attr("class","")},toggleClass:function(a, b){var c,e,f,g,h=typeof a,n="string"===h||Array.isArray(a);return J(a)?this.each(function(m){d(this).toggleClass(a.call(this,m,Ka(this),b),b)}):"boolean"==typeof b&&n?b?this.addClass(a):this.removeClass(a):(c=Mb(a),this.each(function(){if(n)for(g=d(this),f=0;f<c.length;f++)e=c[f],g.hasClass(e)?g.removeClass(e):g.addClass(e);else void 0!==a&&"boolean"!==h||((e=Ka(this))&&F.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===a?"":F.get(this,"__className__")||""))}))},hasClass:function(a){var b, c=0;for(a=" "+a+" ";b=this[c++];)if(1===b.nodeType&&-1<(" "+Ja(Ka(b))+" ").indexOf(a))return!0;return!1}});var Ld=/\r/g;d.fn.extend({val:function(a){var b,c,e,f=this[0];return arguments.length?(e=J(a),this.each(function(g){var h;1===this.nodeType&&(null==(h=e?a.call(this,g,d(this).val()):a)?h="":"number"==typeof h?h+="":Array.isArray(h)&&(h=d.map(h,function(n){return null==n?"":n+""})),(b=d.valHooks[this.type]||d.valHooks[this.nodeName.toLowerCase()])&&"set"in b&&void 0!==b.set(this,h,"value")||(this.value= h))})):f?(b=d.valHooks[f.type]||d.valHooks[f.nodeName.toLowerCase()])&&"get"in b&&void 0!==(c=b.get(f,"value"))?c:"string"==typeof(c=f.value)?c.replace(Ld,""):null==c?"":c:void 0}});d.extend({valHooks:{option:{get:function(a){var b=d.find.attr(a,"value");return null!=b?b:Ja(d.text(a))}},select:{get:function(a){var b,c,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],n=g?f+1:e.length;for(c=0>f?n:g?f:0;c<n;c++)if(!(!(b=e[c]).selected&&c!==f||b.disabled||b.parentNode.disabled&&qa(b.parentNode, "optgroup"))){if(a=d(b).val(),g)return a;h.push(a)}return h},set:function(a,b){for(var c,e,f=a.options,g=d.makeArray(b),h=f.length;h--;)((e=f[h]).selected=-1<d.inArray(d.valHooks.option.get(e),g))&&(c=!0);return c||(a.selectedIndex=-1),g}}}});d.each(["radio","checkbox"],function(){d.valHooks[this]={set:function(a,b){if(Array.isArray(b))return a.checked=-1<d.inArray(d(a).val(),b)}};R.checkOn||(d.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});R.focusin="onfocusin"in H;var Lc=/^(?:focusinfocus|focusoutblur)$/,Mc=function(a){a.stopPropagation()};d.extend(d.event,{trigger:function(a,b,c,e){var f,g,h,n,m,t,v=[c||O],q=wb.call(a,"type")?a.type:a;var z=wb.call(a,"namespace")?a.namespace.split("."):[];if(f=t=g=c=c||O,3!==c.nodeType&&8!==c.nodeType&&!Lc.test(q+d.event.triggered)&&(-1<q.indexOf(".")&&(q=(z=q.split(".")).shift(),z.sort()),h=0>q.indexOf(":")&&"on"+q,(a=a[d.expando]?a:new d.Event(q,"object"==typeof a&&a)).isTrigger=e?2:3,a.namespace=z.join("."),a.rnamespace= a.namespace?new RegExp("(^|\\.)"+z.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,a.result=void 0,a.target||(a.target=c),b=null==b?[a]:d.makeArray(b,[a]),m=d.event.special[q]||{},e||!m.trigger||!1!==m.trigger.apply(c,b))){if(!e&&!m.noBubble&&!Ra(c)){var A=m.delegateType||q;for(Lc.test(A+q)||(f=f.parentNode);f;f=f.parentNode)v.push(f),g=f;g===(c.ownerDocument||O)&&v.push(g.defaultView||g.parentWindow||H)}for(z=0;(f=v[z++])&&!a.isPropagationStopped();)t=f,a.type=1<z?A:m.bindType||q,(n=(F.get(f,"events")||Object.create(null))[a.type]&& F.get(f,"handle"))&&n.apply(f,b),(n=h&&f[h])&&n.apply&&hb(f)&&(a.result=n.apply(f,b),!1===a.result&&a.preventDefault());return a.type=q,e||a.isDefaultPrevented()||m._default&&!1!==m._default.apply(v.pop(),b)||!hb(c)||h&&J(c[q])&&!Ra(c)&&((g=c[h])&&(c[h]=null),d.event.triggered=q,a.isPropagationStopped()&&t.addEventListener(q,Mc),c[q](),a.isPropagationStopped()&&t.removeEventListener(q,Mc),d.event.triggered=void 0,g&&(c[h]=g)),a.result}},simulate:function(a,b,c){a=d.extend(new d.Event,c,{type:a,isSimulated:!0}); d.event.trigger(a,null,b)}});d.fn.extend({trigger:function(a,b){return this.each(function(){d.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return d.event.trigger(a,b,c,!0)}});R.focusin||d.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(e){d.event.simulate(b,e.target,d.event.fix(e))};d.event.special[b]={setup:function(){var e=this.ownerDocument||this.document||this,f=F.access(e,b);f||e.addEventListener(a,c,!0);F.access(e,b,(f||0)+1)},teardown:function(){var e= this.ownerDocument||this.document||this,f=F.access(e,b)-1;f?F.access(e,b,f):(e.removeEventListener(a,c,!0),F.remove(e,b))}}});var lb=H.location,Nc=Date.now(),Vb=/\?/;d.parseXML=function(a){var b;if(!a||"string"!=typeof a)return null;try{var c=(new H.DOMParser).parseFromString(a,"text/xml")}catch(e){}return b=c&&c.getElementsByTagName("parsererror")[0],c&&!b||d.error("Invalid XML: "+(b?d.map(b.childNodes,function(e){return e.textContent}).join("\n"):a)),c};var gd=/\[\]$/,Oc=/\r?\n/g,Md=/^(?:submit|button|image|reset|file)$/i, Nd=/^(?:input|select|textarea|keygen)/i;d.param=function(a,b){var c,e=[],f=function(g,h){var n=J(h)?h():h;e[e.length]=encodeURIComponent(g)+"="+encodeURIComponent(null==n?"":n)};if(null==a)return"";if(Array.isArray(a)||a.jquery&&!d.isPlainObject(a))d.each(a,function(){f(this.name,this.value)});else for(c in a)Nb(c,a[c],b,f);return e.join("&")};d.fn.extend({serialize:function(){return d.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=d.prop(this,"elements"); return a?d.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!d(this).is(":disabled")&&Nd.test(this.nodeName)&&!Md.test(a)&&(this.checked||!ib.test(a))}).map(function(a,b){var c=d(this).val();return null==c?null:Array.isArray(c)?d.map(c,function(e){return{name:b.name,value:e.replace(Oc,"\r\n")}}):{name:b.name,value:c.replace(Oc,"\r\n")}}).get()}});var Od=/%20/g,Pd=/#.*$/,Qd=/([?&])_=[^&]*/,Rd=/^(.*?):[ \t]*([^\r\n]*)$/gm,Sd=/^(?:GET|HEAD)$/,Td=/^\/\//,Pc={},Ob={},Qc="*/".concat("*"), Wb=O.createElement("a");Wb.href=lb.href;d.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:lb.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(lb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Qc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML", text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":d.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Pb(Pb(a,d.ajaxSettings),b):Pb(d.ajaxSettings,a)},ajaxPrefilter:sc(Pc),ajaxTransport:sc(Ob),ajax:function(a,b){function c(N,Y,Za,yb){var na,sa,xa,ka,P,X=Y;ja||(ja=!0,n&&H.clearTimeout(n),e=void 0,g=yb||"",D.readyState=0<N?4:0,na=200<=N&&300>N||304===N,Za&&(ka=function(W,S,pa){for(var ya,da,G,V,ea=W.contents, ca=W.dataTypes;"*"===ca[0];)ca.shift(),void 0===ya&&(ya=W.mimeType||S.getResponseHeader("Content-Type"));if(ya)for(da in ea)if(ea[da]&&ea[da].test(ya)){ca.unshift(da);break}if(ca[0]in pa)G=ca[0];else{for(da in pa){if(!ca[0]||W.converters[da+" "+ca[0]]){G=da;break}V||(V=da)}G=G||V}if(G)return G!==ca[0]&&ca.unshift(G),pa[G]}(q,D,Za)),!na&&-1<d.inArray("script",q.dataTypes)&&0>d.inArray("json",q.dataTypes)&&(q.converters["text script"]=function(){}),ka=function(W,S,pa,ya){var da,G,V,ea,ca,za={},Ma=W.dataTypes.slice(); if(Ma[1])for(V in W.converters)za[V.toLowerCase()]=W.converters[V];for(G=Ma.shift();G;)if(W.responseFields[G]&&(pa[W.responseFields[G]]=S),!ca&&ya&&W.dataFilter&&(S=W.dataFilter(S,W.dataType)),ca=G,G=Ma.shift())if("*"===G)G=ca;else if("*"!==ca&&ca!==G){if(!(V=za[ca+" "+G]||za["* "+G]))for(da in za)if((ea=da.split(" "))[1]===G&&(V=za[ca+" "+ea[0]]||za["* "+ea[0]])){!0===V?V=za[da]:!0!==za[da]&&(G=ea[0],Ma.unshift(ea[1]));break}if(!0!==V)if(V&&W["throws"])S=V(S);else try{S=V(S)}catch(Ab){return{state:"parsererror", error:V?Ab:"No conversion from "+ca+" to "+G}}}return{state:"success",data:S}}(q,ka,D,na),na?(q.ifModified&&((P=D.getResponseHeader("Last-Modified"))&&(d.lastModified[f]=P),(P=D.getResponseHeader("etag"))&&(d.etag[f]=P)),204===N||"HEAD"===q.type?X="nocontent":304===N?X="notmodified":(X=ka.state,sa=ka.data,na=!(xa=ka.error))):(xa=X,!N&&X||(X="error",0>N&&(N=0))),D.status=N,D.statusText=(Y||X)+"",na?B.resolveWith(z,[sa,X,D]):B.rejectWith(z,[D,X,xa]),D.statusCode(U),U=void 0,m&&A.trigger(na?"ajaxSuccess": "ajaxError",[D,q,na?sa:xa]),K.fireWith(z,[D,X]),m&&(A.trigger("ajaxComplete",[D,q]),--d.active||d.event.trigger("ajaxStop")))}"object"==typeof a&&(b=a,a=void 0);b=b||{};var e,f,g,h,n,m,t,v,q=d.ajaxSetup({},b),z=q.context||q,A=q.context&&(z.nodeType||z.jquery)?d(z):d.event,B=d.Deferred(),K=d.Callbacks("once memory"),U=q.statusCode||{},va={},ha={},oa="canceled",D={readyState:0,getResponseHeader:function(N){var Y;if(ja){if(!h)for(h={};Y=Rd.exec(g);)h[Y[1].toLowerCase()+" "]=(h[Y[1].toLowerCase()+" "]|| []).concat(Y[2]);Y=h[N.toLowerCase()+" "]}return null==Y?null:Y.join(", ")},getAllResponseHeaders:function(){return ja?g:null},setRequestHeader:function(N,Y){return null==ja&&(N=ha[N.toLowerCase()]=ha[N.toLowerCase()]||N,va[N]=Y),this},overrideMimeType:function(N){return null==ja&&(q.mimeType=N),this},statusCode:function(N){var Y;if(N)if(ja)D.always(N[D.status]);else for(Y in N)U[Y]=[U[Y],N[Y]];return this},abort:function(N){N=N||oa;return e&&e.abort(N),c(0,N),this}};if(B.promise(D),q.url=((a||q.url|| lb.href)+"").replace(Td,lb.protocol+"//"),q.type=b.method||b.type||q.method||q.type,q.dataTypes=(q.dataType||"*").toLowerCase().match(Ba)||[""],null==q.crossDomain){var M=O.createElement("a");try{M.href=q.url,M.href=M.href,q.crossDomain=Wb.protocol+"//"+Wb.host!=M.protocol+"//"+M.host}catch(N){q.crossDomain=!0}}if(q.data&&q.processData&&"string"!=typeof q.data&&(q.data=d.param(q.data,q.traditional)),tc(Pc,q,b,D),ja)return D;for(t in(m=d.event&&q.global)&&0==d.active++&&d.event.trigger("ajaxStart"), q.type=q.type.toUpperCase(),q.hasContent=!Sd.test(q.type),f=q.url.replace(Pd,""),q.hasContent?q.data&&q.processData&&0===(q.contentType||"").indexOf("application/x-www-form-urlencoded")&&(q.data=q.data.replace(Od,"+")):(v=q.url.slice(f.length),q.data&&(q.processData||"string"==typeof q.data)&&(f+=(Vb.test(f)?"&":"?")+q.data,delete q.data),!1===q.cache&&(f=f.replace(Qd,"$1"),v=(Vb.test(f)?"&":"?")+"_="+Nc++ +v),q.url=f+v),q.ifModified&&(d.lastModified[f]&&D.setRequestHeader("If-Modified-Since",d.lastModified[f]), d.etag[f]&&D.setRequestHeader("If-None-Match",d.etag[f])),(q.data&&q.hasContent&&!1!==q.contentType||b.contentType)&&D.setRequestHeader("Content-Type",q.contentType),D.setRequestHeader("Accept",q.dataTypes[0]&&q.accepts[q.dataTypes[0]]?q.accepts[q.dataTypes[0]]+("*"!==q.dataTypes[0]?", "+Qc+"; q=0.01":""):q.accepts["*"]),q.headers)D.setRequestHeader(t,q.headers[t]);if(q.beforeSend&&(!1===q.beforeSend.call(z,D,q)||ja))return D.abort();if(oa="abort",K.add(q.complete),D.done(q.success),D.fail(q.error), e=tc(Ob,q,b,D)){if(D.readyState=1,m&&A.trigger("ajaxSend",[D,q]),ja)return D;q.async&&0<q.timeout&&(n=H.setTimeout(function(){D.abort("timeout")},q.timeout));try{var ja=!1;e.send(va,c)}catch(N){if(ja)throw N;c(-1,N)}}else c(-1,"No Transport");return D},getJSON:function(a,b,c){return d.get(a,b,c,"json")},getScript:function(a,b){return d.get(a,void 0,b,"script")}});d.each(["get","post"],function(a,b){d[b]=function(c,e,f,g){return J(e)&&(g=g||f,f=e,e=void 0),d.ajax(d.extend({url:c,type:b,dataType:g, data:e,success:f},d.isPlainObject(c)&&c))}});d.ajaxPrefilter(function(a){for(var b in a.headers)"content-type"===b.toLowerCase()&&(a.contentType=a.headers[b]||"")});d._evalUrl=function(a,b,c){return d.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){d.globalEval(e,b,c)}})};d.fn.extend({wrapAll:function(a){var b;return this[0]&&(J(a)&&(a=a.call(this[0])),b=d(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&& b.insertBefore(this[0]),b.map(function(){for(var c=this;c.firstElementChild;)c=c.firstElementChild;return c}).append(this)),this},wrapInner:function(a){return J(a)?this.each(function(b){d(this).wrapInner(a.call(this,b))}):this.each(function(){var b=d(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=J(a);return this.each(function(c){d(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){d(this).replaceWith(this.childNodes)}), this}});d.expr.pseudos.hidden=function(a){return!d.expr.pseudos.visible(a)};d.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)};d.ajaxSettings.xhr=function(){try{return new H.XMLHttpRequest}catch(a){}};var Ud={0:200,1223:204},mb=d.ajaxSettings.xhr();R.cors=!!mb&&"withCredentials"in mb;R.ajax=mb=!!mb;d.ajaxTransport(function(a){var b,c;if(R.cors||mb&&!a.crossDomain)return{send:function(e,f){var g,h=a.xhr();if(h.open(a.type,a.url,a.async,a.username, a.password),a.xhrFields)for(g in a.xhrFields)h[g]=a.xhrFields[g];for(g in a.mimeType&&h.overrideMimeType&&h.overrideMimeType(a.mimeType),a.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)h.setRequestHeader(g,e[g]);b=function(n){return function(){b&&(b=c=h.onload=h.onerror=h.onabort=h.ontimeout=h.onreadystatechange=null,"abort"===n?h.abort():"error"===n?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Ud[h.status]||h.status,h.statusText,"text"!==(h.responseType|| "text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}};h.onload=b();c=h.onerror=h.ontimeout=b("error");void 0!==h.onabort?h.onabort=c:h.onreadystatechange=function(){4===h.readyState&&H.setTimeout(function(){b&&c()})};b=b("abort");try{h.send(a.hasContent&&a.data||null)}catch(n){if(b)throw n;}},abort:function(){b&&b()}}});d.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)});d.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"}, contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return d.globalEval(a),a}}});d.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1);a.crossDomain&&(a.type="GET")});d.ajaxTransport("script",function(a){var b,c;if(a.crossDomain||a.scriptAttrs)return{send:function(e,f){b=d("<script>").attr(a.scriptAttrs||{}).prop({charset:a.scriptCharset,src:a.url}).on("load error",c=function(g){b.remove();c=null;g&&f("error"===g.type?404:200,g.type)});O.head.appendChild(b[0])}, abort:function(){c&&c()}}});var Rc,Sc=[],Xb=/(=)\?(?=&|$)|\?\?/;d.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Sc.pop()||d.expando+"_"+Nc++;return this[a]=!0,a}});d.ajaxPrefilter("json jsonp",function(a,b,c){var e,f,g,h=!1!==a.jsonp&&(Xb.test(a.url)?"url":"string"==typeof a.data&&0===(a.contentType||"").indexOf("application/x-www-form-urlencoded")&&Xb.test(a.data)&&"data");if(h||"jsonp"===a.dataTypes[0])return e=a.jsonpCallback=J(a.jsonpCallback)?a.jsonpCallback():a.jsonpCallback,h? a[h]=a[h].replace(Xb,"$1"+e):!1!==a.jsonp&&(a.url+=(Vb.test(a.url)?"&":"?")+a.jsonp+"="+e),a.converters["script json"]=function(){return g||d.error(e+" was not called"),g[0]},a.dataTypes[0]="json",f=H[e],H[e]=function(){g=arguments},c.always(function(){void 0===f?d(H).removeProp(e):H[e]=f;a[e]&&(a.jsonpCallback=b.jsonpCallback,Sc.push(e));g&&J(f)&&f(g[0]);g=f=void 0}),"script"});R.createHTMLDocument=((Rc=O.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Rc.childNodes.length); d.parseHTML=function(a,b,c){return"string"!=typeof a?[]:("boolean"==typeof b&&(c=b,b=!1),b||(R.createHTMLDocument?((e=(b=O.implementation.createHTMLDocument("")).createElement("base")).href=O.location.href,b.head.appendChild(e)):b=O),g=!c&&[],(f=Gc.exec(a))?[b.createElement(f[1])]:(f=dc([a],b,g),g&&g.length&&d(g).remove(),d.merge([],f.childNodes)));var e,f,g};d.fn.load=function(a,b,c){var e,f,g,h=this,n=a.indexOf(" ");return-1<n&&(e=Ja(a.slice(n)),a=a.slice(0,n)),J(b)?(c=b,b=void 0):b&&"object"== typeof b&&(f="POST"),0<h.length&&d.ajax({url:a,type:f||"GET",dataType:"html",data:b}).done(function(m){g=arguments;h.html(e?d("<div>").append(d.parseHTML(m)).find(e):m)}).always(c&&function(m,t){h.each(function(){c.apply(this,g||[m.responseText,t,m])})}),this};d.expr.pseudos.animated=function(a){return d.grep(d.timers,function(b){return a===b.elem}).length};d.offset={setOffset:function(a,b,c){var e,f,g,h=d.css(a,"position"),n=d(a),m={};"static"===h&&(a.style.position="relative");var t=n.offset(); var v=d.css(a,"top");var q=d.css(a,"left");("absolute"===h||"fixed"===h)&&-1<(v+q).indexOf("auto")?(g=(e=n.position()).top,f=e.left):(g=parseFloat(v)||0,f=parseFloat(q)||0);J(b)&&(b=b.call(a,c,d.extend({},t)));null!=b.top&&(m.top=b.top-t.top+g);null!=b.left&&(m.left=b.left-t.left+f);"using"in b?b.using.call(a,m):n.css(m)}};d.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(f){d.offset.setOffset(this,a,f)});var b,c,e=this[0];return e?e.getClientRects().length? (b=e.getBoundingClientRect(),c=e.ownerDocument.defaultView,{top:b.top+c.pageYOffset,left:b.left+c.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var a,b=this[0],c={top:0,left:0};if("fixed"===d.css(b,"position"))var e=b.getBoundingClientRect();else{e=this.offset();var f=b.ownerDocument;for(a=b.offsetParent||f.documentElement;a&&(a===f.body||a===f.documentElement)&&"static"===d.css(a,"position");)a=a.parentNode;a&&a!==b&&1===a.nodeType&&((c=d(a).offset()).top+=d.css(a,"borderTopWidth", !0),c.left+=d.css(a,"borderLeftWidth",!0))}return{top:e.top-c.top-d.css(b,"marginTop",!0),left:e.left-c.left-d.css(b,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent;a&&"static"===d.css(a,"position");)a=a.offsetParent;return a||Pa})}});d.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c="pageYOffset"===b;d.fn[a]=function(e){return Ga(this,function(f,g,h){var n;if(Ra(f)?n=f:9===f.nodeType&&(n=f.defaultView),void 0===h)return n? n[b]:f[g];n?n.scrollTo(c?n.pageXOffset:h,c?h:n.pageYOffset):f[g]=h},a,e,arguments.length)}});d.each(["top","left"],function(a,b){d.cssHooks[b]=kc(R.pixelPosition,function(c,e){if(e)return e=fb(c,b),Ib.test(e)?d(c).position()[b]+"px":e})});d.each({Height:"height",Width:"width"},function(a,b){d.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,e){d.fn[e]=function(f,g){var h=arguments.length&&(c||"boolean"!=typeof f),n=c||(!0===f||!0===g?"margin":"border");return Ga(this,function(m,t,v){var q; return Ra(m)?0===e.indexOf("outer")?m["inner"+a]:m.document.documentElement["client"+a]:9===m.nodeType?(q=m.documentElement,Math.max(m.body["scroll"+a],q["scroll"+a],m.body["offset"+a],q["offset"+a],q["client"+a])):void 0===v?d.css(m,t,n):d.style(m,t,v,n)},b,h?f:void 0,h)}})});d.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){d.fn[b]=function(c){return this.on(b,c)}});d.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a, null,b)},delegate:function(a,b,c,e){return this.on(b,a,c,e)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});d.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){d.fn[b]=function(c,e){return 0<arguments.length?this.on(b,null, c,e):this.trigger(b)}});var Vd=/^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;d.proxy=function(a,b){var c,e,f;if("string"==typeof b&&(c=a[b],b=a,a=c),J(a))return e=Ha.call(arguments,2),(f=function(){return a.apply(b||this,e.concat(Ha.call(arguments)))}).guid=a.guid=a.guid||d.guid++,f};d.holdReady=function(a){a?d.readyWait++:d.ready(!0)};d.isArray=Array.isArray;d.parseJSON=JSON.parse;d.nodeName=qa;d.isFunction=J;d.isWindow=Ra;d.camelCase=Aa;d.type=Qa;d.now=Date.now;d.isNumeric=function(a){var b= d.type(a);return("number"===b||"string"===b)&&!isNaN(a-parseFloat(a))};d.trim=function(a){return null==a?"":(a+"").replace(Vd,"$1")};"function"==typeof define&&define.amd&&define("jquery",[],function(){return d});var Wd=H.jQuery,Xd=H.$;return d.noConflict=function(a){return H.$===d&&(H.$=Xd),a&&H.jQuery===d&&(H.jQuery=Wd),d},"undefined"==typeof bb&&(H.jQuery=H.$=d),d}); jQuery.event.special.touchstart={setup:function(c,a,b){a.includes&&a.includes("noPreventDefault")&&void 0!==this.addEventListener?this.addEventListener("touchstart",b,{passive:!1}):void 0!==this.addEventListener&&this.addEventListener("touchstart",b,{passive:!0})}}; jQuery.event.special.touchmove={setup:function(c,a,b){a.includes&&a.includes("noPreventDefault")&&void 0!==this.addEventListener?this.addEventListener("touchmove",b,{passive:!1}):void 0!==this.addEventListener&&this.addEventListener("touchmove",b,{passive:!0})}}; jQuery.event.special.touchend={setup:function(c,a,b){a.includes&&a.includes("noPreventDefault")&&void 0!==this.addEventListener?this.addEventListener("touchend",b,{passive:!1}):void 0!==this.addEventListener&&this.addEventListener("touchend",b,{passive:!0})}}; jQuery.event.special.touchcancel={setup:function(c,a,b){a.includes&&a.includes("noPreventDefault")&&void 0!==this.addEventListener?this.addEventListener("touchcancel",b,{passive:!1}):void 0!==this.addEventListener&&this.addEventListener("touchcancel",b,{passive:!0})}}; jQuery.event.special.mousewheel={setup:function(c,a,b){a.includes&&a.includes("noPreventDefault")&&void 0!==this.addEventListener?this.addEventListener("mousewheel",b,{passive:!1}):void 0!==this.addEventListener&&this.addEventListener("mousewheel",b,{passive:!0})}}; </script><!-- temp include swiper.js directly --><script src="/etc/clientlibs/pan/js/lazyload.min.js" defer></script><script id="worker1" type="text/js-worker"> onmessage = function(oEvent) { var urlPrefix = oEvent.data; if (urlPrefix) { importScripts(urlPrefix + '/apps/pan/public/userHeaderModel'); if (userHeaderModel) { postMessage(JSON.stringify(userHeaderModel)); } } }; </script><!--[if lt IE 9]><script type="text/javascript" src="/etc/clientlibs/pan/js/html5-shiv-3.7.0.js"></script><![endif]--><script type="text/javascript"> !function(){function t(t){var e=document.getElementsByTagName("head")[0],n=document.createElement("script");for(var r in n.type="text/javascript",t)n.setAttribute(r,t[r]);e.insertBefore(n,e.firstChild)}"undefined"!=typeof Promise&&-1!==Promise.toString().indexOf("[native code]")||t({src:"/etc/clientlibs/clean/dependencies/util/promise-polyfill-8.2.1.js"}),"objectFit"in document.documentElement.style||t({src:"/etc/clientlibs/clean/dependencies/util/polyfill-object-fit-images-3.2.4.js"}),"function"!=typeof window.CustomEvent&&(window.CustomEvent=function(t,e){"use strict";e=e||{bubbles:!1,cancelable:!1,detail:null};var n=document.createEvent("CustomEvent");return n.initCustomEvent(t,e.bubbles,e.cancelable,e.detail),n}),"function"!=typeof Number.isFinite&&(Number.isFinite=function(t){"use strict";return!("number"!=typeof t||t!=t||t===1/0||t===-1/0)}),"function"!=typeof Number.isInteger&&(Number.isInteger=function(t){"use strict";return"number"==typeof t&&Number.isFinite(t)&&Math.floor(t)===t}),"function"!=typeof Number.isNaN&&(Number.isNaN=function(t){"use strict";return"number"==typeof t&&t!=t}),String.prototype.includes||(String.prototype.includes=function(t,e){return"number"!=typeof e&&(e=0),!(e+t.length>this.length)&&-1!==this.indexOf(t,e)}),String.prototype.endsWith||(String.prototype.endsWith=function(t,e){return(void 0===e||e>this.length)&&(e=this.length),this.substring(e-t.length,e)===t}),String.prototype.repeat||(String.prototype.repeat=function(t){"use strict";if(null==this)throw new TypeError("can't convert "+this+" to object");var e=""+this;if((t=+t)!=t&&(t=0),t<0)throw new RangeError("repeat count must be non-negative");if(t==1/0)throw new RangeError("repeat count must be less than infinity");if(t=Math.floor(t),0==e.length||0==t)return"";if(e.length*t>=1<<28)throw new RangeError("repeat count must not overflow maximum string size");var n=e.length*t;for(t=Math.floor(Math.log(t)/Math.log(2));t;)e+=e,t--;return e+=e.substring(0,n-e.length)}),Array.prototype.includes||(Array.prototype.includes=function(t,e){"use strict";if(t instanceof RegExp)throw TypeError("first argument must not be a RegExp");return void 0===e&&(e=0),-1!==this.indexOf(t,e)}),"function"!=typeof Object.assign&&Object.defineProperty(Object,"assign",{value:function(t,e){"use strict";if(null==t)throw new TypeError("Cannot convert undefined or null to object");for(var n=Object(t),r=1;r<arguments.length;r++){var o=arguments[r];if(null!=o)for(var i in o)Object.prototype.hasOwnProperty.call(o,i)&&(n[i]=o[i])}return n},writable:!0,configurable:!0})}(); var globalConfig = {"visitorProfilingEnabled":true,"visitorProfileCookieExpirationPeriod":525600,"mktVisitorCompanyDetailsCookieExpirationPeriod":10080,"recommendationsDisplayedCookieExpirationPeriod":10080,"selectivePageVisitorProfilingEnabled":true,"repeatingRecommendationsEnabled":false,"resourcepageRecommendationsEnabled":false,"abmBannerEnabled":false,"abmRecommendationsEnabled":false,"abmRecommendationsLabelEnabled":true,"panUserProfilingEnabled":false,"homePageTeaserAnimationEnabled":true,"enableMktVisitorCompanyDetailsForGlobalForm":true,"enableMktVisitorCompanyDetailsForRecommendations":true,"enableMktVisitorCompanyDetailsForABMBanner":false,"imageWebWorkerEnabled":true,"embedClientLibsEnabled":false,"abmBannerUsingRecommendations":true,"abmBannerCookieExpirationPeriod":120,"ldapEmailListEnabledZoomWebinar":true,"jobLevelAndRoleConfigPath":"/etc/formsconfig/joblevelandrole.json","webFormsConfigPath":"/etc/formsconfig/webformsconfig.json","buildName":"CORTEX_CLOUD_REBRAND_FEB_2025","tldsRegex":""} window.PAN = {}; window.PAN_deferedCssList = []; window.PAN_jsAfterDeferedCssFunctionList = []; window.PAN_RUN_ON_LAZY_LOAD = []; window.PAN_RunOnPageModelLoad = []; window.PAN_Clean_Util = { isIE: false }; var mobileSelector = false ; var mktoConfig = {"mktoAppURL":"https://start.paloaltonetworks.com","mktoFormPostEndPoint":"/index.php/leadCapture/save2","mktoFormPostURL":"https://start.paloaltonetworks.com/index.php/leadCapture/save2","mktoWebFormId":"1086","mktoMunchkinId":"531-OCS-018","mktoSubscribeFormLpId":"21963","mktoRCDefautLpId":"2100","mktoFormSubmitServerURL":"https://www.paloaltonetworks.com","mktoFormSubmitEndPoint":"/apps/pan/public/formsubmithandler.submitform.json","mktoFormSubmitURL":"/apps/pan/public/formsubmithandler.submitform.json","mktoRCDefaultProgramId":"1192"} var botSelector = false; //test for ie11 !function(d) { //load only in ie11 if(!d.currentScript) { window.PAN_Clean_Util.isIE = true } /*call for objectFitImages*/ if(PAN_Clean_Util.isIE ){ PAN_RUN_ON_LAZY_LOAD.push(function(el) { objectFitImages(el) }) } }(document) var disableOverridden = false; if(typeof localStorage != "undefined" && localStorage) { disableOverridden = localStorage.getItem("jcOverrideDisable"); } if(!disableOverridden) { var quietConsole = {}; for(var m in console) { if(typeof console[m] == "function") { quietConsole[m] = function(){}; } } window.console=quietConsole; } window.PAN_LOAD_RECAPTCHA = true; window.PAN_LOAD_RECAPTCHA_LANGUAGE = 'en_US'; window.PAN_IS_RECAPTCHA_LOADED = false; </script><style>@font-face{font-family:'TT Hoves';font-style:normal;font-weight:100;font-display:swap;src:local('TT Hoves Hairline'),local('TTHoves-Hairline'),url('/etc/clientlibs/clean/dependencies/fonts/tthoves/TTHoves-Hairline_optimized.woff2') format('woff2')} @font-face{font-family:'TT Hoves';font-style:normal;font-weight:200;font-display:swap;src:local('TT Hoves Thin'),local('TTHoves-Thin'),url('/etc/clientlibs/clean/dependencies/fonts/tthoves/TTHoves-Thin_optimized.woff2') format('woff2')} @font-face{font-family:'TT Hoves';font-style:normal;font-weight:300;font-display:swap;src:local('TT Hoves Light'),local('TTHoves-Light'),url('/etc/clientlibs/clean/dependencies/fonts/tthoves/TTHoves-Light_optimized.woff2') format('woff2')} @font-face{font-family:'TT Hoves';font-style:normal;font-weight:400;font-display:swap;src:local('TT Hoves Regular'),local('TTHoves-Regular'),url('/etc/clientlibs/clean/dependencies/fonts/tthoves/TTHoves-Regular_optimized.woff2') format('woff2')} @font-face{font-family:'TT Hoves';font-style:normal;font-weight:500;font-display:swap;src:local('TT Hoves Medium'),local('TTHoves-Medium'),url('/etc/clientlibs/clean/dependencies/fonts/tthoves/TTHoves-Medium_optimized.woff2') format('woff2')} @font-face{font-family:'TT Hoves';font-style:normal;font-weight:600;font-display:swap;src:local('TT Hoves DemiBold'),local('TTHoves-DemiBold'),url('/etc/clientlibs/clean/dependencies/fonts/tthoves/TTHoves-DemiBold_optimized.woff2') format('woff2')} @font-face{font-family:'TT Hoves';font-style:normal;font-weight:700;font-display:swap;src:local('TT Hoves Bold'),local('TTHoves-Bold'),url('/etc/clientlibs/clean/dependencies/fonts/tthoves/TTHoves-Bold_optimized.woff2') format('woff2')} @font-face{font-family:'TT Hoves';font-style:normal;font-weight:800;font-display:swap;src:local('TT Hoves ExtraBold'),local('TTHoves-ExtraBold'),url('/etc/clientlibs/clean/dependencies/fonts/tthoves/TTHoves-ExtraBold_optimized.woff2') format('woff2')} @font-face{font-family:'TT Hoves';font-style:normal;font-weight:900;font-display:swap;src:local('TT Hoves Black'),local('TTHoves-Black'),url('/etc/clientlibs/clean/dependencies/fonts/tthoves/TTHoves-Black_optimized.woff2') format('woff2')} @font-face{font-family:'CelestePro';font-style:normal;font-weight:400;font-display:swap;src:local('CelestePro'),local('CelestePro'),url('/etc/clientlibs/clean/dependencies/fonts/ffceleste/CelestePro-Book_optimized.woff2') format('woff2')} @font-face{font-family:'CelestePro';font-style:normal;font-weight:700;font-display:swap;src:local('CelestePro Bold'),local('CelestePro-Bold'),url('/etc/clientlibs/clean/dependencies/fonts/ffceleste/CelestePro-Bold_optimized.woff2') format('woff2')} @font-face{font-family:'CelestePro';font-style:normal;font-weight:800;font-display:swap;src:local('CelestePro Xbold'),local('CelestePro-Xbold'),url('/etc/clientlibs/clean/dependencies/fonts/ffceleste/CelestePro-XBold_optimized.woff2') format('woff2')} @font-face{font-family:'CelestePro';font-style:normal;font-weight:900;font-display:swap;src:local('CelestePro Black'),local('CelestePro-Black'),url('/etc/clientlibs/clean/dependencies/fonts/ffceleste/CelestePro-Black_optimized.woff2') format('woff2')} /*! * Bootstrap v4.5.2 (https://getbootstrap.com/) * Copyright 2011-2020 The Bootstrap Authors * Copyright 2011-2020 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace} *,*::before,*::after{box-sizing:border-box} html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0);touch-action:manipulation} article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block} body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff} [tabindex="-1"]:focus:not(:focus-visible){outline:0 !important} hr{box-sizing:content-box;height:0;overflow:visible} h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem} p{margin-top:0;margin-bottom:1rem} abbr[title],abbr[data-original-title]{text-decoration:underline;text-decoration:underline dotted;cursor:help;border-bottom:0;text-decoration-skip-ink:none} address{margin-bottom:1rem;font-style:normal;line-height:inherit} ol,ul,dl{margin-top:0;margin-bottom:1rem} ol ol,ul ul,ol ul,ul ol{margin-bottom:0} dt{font-weight:700} dd{margin-bottom:.5rem;margin-left:0} blockquote{margin:0 0 1rem} b,strong{font-weight:bolder} small{font-size:80%} sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline} sub{bottom:-0.25em} sup{top:-0.5em} a{color:#007bff;text-decoration:none;background-color:transparent} a:hover{color:#0056b3;text-decoration:underline} a:not([href]):not([class]){color:inherit;text-decoration:none} a:not([href]):not([class]):hover{color:inherit;text-decoration:none} pre,code,kbd,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em} pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar} figure{margin:0 0 1rem} img{vertical-align:middle;border-style:none} svg{overflow:hidden;vertical-align:middle} table{border-collapse:collapse} caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom} th{text-align:inherit} label{display:inline-block} button{border-radius:0} button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color} input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit} button,input{overflow:visible} button,select{text-transform:none} [role="button"]{cursor:pointer} select{word-wrap:normal} button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button} button:not(:disabled),[type="button"]:not(:disabled),[type="reset"]:not(:disabled),[type="submit"]:not(:disabled){cursor:pointer} button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{padding:0;border-style:none} input[type="radio"],input[type="checkbox"]{box-sizing:border-box;padding:0} textarea{overflow:auto;resize:vertical} fieldset{min-width:0;padding:0;margin:0;border:0} legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal} progress{vertical-align:baseline} [type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto} [type="search"]{outline-offset:-2px;-webkit-appearance:none} [type="search"]::-webkit-search-decoration{-webkit-appearance:none} ::-webkit-file-upload-button{font:inherit;-webkit-appearance:button} output{display:inline-block} summary{display:list-item;cursor:pointer} template{display:none} [hidden]{display:none !important} .container,.container-fluid,.container-sm,.container-md,.container-lg,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto} @media(min-width:576px){.container-fluid{width:auto;margin-left:7.14285714%;margin-right:7.14285714%} .container,.container-sm{max-width:540px} } @media(min-width:768px){.container,.container-sm,.container-md{max-width:720px} } @media(min-width:992px){.container,.container-sm,.container-md,.container-lg{max-width:960px} } @media(min-width:1200px){.container,.container-sm,.container-md,.container-lg,.container-xl{max-width:1140px} } .row{display:flex;flex-wrap:wrap;margin-right:-15px;margin-left:-15px} .no-gutters{margin-right:0;margin-left:0} .no-gutters>.col,.no-gutters>[class*="col-"]{padding-right:0;padding-left:0} .col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col,.col-auto,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm,.col-sm-auto,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md,.col-md-auto,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg,.col-lg-auto,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl,.col-xl-auto,.col-xxl-1,.col-xxl-2,.col-xxl-3,.col-xxl-4,.col-xxl-5,.col-xxl-6,.col-xxl-7,.col-xxl-8,.col-xxl-9,.col-xxl-10,.col-xxl-11,.col-xxl-12,.col-xxl,.col-xxl-auto,.col-xxxl-1,.col-xxxl-2,.col-xxxl-3,.col-xxxl-4,.col-xxxl-5,.col-xxxl-6,.col-xxxl-7,.col-xxxl-8,.col-xxxl-9,.col-xxxl-10,.col-xxxl-11,.col-xxxl-12,.col-xxxl,.col-xxxl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px} .col{flex-basis:0;flex-grow:1;max-width:100%} .row-cols-1>*{flex:0 0 100%;max-width:100%} .row-cols-2>*{flex:0 0 50%;max-width:50%} .row-cols-3>*{flex:0 0 33.33333%;max-width:33.33333%} .row-cols-4>*{flex:0 0 25%;max-width:25%} .row-cols-5>*{flex:0 0 20%;max-width:20%} .row-cols-6>*{flex:0 0 16.66667%;max-width:16.66667%} .col-auto{flex:0 0 auto;width:auto;max-width:100%} .col-1{flex:0 0 8.33333%;max-width:8.33333%} .col-2{flex:0 0 16.66667%;max-width:16.66667%} .col-3{flex:0 0 25%;max-width:25%} .col-4{flex:0 0 33.33333%;max-width:33.33333%} .col-5{flex:0 0 41.66667%;max-width:41.66667%} .col-6{flex:0 0 50%;max-width:50%} .col-7{flex:0 0 58.33333%;max-width:58.33333%} .col-8{flex:0 0 66.66667%;max-width:66.66667%} .col-9{flex:0 0 75%;max-width:75%} .col-10{flex:0 0 83.33333%;max-width:83.33333%} .col-11{flex:0 0 91.66667%;max-width:91.66667%} .col-12{flex:0 0 100%;max-width:100%} .order-first{order:-1} .order-last{order:13} .order-0{order:0} .order-1{order:1} .order-2{order:2} .order-3{order:3} .order-4{order:4} .order-5{order:5} .order-6{order:6} .order-7{order:7} .order-8{order:8} .order-9{order:9} .order-10{order:10} .order-11{order:11} .order-12{order:12} .offset-1{margin-left:8.33333%} .offset-2{margin-left:16.66667%} .offset-3{margin-left:25%} .offset-4{margin-left:33.33333%} .offset-5{margin-left:41.66667%} .offset-6{margin-left:50%} .offset-7{margin-left:58.33333%} .offset-8{margin-left:66.66667%} .offset-9{margin-left:75%} .offset-10{margin-left:83.33333%} .offset-11{margin-left:91.66667%} @media(min-width:576px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%} .row-cols-sm-1>*{flex:0 0 100%;max-width:100%} .row-cols-sm-2>*{flex:0 0 50%;max-width:50%} .row-cols-sm-3>*{flex:0 0 33.33333%;max-width:33.33333%} .row-cols-sm-4>*{flex:0 0 25%;max-width:25%} .row-cols-sm-5>*{flex:0 0 20%;max-width:20%} .row-cols-sm-6>*{flex:0 0 16.66667%;max-width:16.66667%} .col-sm-auto{flex:0 0 auto;width:auto;max-width:100%} .col-sm-1{flex:0 0 8.33333%;max-width:8.33333%} .col-sm-2{flex:0 0 16.66667%;max-width:16.66667%} .col-sm-3{flex:0 0 25%;max-width:25%} .col-sm-4{flex:0 0 33.33333%;max-width:33.33333%} .col-sm-5{flex:0 0 41.66667%;max-width:41.66667%} .col-sm-6{flex:0 0 50%;max-width:50%} .col-sm-7{flex:0 0 58.33333%;max-width:58.33333%} .col-sm-8{flex:0 0 66.66667%;max-width:66.66667%} .col-sm-9{flex:0 0 75%;max-width:75%} .col-sm-10{flex:0 0 83.33333%;max-width:83.33333%} .col-sm-11{flex:0 0 91.66667%;max-width:91.66667%} .col-sm-12{flex:0 0 100%;max-width:100%} .order-sm-first{order:-1} .order-sm-last{order:13} .order-sm-0{order:0} .order-sm-1{order:1} .order-sm-2{order:2} .order-sm-3{order:3} .order-sm-4{order:4} .order-sm-5{order:5} .order-sm-6{order:6} .order-sm-7{order:7} .order-sm-8{order:8} .order-sm-9{order:9} .order-sm-10{order:10} .order-sm-11{order:11} .order-sm-12{order:12} .offset-sm-0{margin-left:0} .offset-sm-1{margin-left:8.33333%} .offset-sm-2{margin-left:16.66667%} .offset-sm-3{margin-left:25%} .offset-sm-4{margin-left:33.33333%} .offset-sm-5{margin-left:41.66667%} .offset-sm-6{margin-left:50%} .offset-sm-7{margin-left:58.33333%} .offset-sm-8{margin-left:66.66667%} .offset-sm-9{margin-left:75%} .offset-sm-10{margin-left:83.33333%} .offset-sm-11{margin-left:91.66667%} } @media(min-width:768px){.col-md{flex-basis:0;flex-grow:1;max-width:100%} .row-cols-md-1>*{flex:0 0 100%;max-width:100%} .row-cols-md-2>*{flex:0 0 50%;max-width:50%} .row-cols-md-3>*{flex:0 0 33.33333%;max-width:33.33333%} .row-cols-md-4>*{flex:0 0 25%;max-width:25%} .row-cols-md-5>*{flex:0 0 20%;max-width:20%} .row-cols-md-6>*{flex:0 0 16.66667%;max-width:16.66667%} .col-md-auto{flex:0 0 auto;width:auto;max-width:100%} .col-md-1{flex:0 0 8.33333%;max-width:8.33333%} .col-md-2{flex:0 0 16.66667%;max-width:16.66667%} .col-md-3{flex:0 0 25%;max-width:25%} .col-md-4{flex:0 0 33.33333%;max-width:33.33333%} .col-md-5{flex:0 0 41.66667%;max-width:41.66667%} .col-md-6{flex:0 0 50%;max-width:50%} .col-md-7{flex:0 0 58.33333%;max-width:58.33333%} .col-md-8{flex:0 0 66.66667%;max-width:66.66667%} .col-md-9{flex:0 0 75%;max-width:75%} .col-md-10{flex:0 0 83.33333%;max-width:83.33333%} .col-md-11{flex:0 0 91.66667%;max-width:91.66667%} .col-md-12{flex:0 0 100%;max-width:100%} .order-md-first{order:-1} .order-md-last{order:13} .order-md-0{order:0} .order-md-1{order:1} .order-md-2{order:2} .order-md-3{order:3} .order-md-4{order:4} .order-md-5{order:5} .order-md-6{order:6} .order-md-7{order:7} .order-md-8{order:8} .order-md-9{order:9} .order-md-10{order:10} .order-md-11{order:11} .order-md-12{order:12} .offset-md-0{margin-left:0} .offset-md-1{margin-left:8.33333%} .offset-md-2{margin-left:16.66667%} .offset-md-3{margin-left:25%} .offset-md-4{margin-left:33.33333%} .offset-md-5{margin-left:41.66667%} .offset-md-6{margin-left:50%} .offset-md-7{margin-left:58.33333%} .offset-md-8{margin-left:66.66667%} .offset-md-9{margin-left:75%} .offset-md-10{margin-left:83.33333%} .offset-md-11{margin-left:91.66667%} } @media(min-width:992px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%} .row-cols-lg-1>*{flex:0 0 100%;max-width:100%} .row-cols-lg-2>*{flex:0 0 50%;max-width:50%} .row-cols-lg-3>*{flex:0 0 33.33333%;max-width:33.33333%} .row-cols-lg-4>*{flex:0 0 25%;max-width:25%} .row-cols-lg-5>*{flex:0 0 20%;max-width:20%} .row-cols-lg-6>*{flex:0 0 16.66667%;max-width:16.66667%} .col-lg-auto{flex:0 0 auto;width:auto;max-width:100%} .col-lg-1{flex:0 0 8.33333%;max-width:8.33333%} .col-lg-2{flex:0 0 16.66667%;max-width:16.66667%} .col-lg-3{flex:0 0 25%;max-width:25%} .col-lg-4{flex:0 0 33.33333%;max-width:33.33333%} .col-lg-5{flex:0 0 41.66667%;max-width:41.66667%} .col-lg-6{flex:0 0 50%;max-width:50%} .col-lg-7{flex:0 0 58.33333%;max-width:58.33333%} .col-lg-8{flex:0 0 66.66667%;max-width:66.66667%} .col-lg-9{flex:0 0 75%;max-width:75%} .col-lg-10{flex:0 0 83.33333%;max-width:83.33333%} .col-lg-11{flex:0 0 91.66667%;max-width:91.66667%} .col-lg-12{flex:0 0 100%;max-width:100%} .order-lg-first{order:-1} .order-lg-last{order:13} .order-lg-0{order:0} .order-lg-1{order:1} .order-lg-2{order:2} .order-lg-3{order:3} .order-lg-4{order:4} .order-lg-5{order:5} .order-lg-6{order:6} .order-lg-7{order:7} .order-lg-8{order:8} .order-lg-9{order:9} .order-lg-10{order:10} .order-lg-11{order:11} .order-lg-12{order:12} .offset-lg-0{margin-left:0} .offset-lg-1{margin-left:8.33333%} .offset-lg-2{margin-left:16.66667%} .offset-lg-3{margin-left:25%} .offset-lg-4{margin-left:33.33333%} .offset-lg-5{margin-left:41.66667%} .offset-lg-6{margin-left:50%} .offset-lg-7{margin-left:58.33333%} .offset-lg-8{margin-left:66.66667%} .offset-lg-9{margin-left:75%} .offset-lg-10{margin-left:83.33333%} .offset-lg-11{margin-left:91.66667%} } @media(min-width:1200px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%} .row-cols-xl-1>*{flex:0 0 100%;max-width:100%} .row-cols-xl-2>*{flex:0 0 50%;max-width:50%} .row-cols-xl-3>*{flex:0 0 33.33333%;max-width:33.33333%} .row-cols-xl-4>*{flex:0 0 25%;max-width:25%} .row-cols-xl-5>*{flex:0 0 20%;max-width:20%} .row-cols-xl-6>*{flex:0 0 16.66667%;max-width:16.66667%} .col-xl-auto{flex:0 0 auto;width:auto;max-width:100%} .col-xl-1{flex:0 0 8.33333%;max-width:8.33333%} .col-xl-2{flex:0 0 16.66667%;max-width:16.66667%} .col-xl-3{flex:0 0 25%;max-width:25%} .col-xl-4{flex:0 0 33.33333%;max-width:33.33333%} .col-xl-5{flex:0 0 41.66667%;max-width:41.66667%} .col-xl-6{flex:0 0 50%;max-width:50%} .col-xl-7{flex:0 0 58.33333%;max-width:58.33333%} .col-xl-8{flex:0 0 66.66667%;max-width:66.66667%} .col-xl-9{flex:0 0 75%;max-width:75%} .col-xl-10{flex:0 0 83.33333%;max-width:83.33333%} .col-xl-11{flex:0 0 91.66667%;max-width:91.66667%} .col-xl-12{flex:0 0 100%;max-width:100%} .order-xl-first{order:-1} .order-xl-last{order:13} .order-xl-0{order:0} .order-xl-1{order:1} .order-xl-2{order:2} .order-xl-3{order:3} .order-xl-4{order:4} .order-xl-5{order:5} .order-xl-6{order:6} .order-xl-7{order:7} .order-xl-8{order:8} .order-xl-9{order:9} .order-xl-10{order:10} .order-xl-11{order:11} .order-xl-12{order:12} .offset-xl-0{margin-left:0} .offset-xl-1{margin-left:8.33333%} .offset-xl-2{margin-left:16.66667%} .offset-xl-3{margin-left:25%} .offset-xl-4{margin-left:33.33333%} .offset-xl-5{margin-left:41.66667%} .offset-xl-6{margin-left:50%} .offset-xl-7{margin-left:58.33333%} .offset-xl-8{margin-left:66.66667%} .offset-xl-9{margin-left:75%} .offset-xl-10{margin-left:83.33333%} .offset-xl-11{margin-left:91.66667%} } @media(min-width:1400px){.col-xxl{flex-basis:0;flex-grow:1;max-width:100%} .row-cols-xxl-1>*{flex:0 0 100%;max-width:100%} .row-cols-xxl-2>*{flex:0 0 50%;max-width:50%} .row-cols-xxl-3>*{flex:0 0 33.33333%;max-width:33.33333%} .row-cols-xxl-4>*{flex:0 0 25%;max-width:25%} .row-cols-xxl-5>*{flex:0 0 20%;max-width:20%} .row-cols-xxl-6>*{flex:0 0 16.66667%;max-width:16.66667%} .col-xxl-auto{flex:0 0 auto;width:auto;max-width:100%} .col-xxl-1{flex:0 0 8.33333%;max-width:8.33333%} .col-xxl-2{flex:0 0 16.66667%;max-width:16.66667%} .col-xxl-3{flex:0 0 25%;max-width:25%} .col-xxl-4{flex:0 0 33.33333%;max-width:33.33333%} .col-xxl-5{flex:0 0 41.66667%;max-width:41.66667%} .col-xxl-6{flex:0 0 50%;max-width:50%} .col-xxl-7{flex:0 0 58.33333%;max-width:58.33333%} .col-xxl-8{flex:0 0 66.66667%;max-width:66.66667%} .col-xxl-9{flex:0 0 75%;max-width:75%} .col-xxl-10{flex:0 0 83.33333%;max-width:83.33333%} .col-xxl-11{flex:0 0 91.66667%;max-width:91.66667%} .col-xxl-12{flex:0 0 100%;max-width:100%} .order-xxl-first{order:-1} .order-xxl-last{order:13} .order-xxl-0{order:0} .order-xxl-1{order:1} .order-xxl-2{order:2} .order-xxl-3{order:3} .order-xxl-4{order:4} .order-xxl-5{order:5} .order-xxl-6{order:6} .order-xxl-7{order:7} .order-xxl-8{order:8} .order-xxl-9{order:9} .order-xxl-10{order:10} .order-xxl-11{order:11} .order-xxl-12{order:12} .offset-xxl-0{margin-left:0} .offset-xxl-1{margin-left:8.33333%} .offset-xxl-2{margin-left:16.66667%} .offset-xxl-3{margin-left:25%} .offset-xxl-4{margin-left:33.33333%} .offset-xxl-5{margin-left:41.66667%} .offset-xxl-6{margin-left:50%} .offset-xxl-7{margin-left:58.33333%} .offset-xxl-8{margin-left:66.66667%} .offset-xxl-9{margin-left:75%} .offset-xxl-10{margin-left:83.33333%} .offset-xxl-11{margin-left:91.66667%} } @media(min-width:1600px){.col-xxxl{flex-basis:0;flex-grow:1;max-width:100%} .row-cols-xxxl-1>*{flex:0 0 100%;max-width:100%} .row-cols-xxxl-2>*{flex:0 0 50%;max-width:50%} .row-cols-xxxl-3>*{flex:0 0 33.33333%;max-width:33.33333%} .row-cols-xxxl-4>*{flex:0 0 25%;max-width:25%} .row-cols-xxxl-5>*{flex:0 0 20%;max-width:20%} .row-cols-xxxl-6>*{flex:0 0 16.66667%;max-width:16.66667%} .col-xxxl-auto{flex:0 0 auto;width:auto;max-width:100%} .col-xxxl-1{flex:0 0 8.33333%;max-width:8.33333%} .col-xxxl-2{flex:0 0 16.66667%;max-width:16.66667%} .col-xxxl-3{flex:0 0 25%;max-width:25%} .col-xxxl-4{flex:0 0 33.33333%;max-width:33.33333%} .col-xxxl-5{flex:0 0 41.66667%;max-width:41.66667%} .col-xxxl-6{flex:0 0 50%;max-width:50%} .col-xxxl-7{flex:0 0 58.33333%;max-width:58.33333%} .col-xxxl-8{flex:0 0 66.66667%;max-width:66.66667%} .col-xxxl-9{flex:0 0 75%;max-width:75%} .col-xxxl-10{flex:0 0 83.33333%;max-width:83.33333%} .col-xxxl-11{flex:0 0 91.66667%;max-width:91.66667%} .col-xxxl-12{flex:0 0 100%;max-width:100%} .order-xxxl-first{order:-1} .order-xxxl-last{order:13} .order-xxxl-0{order:0} .order-xxxl-1{order:1} .order-xxxl-2{order:2} .order-xxxl-3{order:3} .order-xxxl-4{order:4} .order-xxxl-5{order:5} .order-xxxl-6{order:6} .order-xxxl-7{order:7} .order-xxxl-8{order:8} .order-xxxl-9{order:9} .order-xxxl-10{order:10} .order-xxxl-11{order:11} .order-xxxl-12{order:12} .offset-xxxl-0{margin-left:0} .offset-xxxl-1{margin-left:8.33333%} .offset-xxxl-2{margin-left:16.66667%} .offset-xxxl-3{margin-left:25%} .offset-xxxl-4{margin-left:33.33333%} .offset-xxxl-5{margin-left:41.66667%} .offset-xxxl-6{margin-left:50%} .offset-xxxl-7{margin-left:58.33333%} .offset-xxxl-8{margin-left:66.66667%} .offset-xxxl-9{margin-left:75%} .offset-xxxl-10{margin-left:83.33333%} .offset-xxxl-11{margin-left:91.66667%} } @media(min-width:3840px){body{max-width:3840px;margin:0 auto} } .text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace !important} .text-justify{text-align:justify !important} .text-wrap{white-space:normal !important} .text-nowrap{white-space:nowrap !important} .text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap} .text-left{text-align:left !important} .text-right{text-align:right !important} .text-center{text-align:center !important} @media(min-width:576px){.text-sm-left{text-align:left !important} .text-sm-right{text-align:right !important} .text-sm-center{text-align:center !important} } @media(min-width:768px){.text-md-left{text-align:left !important} .text-md-right{text-align:right !important} .text-md-center{text-align:center !important} } @media(min-width:992px){.text-lg-left{text-align:left !important} .text-lg-right{text-align:right !important} .text-lg-center{text-align:center !important} } @media(min-width:1200px){.text-xl-left{text-align:left !important} .text-xl-right{text-align:right !important} .text-xl-center{text-align:center !important} } .text-lowercase{text-transform:lowercase !important} .text-uppercase{text-transform:uppercase !important} .text-capitalize{text-transform:capitalize !important} .font-weight-light{font-weight:300 !important} .font-weight-lighter{font-weight:lighter !important} .font-weight-normal{font-weight:400 !important} .font-weight-bold{font-weight:700 !important} .font-weight-bolder{font-weight:bolder !important} .font-italic{font-style:italic !important} .text-white,.text-dark{color:#fff !important} .text-black,.text-light{color:#141414 !important} .text-body{color:#212529 !important} .text-muted{color:#6c757d !important} .text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0} .text-decoration-none{text-decoration:none !important} .text-break{word-break:break-word !important;overflow-wrap:break-word !important} .text-reset{color:inherit !important} .d-none{display:none !important} .d-inline{display:inline !important} .d-inline-block{display:inline-block !important} .d-block{display:block !important} .d-table{display:table !important} .d-table-row{display:table-row !important} .d-table-cell{display:table-cell !important} .d-flex{display:flex !important} .d-inline-flex{display:inline-flex !important} @media(min-width:576px){.d-sm-none{display:none !important} .d-sm-inline{display:inline !important} .d-sm-inline-block{display:inline-block !important} .d-sm-block{display:block !important} .d-sm-table{display:table !important} .d-sm-table-row{display:table-row !important} .d-sm-table-cell{display:table-cell !important} .d-sm-flex{display:flex !important} .d-sm-inline-flex{display:inline-flex !important} } @media(min-width:768px){.d-md-none{display:none !important} .d-md-inline{display:inline !important} .d-md-inline-block{display:inline-block !important} .d-md-block{display:block !important} .d-md-table{display:table !important} .d-md-table-row{display:table-row !important} .d-md-table-cell{display:table-cell !important} .d-md-flex{display:flex !important} .d-md-inline-flex{display:inline-flex !important} } @media(min-width:992px){.d-lg-none{display:none !important} .d-lg-inline{display:inline !important} .d-lg-inline-block{display:inline-block !important} .d-lg-block{display:block !important} .d-lg-table{display:table !important} .d-lg-table-row{display:table-row !important} .d-lg-table-cell{display:table-cell !important} .d-lg-flex{display:flex !important} .d-lg-inline-flex{display:inline-flex !important} } @media(min-width:1200px){.d-xl-none{display:none !important} .d-xl-inline{display:inline !important} .d-xl-inline-block{display:inline-block !important} .d-xl-block{display:block !important} .d-xl-table{display:table !important} .d-xl-table-row{display:table-row !important} .d-xl-table-cell{display:table-cell !important} .d-xl-flex{display:flex !important} .d-xl-inline-flex{display:inline-flex !important} } @media print{.d-print-none{display:none !important} .d-print-inline{display:inline !important} .d-print-inline-block{display:inline-block !important} .d-print-block{display:block !important} .d-print-table{display:table !important} .d-print-table-row{display:table-row !important} .d-print-table-cell{display:table-cell !important} .d-print-flex{display:flex !important} .d-print-inline-flex{display:inline-flex !important} } .fade:not(.show){opacity:0} .collapse:not(.show){display:none} .flex-row{flex-direction:row !important} .flex-column{flex-direction:column !important} .flex-row-reverse{flex-direction:row-reverse !important} .flex-column-reverse{flex-direction:column-reverse !important} .flex-wrap{flex-wrap:wrap !important} .flex-nowrap{flex-wrap:nowrap !important} .flex-wrap-reverse{flex-wrap:wrap-reverse !important} .flex-fill{flex:1 1 auto !important} .flex-grow-0{flex-grow:0 !important} .flex-grow-1{flex-grow:1 !important} .flex-shrink-0{flex-shrink:0 !important} .flex-shrink-1{flex-shrink:1 !important} .justify-content-start{justify-content:flex-start !important} .justify-content-end{justify-content:flex-end !important} .justify-content-center{justify-content:center !important} .justify-content-between{justify-content:space-between !important} .justify-content-around{justify-content:space-around !important} .align-items-start{align-items:flex-start !important} .align-items-end{align-items:flex-end !important} .align-items-center{align-items:center !important} .align-items-baseline{align-items:baseline !important} .align-items-stretch{align-items:stretch !important} .align-content-start{align-content:flex-start !important} .align-content-end{align-content:flex-end !important} .align-content-center{align-content:center !important} .align-content-between{align-content:space-between !important} .align-content-around{align-content:space-around !important} .align-content-stretch{align-content:stretch !important} .align-self-auto{align-self:auto !important} .align-self-start{align-self:flex-start !important} .align-self-end{align-self:flex-end !important} .align-self-center{align-self:center !important} .align-self-baseline{align-self:baseline !important} .align-self-stretch{align-self:stretch !important} @media(min-width:576px){.flex-sm-row{flex-direction:row !important} .flex-sm-column{flex-direction:column !important} .flex-sm-row-reverse{flex-direction:row-reverse !important} .flex-sm-column-reverse{flex-direction:column-reverse !important} .flex-sm-wrap{flex-wrap:wrap !important} .flex-sm-nowrap{flex-wrap:nowrap !important} .flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important} .flex-sm-fill{flex:1 1 auto !important} .flex-sm-grow-0{flex-grow:0 !important} .flex-sm-grow-1{flex-grow:1 !important} .flex-sm-shrink-0{flex-shrink:0 !important} .flex-sm-shrink-1{flex-shrink:1 !important} .justify-content-sm-start{justify-content:flex-start !important} .justify-content-sm-end{justify-content:flex-end !important} .justify-content-sm-center{justify-content:center !important} .justify-content-sm-between{justify-content:space-between !important} .justify-content-sm-around{justify-content:space-around !important} .align-items-sm-start{align-items:flex-start !important} .align-items-sm-end{align-items:flex-end !important} .align-items-sm-center{align-items:center !important} .align-items-sm-baseline{align-items:baseline !important} .align-items-sm-stretch{align-items:stretch !important} .align-content-sm-start{align-content:flex-start !important} .align-content-sm-end{align-content:flex-end !important} .align-content-sm-center{align-content:center !important} .align-content-sm-between{align-content:space-between !important} .align-content-sm-around{align-content:space-around !important} .align-content-sm-stretch{align-content:stretch !important} .align-self-sm-auto{align-self:auto !important} .align-self-sm-start{align-self:flex-start !important} .align-self-sm-end{align-self:flex-end !important} .align-self-sm-center{align-self:center !important} .align-self-sm-baseline{align-self:baseline !important} .align-self-sm-stretch{align-self:stretch !important} } @media(min-width:768px){.flex-md-row{flex-direction:row !important} .flex-md-column{flex-direction:column !important} .flex-md-row-reverse{flex-direction:row-reverse !important} .flex-md-column-reverse{flex-direction:column-reverse !important} .flex-md-wrap{flex-wrap:wrap !important} .flex-md-nowrap{flex-wrap:nowrap !important} .flex-md-wrap-reverse{flex-wrap:wrap-reverse !important} .flex-md-fill{flex:1 1 auto !important} .flex-md-grow-0{flex-grow:0 !important} .flex-md-grow-1{flex-grow:1 !important} .flex-md-shrink-0{flex-shrink:0 !important} .flex-md-shrink-1{flex-shrink:1 !important} .justify-content-md-start{justify-content:flex-start !important} .justify-content-md-end{justify-content:flex-end !important} .justify-content-md-center{justify-content:center !important} .justify-content-md-between{justify-content:space-between !important} .justify-content-md-around{justify-content:space-around !important} .align-items-md-start{align-items:flex-start !important} .align-items-md-end{align-items:flex-end !important} .align-items-md-center{align-items:center !important} .align-items-md-baseline{align-items:baseline !important} .align-items-md-stretch{align-items:stretch !important} .align-content-md-start{align-content:flex-start !important} .align-content-md-end{align-content:flex-end !important} .align-content-md-center{align-content:center !important} .align-content-md-between{align-content:space-between !important} .align-content-md-around{align-content:space-around !important} .align-content-md-stretch{align-content:stretch !important} .align-self-md-auto{align-self:auto !important} .align-self-md-start{align-self:flex-start !important} .align-self-md-end{align-self:flex-end !important} .align-self-md-center{align-self:center !important} .align-self-md-baseline{align-self:baseline !important} .align-self-md-stretch{align-self:stretch !important} } @media(min-width:992px){.flex-lg-row{flex-direction:row !important} .flex-lg-column{flex-direction:column !important} .flex-lg-row-reverse{flex-direction:row-reverse !important} .flex-lg-column-reverse{flex-direction:column-reverse !important} .flex-lg-wrap{flex-wrap:wrap !important} .flex-lg-nowrap{flex-wrap:nowrap !important} .flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important} .flex-lg-fill{flex:1 1 auto !important} .flex-lg-grow-0{flex-grow:0 !important} .flex-lg-grow-1{flex-grow:1 !important} .flex-lg-shrink-0{flex-shrink:0 !important} .flex-lg-shrink-1{flex-shrink:1 !important} .justify-content-lg-start{justify-content:flex-start !important} .justify-content-lg-end{justify-content:flex-end !important} .justify-content-lg-center{justify-content:center !important} .justify-content-lg-between{justify-content:space-between !important} .justify-content-lg-around{justify-content:space-around !important} .align-items-lg-start{align-items:flex-start !important} .align-items-lg-end{align-items:flex-end !important} .align-items-lg-center{align-items:center !important} .align-items-lg-baseline{align-items:baseline !important} .align-items-lg-stretch{align-items:stretch !important} .align-content-lg-start{align-content:flex-start !important} .align-content-lg-end{align-content:flex-end !important} .align-content-lg-center{align-content:center !important} .align-content-lg-between{align-content:space-between !important} .align-content-lg-around{align-content:space-around !important} .align-content-lg-stretch{align-content:stretch !important} .align-self-lg-auto{align-self:auto !important} .align-self-lg-start{align-self:flex-start !important} .align-self-lg-end{align-self:flex-end !important} .align-self-lg-center{align-self:center !important} .align-self-lg-baseline{align-self:baseline !important} .align-self-lg-stretch{align-self:stretch !important} } @media(min-width:1200px){.flex-xl-row{flex-direction:row !important} .flex-xl-column{flex-direction:column !important} .flex-xl-row-reverse{flex-direction:row-reverse !important} .flex-xl-column-reverse{flex-direction:column-reverse !important} .flex-xl-wrap{flex-wrap:wrap !important} .flex-xl-nowrap{flex-wrap:nowrap !important} .flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important} .flex-xl-fill{flex:1 1 auto !important} .flex-xl-grow-0{flex-grow:0 !important} .flex-xl-grow-1{flex-grow:1 !important} .flex-xl-shrink-0{flex-shrink:0 !important} .flex-xl-shrink-1{flex-shrink:1 !important} .justify-content-xl-start{justify-content:flex-start !important} .justify-content-xl-end{justify-content:flex-end !important} .justify-content-xl-center{justify-content:center !important} .justify-content-xl-between{justify-content:space-between !important} .justify-content-xl-around{justify-content:space-around !important} .align-items-xl-start{align-items:flex-start !important} .align-items-xl-end{align-items:flex-end !important} .align-items-xl-center{align-items:center !important} .align-items-xl-baseline{align-items:baseline !important} .align-items-xl-stretch{align-items:stretch !important} .align-content-xl-start{align-content:flex-start !important} .align-content-xl-end{align-content:flex-end !important} .align-content-xl-center{align-content:center !important} .align-content-xl-between{align-content:space-between !important} .align-content-xl-around{align-content:space-around !important} .align-content-xl-stretch{align-content:stretch !important} .align-self-xl-auto{align-self:auto !important} .align-self-xl-start{align-self:flex-start !important} .align-self-xl-end{align-self:flex-end !important} .align-self-xl-center{align-self:center !important} .align-self-xl-baseline{align-self:baseline !important} .align-self-xl-stretch{align-self:stretch !important} } .m-0{margin:0 !important} .mt-0,.my-0{margin-top:0 !important} .mr-0,.mx-0{margin-right:0 !important} .mb-0,.my-0{margin-bottom:0 !important} .ml-0,.mx-0{margin-left:0 !important} .m-1{margin:.25rem !important} .mt-1,.my-1{margin-top:.25rem !important} .mr-1,.mx-1{margin-right:.25rem !important} .mb-1,.my-1{margin-bottom:.25rem !important} .ml-1,.mx-1{margin-left:.25rem !important} .m-2{margin:.5rem !important} .mt-2,.my-2{margin-top:.5rem !important} .mr-2,.mx-2{margin-right:.5rem !important} .mb-2,.my-2{margin-bottom:.5rem !important} .ml-2,.mx-2{margin-left:.5rem !important} .m-3{margin:1rem !important} .mt-3,.my-3{margin-top:1rem !important} .mr-3,.mx-3{margin-right:1rem !important} .mb-3,.my-3{margin-bottom:1rem !important} .ml-3,.mx-3{margin-left:1rem !important} .m-4{margin:1.5rem !important} .mt-4,.my-4{margin-top:1.5rem !important} .mr-4,.mx-4{margin-right:1.5rem !important} .mb-4,.my-4{margin-bottom:1.5rem !important} .ml-4,.mx-4{margin-left:1.5rem !important} .m-5{margin:3rem !important} .mt-5,.my-5{margin-top:3rem !important} .mr-5,.mx-5{margin-right:3rem !important} .mb-5,.my-5{margin-bottom:3rem !important} .ml-5,.mx-5{margin-left:3rem !important} .p-0{padding:0 !important} .pt-0,.py-0{padding-top:0 !important} .pr-0,.px-0{padding-right:0 !important} .pb-0,.py-0{padding-bottom:0 !important} .pl-0,.px-0{padding-left:0 !important} .p-1{padding:.25rem !important} .pt-1,.py-1{padding-top:.25rem !important} .pr-1,.px-1{padding-right:.25rem !important} .pb-1,.py-1{padding-bottom:.25rem !important} .pl-1,.px-1{padding-left:.25rem !important} .p-2{padding:.5rem !important} .pt-2,.py-2{padding-top:.5rem !important} .pr-2,.px-2{padding-right:.5rem !important} .pb-2,.py-2{padding-bottom:.5rem !important} .pl-2,.px-2{padding-left:.5rem !important} .p-3{padding:1rem !important} .pt-3,.py-3{padding-top:1rem !important} .pr-3,.px-3{padding-right:1rem !important} .pb-3,.py-3{padding-bottom:1rem !important} .pl-3,.px-3{padding-left:1rem !important} .p-4{padding:1.5rem !important} .pt-4,.py-4{padding-top:1.5rem !important} .pr-4,.px-4{padding-right:1.5rem !important} .pb-4,.py-4{padding-bottom:1.5rem !important} .pl-4,.px-4{padding-left:1.5rem !important} .p-5{padding:3rem !important} .pt-5,.py-5{padding-top:3rem !important} .pr-5,.px-5{padding-right:3rem !important} .pb-5,.py-5{padding-bottom:3rem !important} .pl-5,.px-5{padding-left:3rem !important} .m-n1{margin:-0.25rem !important} .mt-n1,.my-n1{margin-top:-0.25rem !important} .mr-n1,.mx-n1{margin-right:-0.25rem !important} .mb-n1,.my-n1{margin-bottom:-0.25rem !important} .ml-n1,.mx-n1{margin-left:-0.25rem !important} .m-n2{margin:-0.5rem !important} .mt-n2,.my-n2{margin-top:-0.5rem !important} .mr-n2,.mx-n2{margin-right:-0.5rem !important} .mb-n2,.my-n2{margin-bottom:-0.5rem !important} .ml-n2,.mx-n2{margin-left:-0.5rem !important} .m-n3{margin:-1rem !important} .mt-n3,.my-n3{margin-top:-1rem !important} .mr-n3,.mx-n3{margin-right:-1rem !important} .mb-n3,.my-n3{margin-bottom:-1rem !important} .ml-n3,.mx-n3{margin-left:-1rem !important} .m-n4{margin:-1.5rem !important} .mt-n4,.my-n4{margin-top:-1.5rem !important} .mr-n4,.mx-n4{margin-right:-1.5rem !important} .mb-n4,.my-n4{margin-bottom:-1.5rem !important} .ml-n4,.mx-n4{margin-left:-1.5rem !important} .m-n5{margin:-3rem !important} .mt-n5,.my-n5{margin-top:-3rem !important} .mr-n5,.mx-n5{margin-right:-3rem !important} .mb-n5,.my-n5{margin-bottom:-3rem !important} .ml-n5,.mx-n5{margin-left:-3rem !important} .m-auto{margin:auto !important} .mt-auto,.my-auto{margin-top:auto !important} .mr-auto,.mx-auto{margin-right:auto !important} .mb-auto,.my-auto{margin-bottom:auto !important} .ml-auto,.mx-auto{margin-left:auto !important} @media(min-width:576px){.m-sm-0{margin:0 !important} .mt-sm-0,.my-sm-0{margin-top:0 !important} .mr-sm-0,.mx-sm-0{margin-right:0 !important} .mb-sm-0,.my-sm-0{margin-bottom:0 !important} .ml-sm-0,.mx-sm-0{margin-left:0 !important} .m-sm-1{margin:.25rem !important} .mt-sm-1,.my-sm-1{margin-top:.25rem !important} .mr-sm-1,.mx-sm-1{margin-right:.25rem !important} .mb-sm-1,.my-sm-1{margin-bottom:.25rem !important} .ml-sm-1,.mx-sm-1{margin-left:.25rem !important} .m-sm-2{margin:.5rem !important} .mt-sm-2,.my-sm-2{margin-top:.5rem !important} .mr-sm-2,.mx-sm-2{margin-right:.5rem !important} .mb-sm-2,.my-sm-2{margin-bottom:.5rem !important} .ml-sm-2,.mx-sm-2{margin-left:.5rem !important} .m-sm-3{margin:1rem !important} .mt-sm-3,.my-sm-3{margin-top:1rem !important} .mr-sm-3,.mx-sm-3{margin-right:1rem !important} .mb-sm-3,.my-sm-3{margin-bottom:1rem !important} .ml-sm-3,.mx-sm-3{margin-left:1rem !important} .m-sm-4{margin:1.5rem !important} .mt-sm-4,.my-sm-4{margin-top:1.5rem !important} .mr-sm-4,.mx-sm-4{margin-right:1.5rem !important} .mb-sm-4,.my-sm-4{margin-bottom:1.5rem !important} .ml-sm-4,.mx-sm-4{margin-left:1.5rem !important} .m-sm-5{margin:3rem !important} .mt-sm-5,.my-sm-5{margin-top:3rem !important} .mr-sm-5,.mx-sm-5{margin-right:3rem !important} .mb-sm-5,.my-sm-5{margin-bottom:3rem !important} .ml-sm-5,.mx-sm-5{margin-left:3rem !important} .p-sm-0{padding:0 !important} .pt-sm-0,.py-sm-0{padding-top:0 !important} .pr-sm-0,.px-sm-0{padding-right:0 !important} .pb-sm-0,.py-sm-0{padding-bottom:0 !important} .pl-sm-0,.px-sm-0{padding-left:0 !important} .p-sm-1{padding:.25rem !important} .pt-sm-1,.py-sm-1{padding-top:.25rem !important} .pr-sm-1,.px-sm-1{padding-right:.25rem !important} .pb-sm-1,.py-sm-1{padding-bottom:.25rem !important} .pl-sm-1,.px-sm-1{padding-left:.25rem !important} .p-sm-2{padding:.5rem !important} .pt-sm-2,.py-sm-2{padding-top:.5rem !important} .pr-sm-2,.px-sm-2{padding-right:.5rem !important} .pb-sm-2,.py-sm-2{padding-bottom:.5rem !important} .pl-sm-2,.px-sm-2{padding-left:.5rem !important} .p-sm-3{padding:1rem !important} .pt-sm-3,.py-sm-3{padding-top:1rem !important} .pr-sm-3,.px-sm-3{padding-right:1rem !important} .pb-sm-3,.py-sm-3{padding-bottom:1rem !important} .pl-sm-3,.px-sm-3{padding-left:1rem !important} .p-sm-4{padding:1.5rem !important} .pt-sm-4,.py-sm-4{padding-top:1.5rem !important} .pr-sm-4,.px-sm-4{padding-right:1.5rem !important} .pb-sm-4,.py-sm-4{padding-bottom:1.5rem !important} .pl-sm-4,.px-sm-4{padding-left:1.5rem !important} .p-sm-5{padding:3rem !important} .pt-sm-5,.py-sm-5{padding-top:3rem !important} .pr-sm-5,.px-sm-5{padding-right:3rem !important} .pb-sm-5,.py-sm-5{padding-bottom:3rem !important} .pl-sm-5,.px-sm-5{padding-left:3rem !important} .m-sm-n1{margin:-0.25rem !important} .mt-sm-n1,.my-sm-n1{margin-top:-0.25rem !important} .mr-sm-n1,.mx-sm-n1{margin-right:-0.25rem !important} .mb-sm-n1,.my-sm-n1{margin-bottom:-0.25rem !important} .ml-sm-n1,.mx-sm-n1{margin-left:-0.25rem !important} .m-sm-n2{margin:-0.5rem !important} .mt-sm-n2,.my-sm-n2{margin-top:-0.5rem !important} .mr-sm-n2,.mx-sm-n2{margin-right:-0.5rem !important} .mb-sm-n2,.my-sm-n2{margin-bottom:-0.5rem !important} .ml-sm-n2,.mx-sm-n2{margin-left:-0.5rem !important} .m-sm-n3{margin:-1rem !important} .mt-sm-n3,.my-sm-n3{margin-top:-1rem !important} .mr-sm-n3,.mx-sm-n3{margin-right:-1rem !important} .mb-sm-n3,.my-sm-n3{margin-bottom:-1rem !important} .ml-sm-n3,.mx-sm-n3{margin-left:-1rem !important} .m-sm-n4{margin:-1.5rem !important} .mt-sm-n4,.my-sm-n4{margin-top:-1.5rem !important} .mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem !important} .mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem !important} .ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem !important} .m-sm-n5{margin:-3rem !important} .mt-sm-n5,.my-sm-n5{margin-top:-3rem !important} .mr-sm-n5,.mx-sm-n5{margin-right:-3rem !important} .mb-sm-n5,.my-sm-n5{margin-bottom:-3rem !important} .ml-sm-n5,.mx-sm-n5{margin-left:-3rem !important} .m-sm-auto{margin:auto !important} .mt-sm-auto,.my-sm-auto{margin-top:auto !important} .mr-sm-auto,.mx-sm-auto{margin-right:auto !important} .mb-sm-auto,.my-sm-auto{margin-bottom:auto !important} .ml-sm-auto,.mx-sm-auto{margin-left:auto !important} } @media(min-width:768px){.m-md-0{margin:0 !important} .mt-md-0,.my-md-0{margin-top:0 !important} .mr-md-0,.mx-md-0{margin-right:0 !important} .mb-md-0,.my-md-0{margin-bottom:0 !important} .ml-md-0,.mx-md-0{margin-left:0 !important} .m-md-1{margin:.25rem !important} .mt-md-1,.my-md-1{margin-top:.25rem !important} .mr-md-1,.mx-md-1{margin-right:.25rem !important} .mb-md-1,.my-md-1{margin-bottom:.25rem !important} .ml-md-1,.mx-md-1{margin-left:.25rem !important} .m-md-2{margin:.5rem !important} .mt-md-2,.my-md-2{margin-top:.5rem !important} .mr-md-2,.mx-md-2{margin-right:.5rem !important} .mb-md-2,.my-md-2{margin-bottom:.5rem !important} .ml-md-2,.mx-md-2{margin-left:.5rem !important} .m-md-3{margin:1rem !important} .mt-md-3,.my-md-3{margin-top:1rem !important} .mr-md-3,.mx-md-3{margin-right:1rem !important} .mb-md-3,.my-md-3{margin-bottom:1rem !important} .ml-md-3,.mx-md-3{margin-left:1rem !important} .m-md-4{margin:1.5rem !important} .mt-md-4,.my-md-4{margin-top:1.5rem !important} .mr-md-4,.mx-md-4{margin-right:1.5rem !important} .mb-md-4,.my-md-4{margin-bottom:1.5rem !important} .ml-md-4,.mx-md-4{margin-left:1.5rem !important} .m-md-5{margin:3rem !important} .mt-md-5,.my-md-5{margin-top:3rem !important} .mr-md-5,.mx-md-5{margin-right:3rem !important} .mb-md-5,.my-md-5{margin-bottom:3rem !important} .ml-md-5,.mx-md-5{margin-left:3rem !important} .p-md-0{padding:0 !important} .pt-md-0,.py-md-0{padding-top:0 !important} .pr-md-0,.px-md-0{padding-right:0 !important} .pb-md-0,.py-md-0{padding-bottom:0 !important} .pl-md-0,.px-md-0{padding-left:0 !important} .p-md-1{padding:.25rem !important} .pt-md-1,.py-md-1{padding-top:.25rem !important} .pr-md-1,.px-md-1{padding-right:.25rem !important} .pb-md-1,.py-md-1{padding-bottom:.25rem !important} .pl-md-1,.px-md-1{padding-left:.25rem !important} .p-md-2{padding:.5rem !important} .pt-md-2,.py-md-2{padding-top:.5rem !important} .pr-md-2,.px-md-2{padding-right:.5rem !important} .pb-md-2,.py-md-2{padding-bottom:.5rem !important} .pl-md-2,.px-md-2{padding-left:.5rem !important} .p-md-3{padding:1rem !important} .pt-md-3,.py-md-3{padding-top:1rem !important} .pr-md-3,.px-md-3{padding-right:1rem !important} .pb-md-3,.py-md-3{padding-bottom:1rem !important} .pl-md-3,.px-md-3{padding-left:1rem !important} .p-md-4{padding:1.5rem !important} .pt-md-4,.py-md-4{padding-top:1.5rem !important} .pr-md-4,.px-md-4{padding-right:1.5rem !important} .pb-md-4,.py-md-4{padding-bottom:1.5rem !important} .pl-md-4,.px-md-4{padding-left:1.5rem !important} .p-md-5{padding:3rem !important} .pt-md-5,.py-md-5{padding-top:3rem !important} .pr-md-5,.px-md-5{padding-right:3rem !important} .pb-md-5,.py-md-5{padding-bottom:3rem !important} .pl-md-5,.px-md-5{padding-left:3rem !important} .m-md-n1{margin:-0.25rem !important} .mt-md-n1,.my-md-n1{margin-top:-0.25rem !important} .mr-md-n1,.mx-md-n1{margin-right:-0.25rem !important} .mb-md-n1,.my-md-n1{margin-bottom:-0.25rem !important} .ml-md-n1,.mx-md-n1{margin-left:-0.25rem !important} .m-md-n2{margin:-0.5rem !important} .mt-md-n2,.my-md-n2{margin-top:-0.5rem !important} .mr-md-n2,.mx-md-n2{margin-right:-0.5rem !important} .mb-md-n2,.my-md-n2{margin-bottom:-0.5rem !important} .ml-md-n2,.mx-md-n2{margin-left:-0.5rem !important} .m-md-n3{margin:-1rem !important} .mt-md-n3,.my-md-n3{margin-top:-1rem !important} .mr-md-n3,.mx-md-n3{margin-right:-1rem !important} .mb-md-n3,.my-md-n3{margin-bottom:-1rem !important} .ml-md-n3,.mx-md-n3{margin-left:-1rem !important} .m-md-n4{margin:-1.5rem !important} .mt-md-n4,.my-md-n4{margin-top:-1.5rem !important} .mr-md-n4,.mx-md-n4{margin-right:-1.5rem !important} .mb-md-n4,.my-md-n4{margin-bottom:-1.5rem !important} .ml-md-n4,.mx-md-n4{margin-left:-1.5rem !important} .m-md-n5{margin:-3rem !important} .mt-md-n5,.my-md-n5{margin-top:-3rem !important} .mr-md-n5,.mx-md-n5{margin-right:-3rem !important} .mb-md-n5,.my-md-n5{margin-bottom:-3rem !important} .ml-md-n5,.mx-md-n5{margin-left:-3rem !important} .m-md-auto{margin:auto !important} .mt-md-auto,.my-md-auto{margin-top:auto !important} .mr-md-auto,.mx-md-auto{margin-right:auto !important} .mb-md-auto,.my-md-auto{margin-bottom:auto !important} .ml-md-auto,.mx-md-auto{margin-left:auto !important} } @media(min-width:992px){.m-lg-0{margin:0 !important} .mt-lg-0,.my-lg-0{margin-top:0 !important} .mr-lg-0,.mx-lg-0{margin-right:0 !important} .mb-lg-0,.my-lg-0{margin-bottom:0 !important} .ml-lg-0,.mx-lg-0{margin-left:0 !important} .m-lg-1{margin:.25rem !important} .mt-lg-1,.my-lg-1{margin-top:.25rem !important} .mr-lg-1,.mx-lg-1{margin-right:.25rem !important} .mb-lg-1,.my-lg-1{margin-bottom:.25rem !important} .ml-lg-1,.mx-lg-1{margin-left:.25rem !important} .m-lg-2{margin:.5rem !important} .mt-lg-2,.my-lg-2{margin-top:.5rem !important} .mr-lg-2,.mx-lg-2{margin-right:.5rem !important} .mb-lg-2,.my-lg-2{margin-bottom:.5rem !important} .ml-lg-2,.mx-lg-2{margin-left:.5rem !important} .m-lg-3{margin:1rem !important} .mt-lg-3,.my-lg-3{margin-top:1rem !important} .mr-lg-3,.mx-lg-3{margin-right:1rem !important} .mb-lg-3,.my-lg-3{margin-bottom:1rem !important} .ml-lg-3,.mx-lg-3{margin-left:1rem !important} .m-lg-4{margin:1.5rem !important} .mt-lg-4,.my-lg-4{margin-top:1.5rem !important} .mr-lg-4,.mx-lg-4{margin-right:1.5rem !important} .mb-lg-4,.my-lg-4{margin-bottom:1.5rem !important} .ml-lg-4,.mx-lg-4{margin-left:1.5rem !important} .m-lg-5{margin:3rem !important} .mt-lg-5,.my-lg-5{margin-top:3rem !important} .mr-lg-5,.mx-lg-5{margin-right:3rem !important} .mb-lg-5,.my-lg-5{margin-bottom:3rem !important} .ml-lg-5,.mx-lg-5{margin-left:3rem !important} .p-lg-0{padding:0 !important} .pt-lg-0,.py-lg-0{padding-top:0 !important} .pr-lg-0,.px-lg-0{padding-right:0 !important} .pb-lg-0,.py-lg-0{padding-bottom:0 !important} .pl-lg-0,.px-lg-0{padding-left:0 !important} .p-lg-1{padding:.25rem !important} .pt-lg-1,.py-lg-1{padding-top:.25rem !important} .pr-lg-1,.px-lg-1{padding-right:.25rem !important} .pb-lg-1,.py-lg-1{padding-bottom:.25rem !important} .pl-lg-1,.px-lg-1{padding-left:.25rem !important} .p-lg-2{padding:.5rem !important} .pt-lg-2,.py-lg-2{padding-top:.5rem !important} .pr-lg-2,.px-lg-2{padding-right:.5rem !important} .pb-lg-2,.py-lg-2{padding-bottom:.5rem !important} .pl-lg-2,.px-lg-2{padding-left:.5rem !important} .p-lg-3{padding:1rem !important} .pt-lg-3,.py-lg-3{padding-top:1rem !important} .pr-lg-3,.px-lg-3{padding-right:1rem !important} .pb-lg-3,.py-lg-3{padding-bottom:1rem !important} .pl-lg-3,.px-lg-3{padding-left:1rem !important} .p-lg-4{padding:1.5rem !important} .pt-lg-4,.py-lg-4{padding-top:1.5rem !important} .pr-lg-4,.px-lg-4{padding-right:1.5rem !important} .pb-lg-4,.py-lg-4{padding-bottom:1.5rem !important} .pl-lg-4,.px-lg-4{padding-left:1.5rem !important} .p-lg-5{padding:3rem !important} .pt-lg-5,.py-lg-5{padding-top:3rem !important} .pr-lg-5,.px-lg-5{padding-right:3rem !important} .pb-lg-5,.py-lg-5{padding-bottom:3rem !important} .pl-lg-5,.px-lg-5{padding-left:3rem !important} .m-lg-n1{margin:-0.25rem !important} .mt-lg-n1,.my-lg-n1{margin-top:-0.25rem !important} .mr-lg-n1,.mx-lg-n1{margin-right:-0.25rem !important} .mb-lg-n1,.my-lg-n1{margin-bottom:-0.25rem !important} .ml-lg-n1,.mx-lg-n1{margin-left:-0.25rem !important} .m-lg-n2{margin:-0.5rem !important} .mt-lg-n2,.my-lg-n2{margin-top:-0.5rem !important} .mr-lg-n2,.mx-lg-n2{margin-right:-0.5rem !important} .mb-lg-n2,.my-lg-n2{margin-bottom:-0.5rem !important} .ml-lg-n2,.mx-lg-n2{margin-left:-0.5rem !important} .m-lg-n3{margin:-1rem !important} .mt-lg-n3,.my-lg-n3{margin-top:-1rem !important} .mr-lg-n3,.mx-lg-n3{margin-right:-1rem !important} .mb-lg-n3,.my-lg-n3{margin-bottom:-1rem !important} .ml-lg-n3,.mx-lg-n3{margin-left:-1rem !important} .m-lg-n4{margin:-1.5rem !important} .mt-lg-n4,.my-lg-n4{margin-top:-1.5rem !important} .mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem !important} .mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem !important} .ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem !important} .m-lg-n5{margin:-3rem !important} .mt-lg-n5,.my-lg-n5{margin-top:-3rem !important} .mr-lg-n5,.mx-lg-n5{margin-right:-3rem !important} .mb-lg-n5,.my-lg-n5{margin-bottom:-3rem !important} .ml-lg-n5,.mx-lg-n5{margin-left:-3rem !important} .m-lg-auto{margin:auto !important} .mt-lg-auto,.my-lg-auto{margin-top:auto !important} .mr-lg-auto,.mx-lg-auto{margin-right:auto !important} .mb-lg-auto,.my-lg-auto{margin-bottom:auto !important} .ml-lg-auto,.mx-lg-auto{margin-left:auto !important} } @media(min-width:1200px){.m-xl-0{margin:0 !important} .mt-xl-0,.my-xl-0{margin-top:0 !important} .mr-xl-0,.mx-xl-0{margin-right:0 !important} .mb-xl-0,.my-xl-0{margin-bottom:0 !important} .ml-xl-0,.mx-xl-0{margin-left:0 !important} .m-xl-1{margin:.25rem !important} .mt-xl-1,.my-xl-1{margin-top:.25rem !important} .mr-xl-1,.mx-xl-1{margin-right:.25rem !important} .mb-xl-1,.my-xl-1{margin-bottom:.25rem !important} .ml-xl-1,.mx-xl-1{margin-left:.25rem !important} .m-xl-2{margin:.5rem !important} .mt-xl-2,.my-xl-2{margin-top:.5rem !important} .mr-xl-2,.mx-xl-2{margin-right:.5rem !important} .mb-xl-2,.my-xl-2{margin-bottom:.5rem !important} .ml-xl-2,.mx-xl-2{margin-left:.5rem !important} .m-xl-3{margin:1rem !important} .mt-xl-3,.my-xl-3{margin-top:1rem !important} .mr-xl-3,.mx-xl-3{margin-right:1rem !important} .mb-xl-3,.my-xl-3{margin-bottom:1rem !important} .ml-xl-3,.mx-xl-3{margin-left:1rem !important} .m-xl-4{margin:1.5rem !important} .mt-xl-4,.my-xl-4{margin-top:1.5rem !important} .mr-xl-4,.mx-xl-4{margin-right:1.5rem !important} .mb-xl-4,.my-xl-4{margin-bottom:1.5rem !important} .ml-xl-4,.mx-xl-4{margin-left:1.5rem !important} .m-xl-5{margin:3rem !important} .mt-xl-5,.my-xl-5{margin-top:3rem !important} .mr-xl-5,.mx-xl-5{margin-right:3rem !important} .mb-xl-5,.my-xl-5{margin-bottom:3rem !important} .ml-xl-5,.mx-xl-5{margin-left:3rem !important} .p-xl-0{padding:0 !important} .pt-xl-0,.py-xl-0{padding-top:0 !important} .pr-xl-0,.px-xl-0{padding-right:0 !important} .pb-xl-0,.py-xl-0{padding-bottom:0 !important} .pl-xl-0,.px-xl-0{padding-left:0 !important} .p-xl-1{padding:.25rem !important} .pt-xl-1,.py-xl-1{padding-top:.25rem !important} .pr-xl-1,.px-xl-1{padding-right:.25rem !important} .pb-xl-1,.py-xl-1{padding-bottom:.25rem !important} .pl-xl-1,.px-xl-1{padding-left:.25rem !important} .p-xl-2{padding:.5rem !important} .pt-xl-2,.py-xl-2{padding-top:.5rem !important} .pr-xl-2,.px-xl-2{padding-right:.5rem !important} .pb-xl-2,.py-xl-2{padding-bottom:.5rem !important} .pl-xl-2,.px-xl-2{padding-left:.5rem !important} .p-xl-3{padding:1rem !important} .pt-xl-3,.py-xl-3{padding-top:1rem !important} .pr-xl-3,.px-xl-3{padding-right:1rem !important} .pb-xl-3,.py-xl-3{padding-bottom:1rem !important} .pl-xl-3,.px-xl-3{padding-left:1rem !important} .p-xl-4{padding:1.5rem !important} .pt-xl-4,.py-xl-4{padding-top:1.5rem !important} .pr-xl-4,.px-xl-4{padding-right:1.5rem !important} .pb-xl-4,.py-xl-4{padding-bottom:1.5rem !important} .pl-xl-4,.px-xl-4{padding-left:1.5rem !important} .p-xl-5{padding:3rem !important} .pt-xl-5,.py-xl-5{padding-top:3rem !important} .pr-xl-5,.px-xl-5{padding-right:3rem !important} .pb-xl-5,.py-xl-5{padding-bottom:3rem !important} .pl-xl-5,.px-xl-5{padding-left:3rem !important} .m-xl-n1{margin:-0.25rem !important} .mt-xl-n1,.my-xl-n1{margin-top:-0.25rem !important} .mr-xl-n1,.mx-xl-n1{margin-right:-0.25rem !important} .mb-xl-n1,.my-xl-n1{margin-bottom:-0.25rem !important} .ml-xl-n1,.mx-xl-n1{margin-left:-0.25rem !important} .m-xl-n2{margin:-0.5rem !important} .mt-xl-n2,.my-xl-n2{margin-top:-0.5rem !important} .mr-xl-n2,.mx-xl-n2{margin-right:-0.5rem !important} .mb-xl-n2,.my-xl-n2{margin-bottom:-0.5rem !important} .ml-xl-n2,.mx-xl-n2{margin-left:-0.5rem !important} .m-xl-n3{margin:-1rem !important} .mt-xl-n3,.my-xl-n3{margin-top:-1rem !important} .mr-xl-n3,.mx-xl-n3{margin-right:-1rem !important} .mb-xl-n3,.my-xl-n3{margin-bottom:-1rem !important} .ml-xl-n3,.mx-xl-n3{margin-left:-1rem !important} .m-xl-n4{margin:-1.5rem !important} .mt-xl-n4,.my-xl-n4{margin-top:-1.5rem !important} .mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem !important} .mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem !important} .ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem !important} .m-xl-n5{margin:-3rem !important} .mt-xl-n5,.my-xl-n5{margin-top:-3rem !important} .mr-xl-n5,.mx-xl-n5{margin-right:-3rem !important} .mb-xl-n5,.my-xl-n5{margin-bottom:-3rem !important} .ml-xl-n5,.mx-xl-n5{margin-left:-3rem !important} .m-xl-auto{margin:auto !important} .mt-xl-auto,.my-xl-auto{margin-top:auto !important} .mr-xl-auto,.mx-xl-auto{margin-right:auto !important} .mb-xl-auto,.my-xl-auto{margin-bottom:auto !important} .ml-xl-auto,.mx-xl-auto{margin-left:auto !important} } .clearfix::after{display:block;clear:both;content:""} .fade{transition:opacity .15s linear} @media(prefers-reduced-motion:reduce){.fade{transition:none} } .collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease} @media(prefers-reduced-motion:reduce){.collapsing{transition:none} } .btn{flex-grow:0;flex-shrink:0;display:inline-block;font-family:Decimal,Arial,"Helvetica Neue",Helvetica,sans-serif;font-weight:600;color:#141414;text-align:center;vertical-align:middle;user-select:none;background-color:transparent;border:2px solid transparent;border-radius:50px;transition:box-shadow .15s ease-in-out;will-change:box-shadow} @media(prefers-reduced-motion:reduce){.btn{transition:none} } .btn:hover{color:#141414;text-decoration:none} .btn:focus,.btn.focus{outline:0;box-shadow:0 0 0 3px rgba(250,88,45,0.5)} .btn:active,.btn.active{box-shadow:none !important} .btn.disabled,.btn:disabled{opacity:.65} .btn:not(:disabled):not(.disabled){cursor:pointer} a.btn.disabled,fieldset:disabled a.btn{pointer-events:none} .btn-primary,.btn-primary-outline,.btn-black,.btn-white{display:inline-flex;align-items:center;text-decoration:none;max-width:100%;text-align:left;background-color:#fa582d;color:#141414;position:relative} .btn-primary i,.btn-primary-outline i,.btn-black i,.btn-white i{width:20px;height:20px;margin-left:15px;flex-grow:0;flex-shrink:0;display:inline-block;background-size:contain;background-position:center;background-repeat:no-repeat;background-image:url('/etc/clientlibs/cleangb/imgs/arrow-right-black.svg')} .btn-primary.video i,.btn-primary-outline.video i,.btn-black.video i,.btn-white.video i{background-image:url('/etc/clientlibs/cleangb/imgs/video-play-black.svg')} .btn-primary.video.arrow i,.btn-primary-outline.video.arrow i,.btn-black.video.arrow i,.btn-white.video.arrow i{background-image:url('/etc/clientlibs/cleangb/imgs/arrow-right-black.svg')} .btn-primary.dropdown-toggle i,.btn-primary-outline.dropdown-toggle i,.btn-black.dropdown-toggle i,.btn-white.dropdown-toggle i{background-image:url('/etc/clientlibs/cleangb/imgs/chevron-down-black.svg');transition:transform .15s ease-in-out} .btn-primary:hover,.btn-primary-outline:hover,.btn-black:hover,.btn-white:hover{background-color:#fb7652} .btn-primary:active,.btn-primary-outline:active,.btn-black:active,.btn-white:active{background-color:#f94414} .btn-primary-outline{border:2px solid #fa582d;background:0} .btn-primary-outline.white{border-color:#fff;color:#fff} .btn-primary-outline.white i{background-image:url('/etc/clientlibs/cleangb/imgs/arrow-right-white.svg')} .show .btn-primary.dropdown-toggle i,.show .btn-primary-outline.dropdown-toggle i{transform:rotate(180deg)} @media(max-width:991.98px){.shadow-button-list.justify-content-center{justify-content:flex-start !important} } .btn-shadow{box-shadow:inset 0 3px 6px rgba(0,0,0,0.1);background-color:#f4f4f2;color:#5f5f5f;background-size:0 100%;background-repeat:no-repeat;border:0;transition:background-size .2s;display:inline-flex;align-items:center;text-decoration:none;max-width:100%;text-align:left;position:relative;background-image:linear-gradient(to right,#fa582d,#ff2e00)} .btn-shadow:hover{background-size:100% 100%;transition:background-size .2s;color:white} .btn-shadow i{margin:0;margin-right:.5rem;background-image:url("/etc/clientlibs/cleangb/imgs/logo-default-black.svg");width:20px;height:20px;flex-grow:0;flex-shrink:0;display:inline-block;background-size:contain;background-position:center;background-repeat:no-repeat} [data-type="strata"] .btn:focus,[data-type="strata"] .btn.focus{box-shadow:0 0 0 3px rgba(255,203,6,0.5)} [data-type="strata"] .btn-primary{background-color:#ffcb06} [data-type="strata"] .btn-primary:hover{background-color:#ffd639} [data-type="strata"] .btn-primary:active{background-color:#f6c200} [data-type="strata"] .btn-primary-outline{border-color:#ffcb06} [data-type="strata"] .btn-primary-outline:hover{background-color:#ffcb06} [data-type="strata"] .btn-primary-outline:active{background-color:#f6c200} [data-type="strata"] .btn-shadow{background-image:linear-gradient(to right,#ffcb06,#ffca01)} [data-type="strata"] .btn-shadow:hover{color:#141414} [data-type="strata"] .btn-shadow:hover i{background-image:url('/etc/clientlibs/cleangb/imgs/icon-strata-white.svg')} [data-type="strata"] .btn-shadow i{background-image:url('/etc/clientlibs/cleangb/imgs/icon-strata-black.svg')} [data-type="prisma"] .btn:focus,[data-type="prisma"] .btn.focus{box-shadow:0 0 0 3px rgba(0,192,232,0.5)} [data-type="prisma"] .btn-primary{background-color:#00c0e8} [data-type="prisma"] .btn-primary:hover{background-color:#02d3ff} [data-type="prisma"] .btn-primary:active{background-color:#00b3d9} [data-type="prisma"] .btn-primary-outline{border-color:#00c0e8} [data-type="prisma"] .btn-primary-outline:hover{background-color:#00c0e8} [data-type="prisma"] .btn-primary-outline:active{background-color:#00b3d9} [data-type="prisma"] .btn-shadow{background-image:linear-gradient(to right,#00c0e8,#0096b5)} [data-type="prisma"] .btn-shadow i{background-image:url('/etc/clientlibs/cleangb/imgs/icon-prisma-black.svg')} [data-type="prisma"] .btn-shadow:hover i{background-image:url('/etc/clientlibs/cleangb/imgs/icon-prisma-white.svg')} [data-type="cortex"] .btn:focus,[data-type="cortexxdr"] .btn:focus,[data-type="prismaCloudReBrand"] .btn:focus,[data-type="cortex"] .btn.focus,[data-type="cortexxdr"] .btn.focus,[data-type="prismaCloudReBrand"] .btn.focus{box-shadow:0 0 0 3px rgba(0,204,102,0.5)} [data-type="cortex"] .btn-primary,[data-type="cortexxdr"] .btn-primary,[data-type="prismaCloudReBrand"] .btn-primary{background-color:#0c6} [data-type="cortex"] .btn-primary:hover,[data-type="cortexxdr"] .btn-primary:hover,[data-type="prismaCloudReBrand"] .btn-primary:hover{background-color:#00e673} [data-type="cortex"] .btn-primary:active,[data-type="cortexxdr"] .btn-primary:active,[data-type="prismaCloudReBrand"] .btn-primary:active{background-color:#00bd5e} [data-type="cortex"] .btn-primary-outline,[data-type="cortexxdr"] .btn-primary-outline,[data-type="prismaCloudReBrand"] .btn-primary-outline{border-color:#0c6} [data-type="cortex"] .btn-primary-outline:hover,[data-type="cortexxdr"] .btn-primary-outline:hover,[data-type="prismaCloudReBrand"] .btn-primary-outline:hover{background-color:#0c6} [data-type="cortex"] .btn-primary-outline:active,[data-type="cortexxdr"] .btn-primary-outline:active,[data-type="prismaCloudReBrand"] .btn-primary-outline:active{background-color:#00bd5e} [data-type="cortex"] .btn-shadow,[data-type="cortexxdr"] .btn-shadow,[data-type="prismaCloudReBrand"] .btn-shadow{background-image:linear-gradient(to right,#0c6,#00a653)} [data-type="cortex"] .btn-shadow i,[data-type="cortexxdr"] .btn-shadow i,[data-type="prismaCloudReBrand"] .btn-shadow i{background-image:url('/etc/clientlibs/cleangb/imgs/icon-cortex-black.svg')} [data-type="cortex"] .btn-shadow:hover i,[data-type="cortexxdr"] .btn-shadow:hover i,[data-type="prismaCloudReBrand"] .btn-shadow:hover i{background-image:url('/etc/clientlibs/cleangb/imgs/icon-cortex-white.svg')} [data-type="unit42"] .btn:focus,[data-type="unit42"] .btn.focus{box-shadow:0 0 0 3px rgba(217,85,29,0.5)} [data-type="unit42"] .btn-primary{color:#141414;background-color:#d9551d;background-image:linear-gradient(to right,#d9551d 25%,#d64420 75%)} [data-type="unit42"] .btn-primary:hover{background-image:linear-gradient(to right,#e25c24 25%,#df4b27 75%)} [data-type="unit42"] .btn-primary:active{background-image:linear-gradient(to right,#e46b38 25%,#e25c3b 75%)} [data-type="unit42"] .btn-primary i{background-image:url('/etc/clientlibs/cleangb/imgs/arrow-right-black.svg')} [data-type="unit42"] .btn-primary.video i{background-image:url('/etc/clientlibs/cleangb/imgs/video-play-black.svg')} [data-type="unit42"] .btn-primary-outline{border-color:#d9551d} [data-type="unit42"] .btn-primary-outline:hover{background-color:#d9551d} [data-type="unit42"] .btn-primary-outline:active{background-color:#e3632d} [data-type="unit42"] .btn-shadow{background-image:linear-gradient(to right,#c84727,#e01f23)} [data-type="unit42"] .btn-shadow i{background-image:url('/etc/clientlibs/cleangb/imgs/icon-Unit42-black.svg')} [data-type="unit42"] .btn-shadow:hover i{background-image:url('/etc/clientlibs/cleangb/imgs/icon-Unit42-white.svg')} .btn-black{background-color:#141414;color:#fff} .btn-black i{background-image:url('/etc/clientlibs/cleangb/imgs/arrow-right-white.svg')} .btn-black.video i{background-image:url('/etc/clientlibs/cleangb/imgs/video-play-white.svg')} .btn-black.dropdown-toggle i{background-image:url('/etc/clientlibs/cleangb/imgs/chevron-down-white.svg')} .btn-black:hover{color:#fff;background-color:#2e2e2e} .btn-black:active{color:#fff;background-color:#474747} .btn-white{background-color:#fff;color:#141414} .btn-white i{background-image:url('/etc/clientlibs/cleangb/imgs/arrow-right-black.svg')} .btn-white:hover{background-color:#e6e6e6} .btn-white:active{background-color:#ccc} .btn-light,.btn-outline-light{display:inline-flex;align-items:center;text-decoration:none;max-width:100%;text-align:left;background:0;color:#141414;position:relative} .btn-light i,.btn-outline-light i{width:20px;height:20px;margin-left:15px;flex-grow:0;flex-shrink:0;display:inline-block;background-size:contain;background-position:center;background-repeat:no-repeat;background-image:url('/etc/clientlibs/cleangb/imgs/arrow-right-black.svg')} .btn-light.video i,.btn-outline-light.video i{background-image:url('/etc/clientlibs/cleangb/imgs/video-play-black.svg')} .btn-light:hover,.btn-outline-light:hover{color:#7a7a7a} .btn-light:hover i,.btn-outline-light:hover i{opacity:.6} .btn-light:active,.btn-outline-light:active{color:#adadad} .btn-light:active i,.btn-outline-light:active i{opacity:.4} .btn-outline-light{border:2px solid #141414} .btn-outline-light:hover{border-color:#7a7a7a} .btn-outline-light:active{border-color:#adadad} .show>.btn-light.dropdown-toggle{color:#141414;background-color:#fff;border-color:#fff} .show>.btn-outline-light.dropdown-toggle{color:#141414;border-color:#141414;background-color:transparent} .btn-dark,.btn-outline-dark{display:inline-flex;align-items:center;text-decoration:none;max-width:100%;text-align:left;background:0;color:#fff;position:relative} .btn-dark i,.btn-outline-dark i{width:20px;height:20px;margin-left:15px;flex-grow:0;flex-shrink:0;display:inline-block;background-size:contain;background-position:center;background-repeat:no-repeat;background-image:url('/etc/clientlibs/cleangb/imgs/arrow-right-white.svg')} .btn-dark.video i,.btn-outline-dark.video i{background-image:url('/etc/clientlibs/cleangb/imgs/video-play-white.svg')} .btn-dark:hover,.btn-outline-dark:hover{color:#999} .btn-dark:hover i,.btn-outline-dark:hover i{opacity:.6} .btn-dark:active,.btn-outline-dark:active{color:#666} .btn-dark:active i,.btn-outline-dark:active i{opacity:.4} .btn-outline-dark{border:2px solid #fff} .btn-outline-dark:hover{border-color:#999} .btn-outline-dark:active{border-color:#666} .show>.btn-dark.dropdown-toggle{color:#fff;background-color:#141414;border-color:#141414} .show>.btn-outline-dark.dropdown-toggle{color:#fff;border-color:#fff;background-color:transparent} .btn-link{text-decoration:none;padding:3px 0;border-bottom:2px solid transparent;position:relative;text-align:left} .btn-link:after{content:'';position:absolute;bottom:-1px;height:1px;left:100%;transform:translateX(-100%);width:100%} .btn-link:hover,.btn-link:active,.btn-link.active{text-decoration:none;border-bottom-color:transparent} .btn-link:hover:after,.btn-link:active:after,.btn-link.active:after{transition:buttonLinkAnimation .5s ease-in-out;-webkit-animation:buttonLinkAnimation .5s ease-in-out;-moz-animation:buttonLinkAnimation .5s ease-in-out;-o-animation:buttonLinkAnimation .5s ease-in-out;-ms-transition:buttonLinkAnimation .5s ease-in-out;animation:buttonLinkAnimation .5s ease-in-out} .btn-link:focus,.btn-link.focus{will-change:opacity,transform;transition:opacity .25s ease-in-out,transform .25s ease-in-out;opacity:.6;transform:translateY(2px);box-shadow:none !important} .btn-link:disabled,.btn-link.disabled{color:#d8d8d8;pointer-events:none} .btn-link.light{color:#141414} .btn-link.light:after{background-color:#141414} .btn-link.light:hover,.btn-link.light:focus,.btn-link.light.focus{color:#141414;border-bottom-color:transparent} .btn-link.dark{color:#fff} .btn-link.dark:after{background-color:#fff} .btn-link.dark:hover,.btn-link.dark:focus,.btn-link.dark.focus{color:#fff;border-bottom-color:transparent} @-webkit-keyframes buttonLinkAnimation{0{left:100%;-webkit-transform:translateX(-100%);width:100%} 40%{left:100%;-webkit-transform:translateX(-100%);width:0} 60%{left:100%;-webkit-transform:translateX(-100%);width:0} 61%{left:0;-webkit-transform:translateX(0)} 100%{left:0;-webkit-transform:translateX(0);width:100%} } @-moz-keyframes buttonLinkAnimation{0{left:100%;-moz-transform:translateX(-100%);width:100%} 40%{left:100%;-moz-transform:translateX(-100%);width:0} 60%{left:100%;-moz-transform:translateX(-100%);width:0} 61%{left:0;-moz-transform:translateX(0)} 100%{left:0;-moz-transform:translateX(0);width:100%} } @-o-keyframes buttonLinkAnimation{0{left:100%;-o-transform:translateX(-100%);width:100%} 40%{left:100%;-o-transform:translateX(-100%);width:0} 60%{left:100%;-o-transform:translateX(-100%);width:0} 61%{left:0;-o-transform:translateX(0)} 100%{left:0;-o-transform:translateX(0);width:100%} } @-ms-keyframes buttonLinkAnimation{0{left:100%;-ms-transform:translateX(-100%);width:100%} 40%{left:100%;-ms-transform:translateX(-100%);width:0} 60%{left:100%;-ms-transform:translateX(-100%);width:0} 61%{left:0;-ms-transform:translateX(0)} 100%{left:0;-ms-transform:translateX(0);width:100%} } @keyframes buttonLinkAnimation{0{left:100%;transform:translateX(-100%);width:100%} 40%{left:100%;transform:translateX(-100%);width:0} 60%{left:100%;transform:translateX(-100%);width:0} 61%{left:0;transform:translateX(0)} 100%{left:0;transform:translateX(0);width:100%} } .btn-block{display:block;width:100%} .btn-block+.btn-block{margin-top:10px} input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%} @media(max-width:767.98px){.btn{padding:10px 20px;font-size:14px;line-height:18px} .btn-light,.btn-dark{padding-left:0;padding-right:0} .btn-link{padding:3px 0} .btn-lg,.btn-group-lg>.btn{padding:15px 25px;font-size:16px} .btn-sm,.btn-group-sm>.btn{padding:8px 16px;font-size:12px} } @media(max-width:575.98px){.btn-primary,.btn-white,.btn-black{padding:8px 18px;font-size:14px;line-height:1.4} .btn-primary.btn-lg,.btn-white.btn-lg,.btn-black.btn-lg,.btn-primary.btn-group-lg>.btn,.btn-white.btn-group-lg>.btn,.btn-black.btn-group-lg>.btn{padding:13px 24px;font-size:14px} .btn-primary.btn-sm,.btn-white.btn-sm,.btn-black.btn-sm,.btn-primary.btn-group-sm>.btn,.btn-white.btn-group-sm>.btn,.btn-black.btn-group-sm>.btn{padding:5px 15px;font-size:10px} } @media(min-width:768px){.btn{padding:13px 24px;font-size:14px;line-height:20px} .btn-light,.btn-dark{padding-left:0;padding-right:0} .btn-link{padding:5px 0} .btn-lg,.btn-group-lg>.btn{padding:20px 40px;font-size:18px} .btn-sm,.btn-group-sm>.btn{padding:10px 20px;font-size:14px} } @media(min-width:992px){.btn{font-size:16px} } .btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle} .btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto} .btn-group>.btn:hover,.btn-group-vertical>.btn:hover{z-index:1} .btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1} .btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start} .btn-toolbar .input-group{width:auto} .btn-group>.btn:not(:first-child),.btn-group>.btn-group:not(:first-child){margin-left:-1px} .btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0} .btn-group>.btn:not(:first-child),.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0} .dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem} .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after{margin-left:0} .dropleft .dropdown-toggle-split::before{margin-right:0} .btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem} .btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem} .btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center} .btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%} .btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:-1px} .btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0} .btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0} .btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0} .btn-group-toggle>.btn input[type="radio"],.btn-group-toggle>.btn input[type="checkbox"],.btn-group-toggle>.btn-group>.btn input[type="radio"],.btn-group-toggle>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0,0,0,0);pointer-events:none} .nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none} .nav-link{display:block;padding:.5rem 1rem} .nav-link:hover,.nav-link:focus{text-decoration:none} .nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default} .nav-select{display:flex;flex-grow:1;font-family:TT Hoves,Decimal,Arial,"Helvetica Neue",Helvetica,sans-serif;font-weight:500;line-height:1em;width:100%;max-width:100%;box-sizing:border-box;margin:0;border:0;border-bottom:2px solid transparent;box-shadow:none;border-radius:0;-moz-appearance:none;-webkit-appearance:none;appearance:none;background-color:transparent;background-repeat:no-repeat,repeat;background-position:right 0 center,0 0;padding:15px 30px 15px 0;transition:border-color .25s ease-in-out} .nav-select::-ms-expand{display:none} .nav-select:focus,.nav-select.focus{outline:0;box-shadow:0 0 0 3px rgba(250,88,45,0.5)} .nav-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #fff} .nav-select option{font-family:TT Hoves,Decimal,Arial,"Helvetica Neue",Helvetica,sans-serif;font-weight:500} .nav-select.light{color:#141414;border-color:rgba(20,20,20,0.5);background-image:url('/etc/clientlibs/cleangb/imgs/chevron-down-black.svg'),linear-gradient(to bottom,transparent 0,transparent 100%)} .nav-select.light:hover{border-color:#141414;background-image:url('/etc/clientlibs/cleangb/imgs/chevron-up-black.svg'),linear-gradient(to bottom,transparent 0,transparent 100%)} .nav-select.light option{color:#141414} .nav-select.dark{color:#fff;border-color:rgba(255,255,255,0.5);background-image:url('/etc/clientlibs/cleangb/imgs/chevron-down-white.svg'),linear-gradient(to bottom,transparent 0,transparent 100%)} .nav-select.dark:hover{border-color:#fff;background-image:url('/etc/clientlibs/cleangb/imgs/chevron-up-white.svg'),linear-gradient(to bottom,transparent 0,transparent 100%)} .nav-select.dark option{color:#fff} .nav-tabs{justify-content:space-between} .nav-tabs .nav-item{flex-grow:1;flex-shrink:0;text-align:center;margin-bottom:-2px} .nav-tabs .nav-link{font-family:TT Hoves,Decimal,Arial,"Helvetica Neue",Helvetica,sans-serif;font-weight:500;color:#767676;padding:10px 5px;border-bottom:2px solid #b9b9b9} .nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{color:#767676} .nav-tabs .nav-link.disabled{color:#b9b9b9;background-color:transparent;border-color:transparent} .nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:#141414;background-color:transparent;border-color:#fa582d} .nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0} .nav-pills .nav-link{border-radius:.25rem} .nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff} .nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;text-align:center} .nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center} .tab-content>.tab-pane{display:none} .tab-content>.active{display:block} [data-type="strata"] .nav-tabs .nav-link.active,[data-type="strata"] .nav-tabs .nav-item.show .nav-link{border-color:#ffcb06} [data-type="prisma"] .nav-tabs .nav-link.active,[data-type="prisma"] .nav-tabs .nav-item.show .nav-link{border-color:#00c0e8} [data-type="cortex"] .nav-tabs .nav-link.active,[data-type="cortex"] .nav-tabs .nav-item.show .nav-link{border-color:#0c6} [data-type="unit42"] .nav-tabs .nav-link.active,[data-type="unit42"] .nav-tabs .nav-item.show .nav-link{border-color:#c84727} @media(max-width:991.98px){.nav-select{font-size:16px;background-size:22px 22px} } @media(max-width:374.98px){.nav-select{font-size:14px} } @media(min-width:992px){.nav-select{font-size:16px;background-size:24px 24px} } [data-type="strata"] .nav-select:focus,[data-type="strata"] .nav-select.focus{box-shadow:0 0 0 3px rgba(255,203,6,0.5)} [data-type="strata"] input:focus,[data-type="strata"] input.focus{box-shadow:0 0 0 3px rgba(255,203,6,0.5)} [data-type="prisma"] .nav-select:focus,[data-type="prisma"] .nav-select.focus{box-shadow:0 0 0 3px rgba(0,192,232,0.5)} [data-type="prisma"] input:focus,[data-type="prisma"] input.focus{box-shadow:0 0 0 3px rgba(0,192,232,0.5)} [data-type="cortex"] .nav-select:focus,[data-type="cortex"] .nav-select.focus{box-shadow:0 0 0 3px rgba(0,204,102,0.5)} [data-type="cortex"] input:focus,[data-type="cortex"] input.focus{box-shadow:0 0 0 3px rgba(0,204,102,0.5)} .navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:.5rem 1rem;font-family:TT Hoves,Arial,"Helvetica Neue",Helvetica,sans-serif;font-weight:600} .navbar .container,.navbar .container-fluid,.navbar .container-sm,.navbar .container-md,.navbar .container-lg,.navbar .container-xl{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between} .navbar-brand{display:inline-block;margin-right:15px;font-size:14px;line-height:18px;line-height:inherit;white-space:nowrap} .navbar-brand:hover,.navbar-brand:focus{text-decoration:none} .navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none} .navbar-nav .nav-link{padding-right:0;padding-left:0} .navbar-nav .nav-link:focus{outline:0;box-shadow:0 0 0 3px rgba(250,88,45,0.5)} .navbar-nav .dropdown-menu{position:static;float:none} .navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem} .navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center} .navbar-toggler{padding:0;font-size:16px;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:3px} .navbar-toggler .navbar-toggler-icon{display:inline-block;width:28px;height:28px;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%} .navbar-toggler:not(.chevron) .navbar-toggler-icon{will-change:background-image;transition:background-image .25s ease-in-out} .navbar-toggler.chevron{border-radius:100%} .navbar-toggler.chevron .navbar-toggler-icon{will-change:transform;transition:transform .25s ease-in-out} .navbar-toggler.chevron:not(.collapsed) .navbar-toggler-icon{transform:rotate3d(0,0,1,180deg)} .navbar-toggler:hover,.navbar-toggler:focus{text-decoration:none} .navbar-toggler:focus{outline:0;box-shadow:0 0 0 3px rgba(250,88,45,0.5)} [data-type="strata"] .navbar-nav .nav-link:focus{box-shadow:0 0 0 3px rgba(255,203,6,0.5)} [data-type="strata"] .navbar-toggler:focus{box-shadow:0 0 0 3px rgba(255,203,6,0.5)} [data-type="prisma"] .navbar-nav .nav-link:focus{box-shadow:0 0 0 3px rgba(0,192,232,0.5)} [data-type="prisma"] .navbar-toggler:focus{box-shadow:0 0 0 3px rgba(0,192,232,0.5)} [data-type="cortex"] .navbar-nav .nav-link:focus{box-shadow:0 0 0 3px rgba(0,204,102,0.5)} [data-type="cortex"] .navbar-toggler:focus{box-shadow:0 0 0 3px rgba(0,204,102,0.5)} [data-type="prismaCloudReBrand"] .navbar-nav .nav-link:focus{box-shadow:0 0 0 3px rgba(0,204,102,0.5)} [data-type="prismaCloudReBrand"] .navbar-toggler:focus{box-shadow:0 0 0 3px rgba(0,204,102,0.5)} [data-type="unit42"] .navbar-nav .nav-link:focus{box-shadow:0 0 0 3px #c84727} [data-type="unit42"] .navbar-toggler:focus{box-shadow:0 0 0 3px #c84727} @media(max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0} } @media(min-width:576px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start} .navbar-expand-sm .navbar-nav{flex-direction:row} .navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute} .navbar-expand-sm .navbar-nav .nav-link{padding-right:15px;padding-left:15px} .navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-xl{flex-wrap:nowrap} .navbar-expand-sm .navbar-collapse{display:flex !important;flex-basis:auto} .navbar-expand-sm .navbar-toggler{display:none} } @media(max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-md,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0} } @media(min-width:768px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start} .navbar-expand-md .navbar-nav{flex-direction:row} .navbar-expand-md .navbar-nav .dropdown-menu{position:absolute} .navbar-expand-md .navbar-nav .nav-link{padding-right:20px;padding-left:20px} .navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-md,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-xl{flex-wrap:nowrap} .navbar-expand-md .navbar-collapse{display:flex !important;flex-basis:auto} .navbar-expand-md .navbar-toggler{display:none} } @media(max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0} } @media(min-width:992px){.navbar-brand{font-size:18px;line-height:24px} .navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start} .navbar-expand-lg .navbar-nav{flex-direction:row} .navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute} .navbar-expand-lg .navbar-nav .nav-link{padding-right:30px;padding-left:30px} .navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-xl{flex-wrap:nowrap} .navbar-expand-lg .navbar-collapse{display:flex !important;flex-basis:auto} .navbar-expand-lg .navbar-toggler{display:none} } @media(max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0} } @media(min-width:1200px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start} .navbar-expand-xl .navbar-nav{flex-direction:row} .navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute} .navbar-expand-xl .navbar-nav .nav-link{padding-right:40px;padding-left:40px} .navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-xl{flex-wrap:nowrap} .navbar-expand-xl .navbar-collapse{display:flex !important;flex-basis:auto} .navbar-expand-xl .navbar-toggler{display:none} } .navbar-expand{flex-flow:row nowrap;justify-content:flex-start} .navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-sm,.navbar-expand>.container-md,.navbar-expand>.container-lg,.navbar-expand>.container-xl{padding-right:0;padding-left:0} .navbar-expand .navbar-nav{flex-direction:row} .navbar-expand .navbar-nav .dropdown-menu{position:absolute} .navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem} .navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-sm,.navbar-expand>.container-md,.navbar-expand>.container-lg,.navbar-expand>.container-xl{flex-wrap:nowrap} .navbar-expand .navbar-collapse{display:flex !important;flex-basis:auto} .navbar-expand .navbar-toggler{display:none} .navbar-light{color:#5f5f5f} .navbar-light .navbar-brand{color:#141414} .navbar-light .navbar-brand:hover,.navbar-light .navbar-brand:focus{color:#5f5f5f} .navbar-light .navbar-nav .nav-link{color:#141414} .navbar-light .navbar-nav .nav-link:hover,.navbar-light .navbar-nav .nav-link:focus{color:#5f5f5f} .navbar-light .navbar-nav .nav-link.disabled{color:#b9b9b9} .navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .nav-link.active{color:#141414} .navbar-light .navbar-nav .show>.nav-link,.navbar-light .navbar-nav .active>.nav-link{color:#141414} .navbar-light .navbar-toggler{color:#141414} .navbar-light .navbar-toggler .navbar-toggler-icon{background-image:url('/etc/clientlibs/cleangb/imgs/menu-black.svg')} .navbar-light .navbar-toggler:not(.collapsed) .navbar-toggler-icon{background-image:url('/etc/clientlibs/cleangb/imgs/x-black.svg')} .navbar-light .navbar-toggler.chevron .navbar-toggler-icon{background-image:url('/etc/clientlibs/cleangb/imgs/chevron-down-black.svg')} .navbar-light .navbar-text{color:#5f5f5f} .navbar-light .navbar-text a{color:#141414} .navbar-light .navbar-text a:hover,.navbar-light .navbar-text a:focus{color:#141414} .navbar-dark .navbar-brand{color:#fff} .navbar-dark .navbar-brand:hover,.navbar-dark .navbar-brand:focus{color:#fff} .navbar-dark .navbar-nav .nav-link{color:#fff} .navbar-dark .navbar-nav .nav-link:hover,.navbar-dark .navbar-nav .nav-link:focus{color:rgba(255,255,255,0.75)} .navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,0.5)} .navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .nav-link.active{color:#fff} .navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .active>.nav-link{color:#fff} .navbar-dark .navbar-toggler{color:#fff} .navbar-dark .navbar-toggler .navbar-toggler-icon{background-image:url('/etc/clientlibs/cleangb/imgs/menu-white.svg')} .navbar-dark .navbar-toggler:not(.collapsed) .navbar-toggler-icon{background-image:url('/etc/clientlibs/cleangb/imgs/x-white.svg')} .navbar-dark .navbar-toggler.chevron .navbar-toggler-icon{background-image:url('/etc/clientlibs/cleangb/imgs/chevron-down-white.svg')} .navbar-dark .navbar-text{color:rgba(255,255,255,0.5)} .navbar-dark .navbar-text a{color:#fff} .navbar-dark .navbar-text a a:hover,.navbar-dark .navbar-text a a:focus{color:#fff} .dropup,.dropright,.dropdown,.dropleft{position:relative} .dropdown-toggle{white-space:nowrap} .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent} .dropdown-toggle:empty::after{margin-left:0} .dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#141414;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid #d8d8d8;border-radius:.25rem} .dropdown-menu-left{right:auto;left:0} .dropdown-menu-right{right:0;left:auto} @media(min-width:576px){.dropdown-menu-sm-left{right:auto;left:0} .dropdown-menu-sm-right{right:0;left:auto} } @media(min-width:768px){.dropdown-menu-md-left{right:auto;left:0} .dropdown-menu-md-right{right:0;left:auto} } @media(min-width:992px){.dropdown-menu-lg-left{right:auto;left:0} .dropdown-menu-lg-right{right:0;left:auto} } @media(min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0} .dropdown-menu-xl-right{right:0;left:auto} } .dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem} .dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent} .dropup .dropdown-toggle:empty::after{margin-left:0} .dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem} .dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid} .dropright .dropdown-toggle:empty::after{margin-left:0} .dropright .dropdown-toggle::after{vertical-align:0} .dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem} .dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""} .dropleft .dropdown-toggle::after{display:none} .dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent} .dropleft .dropdown-toggle:empty::after{margin-left:0} .dropleft .dropdown-toggle::before{vertical-align:0} .dropdown-menu[x-placement^="top"],.dropdown-menu[x-placement^="right"],.dropdown-menu[x-placement^="bottom"],.dropdown-menu[x-placement^="left"]{right:auto;bottom:auto} .dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #d8d8d8} .dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#141414;text-align:inherit;white-space:nowrap;background-color:transparent;border:0} .dropdown-item:hover,.dropdown-item:focus{color:#141414;text-decoration:none;background-color:#f4f4f2} .dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff} .dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent} .dropdown-menu.show{display:block} .dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap} .dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#141414} .tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0} .tooltip.show{opacity:.9} .tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem} .tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid} .bs-tooltip-top,.bs-tooltip-auto[x-placement^="top"]{padding:.4rem 0} .bs-tooltip-top .arrow,.bs-tooltip-auto[x-placement^="top"] .arrow{bottom:0} .bs-tooltip-top .arrow::before,.bs-tooltip-auto[x-placement^="top"] .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000} .bs-tooltip-right,.bs-tooltip-auto[x-placement^="right"]{padding:0 .4rem} .bs-tooltip-right .arrow,.bs-tooltip-auto[x-placement^="right"] .arrow{left:0;width:.4rem;height:.8rem} .bs-tooltip-right .arrow::before,.bs-tooltip-auto[x-placement^="right"] .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000} .bs-tooltip-bottom,.bs-tooltip-auto[x-placement^="bottom"]{padding:.4rem 0} .bs-tooltip-bottom .arrow,.bs-tooltip-auto[x-placement^="bottom"] .arrow{top:0} .bs-tooltip-bottom .arrow::before,.bs-tooltip-auto[x-placement^="bottom"] .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000} .bs-tooltip-left,.bs-tooltip-auto[x-placement^="left"]{padding:0 .4rem} .bs-tooltip-left .arrow,.bs-tooltip-auto[x-placement^="left"] .arrow{right:0;width:.4rem;height:.8rem} .bs-tooltip-left .arrow::before,.bs-tooltip-auto[x-placement^="left"] .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000} .tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem} .table{width:100%;margin-bottom:1rem;color:#141414;font-family:TT Hoves,Arial,"Helvetica Neue",Helvetica,sans-serif;font-weight:600;font-size:16px;line-height:24px} .table th,.table td{padding:.75rem;vertical-align:top;border-top:1px solid #d8d8d8} .table thead th{vertical-align:bottom;border-bottom:2px solid #d8d8d8} .table tbody+tbody{border-top:2px solid #d8d8d8} .table-sm th,.table-sm td{padding:.3rem} .table-bordered{border:1px solid #d8d8d8} .table-bordered th,.table-bordered td{border:1px solid #d8d8d8} .table-bordered thead th,.table-bordered thead td{border-bottom-width:2px} .table-borderless th,.table-borderless td,.table-borderless thead th,.table-borderless tbody+tbody{border:0} .table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,0.05)} .table-hover tbody tr:hover{color:#141414;background-color:rgba(0,0,0,0.075)} .table-primary,.table-primary>th,.table-primary>td{background-color:#b8daff} .table-primary th,.table-primary td,.table-primary thead th,.table-primary tbody+tbody{border-color:#7abaff} .table-hover .table-primary:hover{background-color:#9fcdff} .table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff} .table-secondary,.table-secondary>th,.table-secondary>td{background-color:#d6d8db} .table-secondary th,.table-secondary td,.table-secondary thead th,.table-secondary tbody+tbody{border-color:#b3b7bb} .table-hover .table-secondary:hover{background-color:#c8cbcf} .table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf} .table-success,.table-success>th,.table-success>td{background-color:#c3e6cb} .table-success th,.table-success td,.table-success thead th,.table-success tbody+tbody{border-color:#8fd19e} .table-hover .table-success:hover{background-color:#b1dfbb} .table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb} .table-info,.table-info>th,.table-info>td{background-color:#bee5eb} .table-info th,.table-info td,.table-info thead th,.table-info tbody+tbody{border-color:#86cfda} .table-hover .table-info:hover{background-color:#abdde5} .table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5} .table-warning,.table-warning>th,.table-warning>td{background-color:#ffeeba} .table-warning th,.table-warning td,.table-warning thead th,.table-warning tbody+tbody{border-color:#ffdf7e} .table-hover .table-warning:hover{background-color:#ffe8a1} .table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1} .table-danger,.table-danger>th,.table-danger>td{background-color:#f5c6cb} .table-danger th,.table-danger td,.table-danger thead th,.table-danger tbody+tbody{border-color:#ed969e} .table-hover .table-danger:hover{background-color:#f1b0b7} .table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7} .table-light,.table-light>th,.table-light>td{background-color:#fdfdfe} .table-light th,.table-light td,.table-light thead th,.table-light tbody+tbody{border-color:#fbfcfc} .table-hover .table-light:hover{background-color:#ececf6} .table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6} .table-dark,.table-dark>th,.table-dark>td{background-color:#c6c8ca} .table-dark th,.table-dark td,.table-dark thead th,.table-dark tbody+tbody{border-color:#95999c} .table-hover .table-dark:hover{background-color:#b9bbbe} .table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe} .table-active,.table-active>th,.table-active>td{background-color:rgba(0,0,0,0.075)} .table-hover .table-active:hover{background-color:rgba(0,0,0,0.075)} .table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,0.075)} .table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55} .table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#d8d8d8} .table-dark{color:#fff;background-color:#343a40} .table-dark th,.table-dark td,.table-dark thead th{border-color:#454d55} .table-dark.table-bordered{border:0} .table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,0.05)} .table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,0.075)} @media(max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch} .table-responsive-sm>.table-bordered{border:0} } @media(max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch} .table-responsive-md>.table-bordered{border:0} } @media(max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch} .table-responsive-lg>.table-bordered{border:0} } @media(max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch} .table-responsive-xl>.table-bordered{border:0} } .table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch} .table-responsive>.table-bordered{border:0} .tempus-dominus-widget{list-style:none;padding:4px;width:19rem;border-radius:8px;display:none;z-index:9999;box-shadow:0 2px 6px 2px rgba(0,0,0,0.15)} .tempus-dominus-widget.calendarWeeks{width:21rem} .tempus-dominus-widget.calendarWeeks .date-container-days{grid-auto-columns:12.5%;grid-template-areas:'a a a a a a a a'} .tempus-dominus-widget [data-action]{cursor:pointer} .tempus-dominus-widget [data-action]::after{position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0,0,0,0) !important;white-space:nowrap !important;border:0 !important;content:attr(title)} .tempus-dominus-widget [data-action].disabled,.tempus-dominus-widget [data-action].disabled:hover{background:0;cursor:not-allowed} .tempus-dominus-widget .arrow{display:none} .tempus-dominus-widget.show{display:block} .tempus-dominus-widget.show.date-container{min-height:315px} .tempus-dominus-widget.show.time-container{min-height:217px} .tempus-dominus-widget .td-collapse:not(.show){display:none} .tempus-dominus-widget .td-collapsing{height:0;overflow:hidden;transition:height .35s ease} @media(min-width:576px){.tempus-dominus-widget.timepicker-sbs{width:38em} } @media(min-width:768px){.tempus-dominus-widget.timepicker-sbs{width:38em} } @media(min-width:992px){.tempus-dominus-widget.timepicker-sbs{width:38em} } .tempus-dominus-widget.timepicker-sbs .td-row{display:flex} .tempus-dominus-widget.timepicker-sbs .td-row .td-half{flex:0 0 auto;width:50%} .tempus-dominus-widget div[data-action]:active{box-shadow:none} .tempus-dominus-widget .timepicker-hour,.tempus-dominus-widget .timepicker-minute,.tempus-dominus-widget .timepicker-second{width:54px;font-weight:bold;font-size:1.2em;margin:0} .tempus-dominus-widget button[data-action]{padding:6px} .tempus-dominus-widget .toggleMeridiem{text-align:center;height:38px} .tempus-dominus-widget .calendar-header{display:grid;grid-template-areas:'a a a';margin-bottom:10px;font-weight:bold} .tempus-dominus-widget .calendar-header .next{text-align:right;padding-right:10px} .tempus-dominus-widget .calendar-header .previous{text-align:left;padding-left:10px} .tempus-dominus-widget .calendar-header .picker-switch{text-align:center} .tempus-dominus-widget .toolbar{display:grid;grid-auto-flow:column;grid-auto-rows:40px} .tempus-dominus-widget .toolbar div{border-radius:999px;align-items:center;justify-content:center;box-sizing:border-box;display:flex} .tempus-dominus-widget .date-container-days{display:grid;grid-template-areas:'a a a a a a a';grid-auto-rows:40px;grid-auto-columns:calc(100% / 7)} .tempus-dominus-widget .date-container-days .dow{align-items:center;justify-content:center;text-align:center} .tempus-dominus-widget .date-container-days .cw{width:90%;height:90%;align-items:center;justify-content:center;display:flex;font-size:.8em;line-height:20px;cursor:default} .tempus-dominus-widget .date-container-decades,.tempus-dominus-widget .date-container-years,.tempus-dominus-widget .date-container-months{display:grid;grid-template-areas:'a a a';grid-auto-rows:calc(calc(19rem - 2 * 4px) / 7)} .tempus-dominus-widget .time-container-hour,.tempus-dominus-widget .time-container-minute,.tempus-dominus-widget .time-container-second{display:grid;grid-template-areas:'a a a a';grid-auto-rows:calc(calc(19rem - 2 * 4px) / 7)} .tempus-dominus-widget .time-container-clock{display:grid;grid-auto-rows:calc(calc(19rem - 2 * 4px) / 7)} .tempus-dominus-widget .time-container-clock .no-highlight{width:90%;height:90%;align-items:center;justify-content:center;display:flex} .tempus-dominus-widget .date-container-decades div:not(.no-highlight),.tempus-dominus-widget .date-container-years div:not(.no-highlight),.tempus-dominus-widget .date-container-months div:not(.no-highlight),.tempus-dominus-widget .date-container-days div:not(.no-highlight),.tempus-dominus-widget .time-container-clock div:not(.no-highlight),.tempus-dominus-widget .time-container-hour div:not(.no-highlight),.tempus-dominus-widget .time-container-minute div:not(.no-highlight),.tempus-dominus-widget .time-container-second div:not(.no-highlight){width:90%;height:90%;border-radius:999px;align-items:center;justify-content:center;box-sizing:border-box;display:flex} .tempus-dominus-widget .date-container-decades div:not(.no-highlight).disabled,.tempus-dominus-widget .date-container-years div:not(.no-highlight).disabled,.tempus-dominus-widget .date-container-months div:not(.no-highlight).disabled,.tempus-dominus-widget .date-container-days div:not(.no-highlight).disabled,.tempus-dominus-widget .time-container-clock div:not(.no-highlight).disabled,.tempus-dominus-widget .time-container-hour div:not(.no-highlight).disabled,.tempus-dominus-widget .time-container-minute div:not(.no-highlight).disabled,.tempus-dominus-widget .time-container-second div:not(.no-highlight).disabled,.tempus-dominus-widget .date-container-decades div:not(.no-highlight).disabled:hover,.tempus-dominus-widget .date-container-years div:not(.no-highlight).disabled:hover,.tempus-dominus-widget .date-container-months div:not(.no-highlight).disabled:hover,.tempus-dominus-widget .date-container-days div:not(.no-highlight).disabled:hover,.tempus-dominus-widget .time-container-clock div:not(.no-highlight).disabled:hover,.tempus-dominus-widget .time-container-hour div:not(.no-highlight).disabled:hover,.tempus-dominus-widget .time-container-minute div:not(.no-highlight).disabled:hover,.tempus-dominus-widget .time-container-second div:not(.no-highlight).disabled:hover{background:0;cursor:not-allowed} .tempus-dominus-widget .date-container-decades div:not(.no-highlight).today,.tempus-dominus-widget .date-container-years div:not(.no-highlight).today,.tempus-dominus-widget .date-container-months div:not(.no-highlight).today,.tempus-dominus-widget .date-container-days div:not(.no-highlight).today,.tempus-dominus-widget .time-container-clock div:not(.no-highlight).today,.tempus-dominus-widget .time-container-hour div:not(.no-highlight).today,.tempus-dominus-widget .time-container-minute div:not(.no-highlight).today,.tempus-dominus-widget .time-container-second div:not(.no-highlight).today{position:relative} .tempus-dominus-widget .date-container-decades div:not(.no-highlight).today:before,.tempus-dominus-widget .date-container-years div:not(.no-highlight).today:before,.tempus-dominus-widget .date-container-months div:not(.no-highlight).today:before,.tempus-dominus-widget .date-container-days div:not(.no-highlight).today:before,.tempus-dominus-widget .time-container-clock div:not(.no-highlight).today:before,.tempus-dominus-widget .time-container-hour div:not(.no-highlight).today:before,.tempus-dominus-widget .time-container-minute div:not(.no-highlight).today:before,.tempus-dominus-widget .time-container-second div:not(.no-highlight).today:before{content:'';display:inline-block;border:solid transparent;border-width:0 0 7px 7px;position:absolute;bottom:6px;right:6px} .tempus-dominus-widget .time-container{margin-bottom:.5rem} .tempus-dominus-widget button{display:inline-block;font-weight:400;line-height:1.5;text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;padding:.375rem .75rem;font-size:1rem;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out} .tempus-dominus-widget.tempus-dominus-widget-readonly table td.day,.tempus-dominus-widget.tempus-dominus-widget-readonly table td.hour,.tempus-dominus-widget.tempus-dominus-widget-readonly table td.minute,.tempus-dominus-widget.tempus-dominus-widget-readonly table td.second,.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action='incrementHours'],.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action='incrementMinutes'],.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action='incrementSeconds'],.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action='decrementHours'],.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action='decrementMinutes'],.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action='decrementSeconds'],.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action='showHours'],.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action='showMinutes'],.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action='showSeconds'],.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action='togglePeriod']{pointer-events:none;cursor:default} .tempus-dominus-widget.tempus-dominus-widget-readonly table td.day:hover,.tempus-dominus-widget.tempus-dominus-widget-readonly table td.hour:hover,.tempus-dominus-widget.tempus-dominus-widget-readonly table td.minute:hover,.tempus-dominus-widget.tempus-dominus-widget-readonly table td.second:hover,.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action='incrementHours']:hover,.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action='incrementMinutes']:hover,.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action='incrementSeconds']:hover,.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action='decrementHours']:hover,.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action='decrementMinutes']:hover,.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action='decrementSeconds']:hover,.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action='showHours']:hover,.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action='showMinutes']:hover,.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action='showSeconds']:hover,.tempus-dominus-widget.tempus-dominus-widget-readonly table td [data-action='togglePeriod']:hover{background:0} .tempus-dominus-widget.light{color:#141414;background-color:#fff} .tempus-dominus-widget.light [data-action].disabled,.tempus-dominus-widget.light [data-action].disabled:hover{color:#767676} .tempus-dominus-widget.light .toolbar div:hover{background:#f4f4f2} .tempus-dominus-widget.light .date-container-days .dow{color:rgba(0,0,0,0.5)} .tempus-dominus-widget.light .date-container-days .cw{color:rgba(0,0,0,0.38)} .tempus-dominus-widget.light .date-container-decades div:not(.no-highlight):hover,.tempus-dominus-widget.light .date-container-years div:not(.no-highlight):hover,.tempus-dominus-widget.light .date-container-months div:not(.no-highlight):hover,.tempus-dominus-widget.light .date-container-days div:not(.no-highlight):hover,.tempus-dominus-widget.light .time-container-clock div:not(.no-highlight):hover,.tempus-dominus-widget.light .time-container-hour div:not(.no-highlight):hover,.tempus-dominus-widget.light .time-container-minute div:not(.no-highlight):hover,.tempus-dominus-widget.light .time-container-second div:not(.no-highlight):hover{background:#f4f4f2} .tempus-dominus-widget.light .date-container-decades div:not(.no-highlight).active,.tempus-dominus-widget.light .date-container-years div:not(.no-highlight).active,.tempus-dominus-widget.light .date-container-months div:not(.no-highlight).active,.tempus-dominus-widget.light .date-container-days div:not(.no-highlight).active,.tempus-dominus-widget.light .time-container-clock div:not(.no-highlight).active,.tempus-dominus-widget.light .time-container-hour div:not(.no-highlight).active,.tempus-dominus-widget.light .time-container-minute div:not(.no-highlight).active,.tempus-dominus-widget.light .time-container-second div:not(.no-highlight).active{background-color:#fa582d;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)} .tempus-dominus-widget.light .date-container-decades div:not(.no-highlight).active.old,.tempus-dominus-widget.light .date-container-years div:not(.no-highlight).active.old,.tempus-dominus-widget.light .date-container-months div:not(.no-highlight).active.old,.tempus-dominus-widget.light .date-container-days div:not(.no-highlight).active.old,.tempus-dominus-widget.light .time-container-clock div:not(.no-highlight).active.old,.tempus-dominus-widget.light .time-container-hour div:not(.no-highlight).active.old,.tempus-dominus-widget.light .time-container-minute div:not(.no-highlight).active.old,.tempus-dominus-widget.light .time-container-second div:not(.no-highlight).active.old,.tempus-dominus-widget.light .date-container-decades div:not(.no-highlight).active.new,.tempus-dominus-widget.light .date-container-years div:not(.no-highlight).active.new,.tempus-dominus-widget.light .date-container-months div:not(.no-highlight).active.new,.tempus-dominus-widget.light .date-container-days div:not(.no-highlight).active.new,.tempus-dominus-widget.light .time-container-clock div:not(.no-highlight).active.new,.tempus-dominus-widget.light .time-container-hour div:not(.no-highlight).active.new,.tempus-dominus-widget.light .time-container-minute div:not(.no-highlight).active.new,.tempus-dominus-widget.light .time-container-second div:not(.no-highlight).active.new{color:#fff} .tempus-dominus-widget.light .date-container-decades div:not(.no-highlight).active.today:before,.tempus-dominus-widget.light .date-container-years div:not(.no-highlight).active.today:before,.tempus-dominus-widget.light .date-container-months div:not(.no-highlight).active.today:before,.tempus-dominus-widget.light .date-container-days div:not(.no-highlight).active.today:before,.tempus-dominus-widget.light .time-container-clock div:not(.no-highlight).active.today:before,.tempus-dominus-widget.light .time-container-hour div:not(.no-highlight).active.today:before,.tempus-dominus-widget.light .time-container-minute div:not(.no-highlight).active.today:before,.tempus-dominus-widget.light .time-container-second div:not(.no-highlight).active.today:before{border-bottom-color:#fff} .tempus-dominus-widget.light .date-container-decades div:not(.no-highlight).old,.tempus-dominus-widget.light .date-container-years div:not(.no-highlight).old,.tempus-dominus-widget.light .date-container-months div:not(.no-highlight).old,.tempus-dominus-widget.light .date-container-days div:not(.no-highlight).old,.tempus-dominus-widget.light .time-container-clock div:not(.no-highlight).old,.tempus-dominus-widget.light .time-container-hour div:not(.no-highlight).old,.tempus-dominus-widget.light .time-container-minute div:not(.no-highlight).old,.tempus-dominus-widget.light .time-container-second div:not(.no-highlight).old,.tempus-dominus-widget.light .date-container-decades div:not(.no-highlight).new,.tempus-dominus-widget.light .date-container-years div:not(.no-highlight).new,.tempus-dominus-widget.light .date-container-months div:not(.no-highlight).new,.tempus-dominus-widget.light .date-container-days div:not(.no-highlight).new,.tempus-dominus-widget.light .time-container-clock div:not(.no-highlight).new,.tempus-dominus-widget.light .time-container-hour div:not(.no-highlight).new,.tempus-dominus-widget.light .time-container-minute div:not(.no-highlight).new,.tempus-dominus-widget.light .time-container-second div:not(.no-highlight).new{color:rgba(0,0,0,0.38)} .tempus-dominus-widget.light .date-container-decades div:not(.no-highlight).disabled,.tempus-dominus-widget.light .date-container-years div:not(.no-highlight).disabled,.tempus-dominus-widget.light .date-container-months div:not(.no-highlight).disabled,.tempus-dominus-widget.light .date-container-days div:not(.no-highlight).disabled,.tempus-dominus-widget.light .time-container-clock div:not(.no-highlight).disabled,.tempus-dominus-widget.light .time-container-hour div:not(.no-highlight).disabled,.tempus-dominus-widget.light .time-container-minute div:not(.no-highlight).disabled,.tempus-dominus-widget.light .time-container-second div:not(.no-highlight).disabled,.tempus-dominus-widget.light .date-container-decades div:not(.no-highlight).disabled:hover,.tempus-dominus-widget.light .date-container-years div:not(.no-highlight).disabled:hover,.tempus-dominus-widget.light .date-container-months div:not(.no-highlight).disabled:hover,.tempus-dominus-widget.light .date-container-days div:not(.no-highlight).disabled:hover,.tempus-dominus-widget.light .time-container-clock div:not(.no-highlight).disabled:hover,.tempus-dominus-widget.light .time-container-hour div:not(.no-highlight).disabled:hover,.tempus-dominus-widget.light .time-container-minute div:not(.no-highlight).disabled:hover,.tempus-dominus-widget.light .time-container-second div:not(.no-highlight).disabled:hover{color:#767676} .tempus-dominus-widget.light .date-container-decades div:not(.no-highlight).today:before,.tempus-dominus-widget.light .date-container-years div:not(.no-highlight).today:before,.tempus-dominus-widget.light .date-container-months div:not(.no-highlight).today:before,.tempus-dominus-widget.light .date-container-days div:not(.no-highlight).today:before,.tempus-dominus-widget.light .time-container-clock div:not(.no-highlight).today:before,.tempus-dominus-widget.light .time-container-hour div:not(.no-highlight).today:before,.tempus-dominus-widget.light .time-container-minute div:not(.no-highlight).today:before,.tempus-dominus-widget.light .time-container-second div:not(.no-highlight).today:before{border-bottom-color:#fa582d;border-top-color:rgba(0,0,0,0.2)} .tempus-dominus-widget.light button{color:#fff;background-color:#fa582d;border-color:#fa582d} .tempus-dominus-widget.dark{color:#d8d8d8;background-color:#141414} .tempus-dominus-widget.dark [data-action].disabled,.tempus-dominus-widget.dark [data-action].disabled:hover{color:#767676} .tempus-dominus-widget.dark .toolbar div:hover{background:#232627} .tempus-dominus-widget.dark .date-container-days .dow{color:rgba(232,230,227,0.5)} .tempus-dominus-widget.dark .date-container-days .cw{color:rgba(232,230,227,0.38)} .tempus-dominus-widget.dark .date-container-decades div:not(.no-highlight):hover,.tempus-dominus-widget.dark .date-container-years div:not(.no-highlight):hover,.tempus-dominus-widget.dark .date-container-months div:not(.no-highlight):hover,.tempus-dominus-widget.dark .date-container-days div:not(.no-highlight):hover,.tempus-dominus-widget.dark .time-container-clock div:not(.no-highlight):hover,.tempus-dominus-widget.dark .time-container-hour div:not(.no-highlight):hover,.tempus-dominus-widget.dark .time-container-minute div:not(.no-highlight):hover,.tempus-dominus-widget.dark .time-container-second div:not(.no-highlight):hover{background:#232627} .tempus-dominus-widget.dark .date-container-decades div:not(.no-highlight).active,.tempus-dominus-widget.dark .date-container-years div:not(.no-highlight).active,.tempus-dominus-widget.dark .date-container-months div:not(.no-highlight).active,.tempus-dominus-widget.dark .date-container-days div:not(.no-highlight).active,.tempus-dominus-widget.dark .time-container-clock div:not(.no-highlight).active,.tempus-dominus-widget.dark .time-container-hour div:not(.no-highlight).active,.tempus-dominus-widget.dark .time-container-minute div:not(.no-highlight).active,.tempus-dominus-widget.dark .time-container-second div:not(.no-highlight).active{background-color:#fa582d;color:#fff;text-shadow:0 -1px 0 rgba(232,230,227,0.25)} .tempus-dominus-widget.dark .date-container-decades div:not(.no-highlight).active.old,.tempus-dominus-widget.dark .date-container-years div:not(.no-highlight).active.old,.tempus-dominus-widget.dark .date-container-months div:not(.no-highlight).active.old,.tempus-dominus-widget.dark .date-container-days div:not(.no-highlight).active.old,.tempus-dominus-widget.dark .time-container-clock div:not(.no-highlight).active.old,.tempus-dominus-widget.dark .time-container-hour div:not(.no-highlight).active.old,.tempus-dominus-widget.dark .time-container-minute div:not(.no-highlight).active.old,.tempus-dominus-widget.dark .time-container-second div:not(.no-highlight).active.old,.tempus-dominus-widget.dark .date-container-decades div:not(.no-highlight).active.new,.tempus-dominus-widget.dark .date-container-years div:not(.no-highlight).active.new,.tempus-dominus-widget.dark .date-container-months div:not(.no-highlight).active.new,.tempus-dominus-widget.dark .date-container-days div:not(.no-highlight).active.new,.tempus-dominus-widget.dark .time-container-clock div:not(.no-highlight).active.new,.tempus-dominus-widget.dark .time-container-hour div:not(.no-highlight).active.new,.tempus-dominus-widget.dark .time-container-minute div:not(.no-highlight).active.new,.tempus-dominus-widget.dark .time-container-second div:not(.no-highlight).active.new{color:#fff} .tempus-dominus-widget.dark .date-container-decades div:not(.no-highlight).active.today:before,.tempus-dominus-widget.dark .date-container-years div:not(.no-highlight).active.today:before,.tempus-dominus-widget.dark .date-container-months div:not(.no-highlight).active.today:before,.tempus-dominus-widget.dark .date-container-days div:not(.no-highlight).active.today:before,.tempus-dominus-widget.dark .time-container-clock div:not(.no-highlight).active.today:before,.tempus-dominus-widget.dark .time-container-hour div:not(.no-highlight).active.today:before,.tempus-dominus-widget.dark .time-container-minute div:not(.no-highlight).active.today:before,.tempus-dominus-widget.dark .time-container-second div:not(.no-highlight).active.today:before{border-bottom-color:#141414} .tempus-dominus-widget.dark .date-container-decades div:not(.no-highlight).old,.tempus-dominus-widget.dark .date-container-years div:not(.no-highlight).old,.tempus-dominus-widget.dark .date-container-months div:not(.no-highlight).old,.tempus-dominus-widget.dark .date-container-days div:not(.no-highlight).old,.tempus-dominus-widget.dark .time-container-clock div:not(.no-highlight).old,.tempus-dominus-widget.dark .time-container-hour div:not(.no-highlight).old,.tempus-dominus-widget.dark .time-container-minute div:not(.no-highlight).old,.tempus-dominus-widget.dark .time-container-second div:not(.no-highlight).old,.tempus-dominus-widget.dark .date-container-decades div:not(.no-highlight).new,.tempus-dominus-widget.dark .date-container-years div:not(.no-highlight).new,.tempus-dominus-widget.dark .date-container-months div:not(.no-highlight).new,.tempus-dominus-widget.dark .date-container-days div:not(.no-highlight).new,.tempus-dominus-widget.dark .time-container-clock div:not(.no-highlight).new,.tempus-dominus-widget.dark .time-container-hour div:not(.no-highlight).new,.tempus-dominus-widget.dark .time-container-minute div:not(.no-highlight).new,.tempus-dominus-widget.dark .time-container-second div:not(.no-highlight).new{color:rgba(232,230,227,0.38)} .tempus-dominus-widget.dark .date-container-decades div:not(.no-highlight).disabled,.tempus-dominus-widget.dark .date-container-years div:not(.no-highlight).disabled,.tempus-dominus-widget.dark .date-container-months div:not(.no-highlight).disabled,.tempus-dominus-widget.dark .date-container-days div:not(.no-highlight).disabled,.tempus-dominus-widget.dark .time-container-clock div:not(.no-highlight).disabled,.tempus-dominus-widget.dark .time-container-hour div:not(.no-highlight).disabled,.tempus-dominus-widget.dark .time-container-minute div:not(.no-highlight).disabled,.tempus-dominus-widget.dark .time-container-second div:not(.no-highlight).disabled,.tempus-dominus-widget.dark .date-container-decades div:not(.no-highlight).disabled:hover,.tempus-dominus-widget.dark .date-container-years div:not(.no-highlight).disabled:hover,.tempus-dominus-widget.dark .date-container-months div:not(.no-highlight).disabled:hover,.tempus-dominus-widget.dark .date-container-days div:not(.no-highlight).disabled:hover,.tempus-dominus-widget.dark .time-container-clock div:not(.no-highlight).disabled:hover,.tempus-dominus-widget.dark .time-container-hour div:not(.no-highlight).disabled:hover,.tempus-dominus-widget.dark .time-container-minute div:not(.no-highlight).disabled:hover,.tempus-dominus-widget.dark .time-container-second div:not(.no-highlight).disabled:hover{color:#767676} .tempus-dominus-widget.dark .date-container-decades div:not(.no-highlight).today:before,.tempus-dominus-widget.dark .date-container-years div:not(.no-highlight).today:before,.tempus-dominus-widget.dark .date-container-months div:not(.no-highlight).today:before,.tempus-dominus-widget.dark .date-container-days div:not(.no-highlight).today:before,.tempus-dominus-widget.dark .time-container-clock div:not(.no-highlight).today:before,.tempus-dominus-widget.dark .time-container-hour div:not(.no-highlight).today:before,.tempus-dominus-widget.dark .time-container-minute div:not(.no-highlight).today:before,.tempus-dominus-widget.dark .time-container-second div:not(.no-highlight).today:before{border-bottom-color:#fa582d;border-top-color:rgba(232,230,227,0.2)} .tempus-dominus-widget.dark button{color:#fff;background-color:#fa582d;border-color:#fa582d} .glider-contain{width:100%;margin:0 auto;position:relative} .glider-wrapper{width:100%} .glider-wrapper:not(.glider){display:flex;flex-wrap:nowrap;overflow:hidden} .glider-wrapper:not(.glider)>div{flex-grow:0;flex-shrink:0;flex-basis:auto} .glider{margin:0 auto;position:relative;overflow-y:hidden;-webkit-overflow-scrolling:touch;-ms-overflow-style:none;transform:translateZ(0)} .glider-track{transform:translateZ(0);width:100%;margin:0;padding:0;display:flex;z-index:1} .glider.draggable{user-select:none;cursor:-webkit-grab;cursor:grab} .glider.draggable .glider-slide img{user-select:none;pointer-events:none} .glider.drag{cursor:-webkit-grabbing;cursor:grabbing} .glider-slide{user-select:none;justify-content:center;align-content:center;width:100%;position:relative} .glider-slide img{max-width:100%} .glider::-webkit-scrollbar,.glider-wrapper::-webkit-scrollbar{opacity:0;height:0} .glider-contain.scrollbar{position:relative} .glider-contain.scrollbar .glider-wrapper{padding-bottom:45px} .glider-contain.scrollbar .glider-wrapper::-webkit-scrollbar{-webkit-appearance:none;opacity:1;width:7px;height:2px;background-color:#fff} .glider-contain.scrollbar .glider-wrapper::-webkit-scrollbar-track{background-color:#b9b9b9} .glider-contain.scrollbar .glider-wrapper::-webkit-scrollbar-thumb{background-color:#fa582d} [data-type="strata"] .glider-contain.scrollbar .glider-wrapper::-webkit-scrollbar-thumb{background-color:#ffcb06} [data-type="prisma"] .glider-contain.scrollbar .glider-wrapper::-webkit-scrollbar-thumb{background-color:#00c0e8} [data-type="cortex"] .glider-contain.scrollbar .glider-wrapper::-webkit-scrollbar-thumb,[data-type="prismaCloudReBrand"] .glider-contain.scrollbar .glider-wrapper::-webkit-scrollbar-thumb{background-color:#0c6} [data-type="unit42"] .glider-contain.scrollbar .glider-wrapper::-webkit-scrollbar-thumb{background-color:#c84727} .glider-contain.scrollbar[data-scrollbar="black"] .glider-wrapper::-webkit-scrollbar-thumb{background-color:#141414} .glider-contain.scrollbar[data-scrollbar="white"] .glider-wrapper::-webkit-scrollbar-thumb{background-color:#fff} .glider-contain.fake-scrollbar{position:relative} .glider-contain.fake-scrollbar .glider-wrapper{padding-bottom:45px} .glider-contain.fake-scrollbar .scrollbar{display:flex;position:absolute;left:0;right:7.14285714vw;bottom:0;height:2px;background-color:#b9b9b9;overflow:hidden} .glider-contain.fake-scrollbar .scrollbar .glider-dot{flex-grow:1;flex-shrink:1;flex-basis:0;height:2px;width:auto;min-width:auto;max-width:none;margin:0;padding:0;position:relative} .glider-contain.fake-scrollbar .scrollbar .glider-dot:before{position:absolute;top:0;left:0} .glider-contain.fake-scrollbar .scrollbar .glider-dot.active:before{background-color:#fa582d} [data-type="strata"] .glider-contain.fake-scrollbar .scrollbar .glider-dot.active:before{background-color:#ffcb06} [data-type="prisma"] .glider-contain.fake-scrollbar .scrollbar .glider-dot.active:before{background-color:#00c0e8} [data-type="cortex"] .glider-contain.fake-scrollbar .scrollbar .glider-dot.active:before,[data-type="prismaCloudReBrand"] .glider-contain.fake-scrollbar .scrollbar .glider-dot.active:before{background-color:#0c6} [data-type="unit42"] .glider-contain.fake-scrollbar .scrollbar .glider-dot.active:before{background-color:#c84727} @media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.glider-contain.scrollbar:after{content:'';position:absolute;left:-1px;right:-1px;bottom:0;height:14px;background-color:#fff} .glider-contain.scrollbar .glider{-ms-overflow-style:scrollbar;scrollbar-base-color:#fff;scrollbar-face-color:#fa582d;scrollbar-3dlight-color:transparent;scrollbar-highlight-color:transparent;scrollbar-track-color:#b9b9b9;scrollbar-arrow-color:#b9b9b9;scrollbar-shadow-color:#fa582d} [data-type="strata"] .glider-contain.scrollbar .glider{scrollbar-face-color:#ffcb06;scrollbar-shadow-color:#ffcb06} [data-type="prisma"] .glider-contain.scrollbar .glider{scrollbar-face-color:#00c0e8;scrollbar-shadow-color:#00c0e8} [data-type="cortex"] .glider-contain.scrollbar .glider,[data-type="prismaCloudReBrand"] .glider-contain.scrollbar .glider{scrollbar-face-color:#0c6;scrollbar-shadow-color:#0c6} [data-type="unit42"] .glider-contain.scrollbar .glider{scrollbar-face-color:#c84727;scrollbar-shadow-color:#c84727} .glider-contain.scrollbar[data-scrollbar="white"] .glider{scrollbar-face-color:#fff;scrollbar-shadow-color:#fff} .glider-contain.scrollbar[data-scrollbar="black"] .glider{scrollbar-face-color:#141414;scrollbar-shadow-color:#141414} } @-moz-document url-prefix(){.glider{scrollbar-width:none} .glider-contain.scrollbar:after{content:'';position:absolute;left:0;right:0;bottom:0;height:6px;background-color:#fff} .glider-contain.scrollbar .glider{scrollbar-color:#fa582d #b9b9b9;scrollbar-width:thin} [data-type="strata"] .glider-contain.scrollbar .glider{scrollbar-color:#ffcb06 #b9b9b9} [data-type="prisma"] .glider-contain.scrollbar .glider{scrollbar-color:#00c0e8 #b9b9b9} [data-type="cortex"] .glider-contain.scrollbar .glider,[data-type="prismaCloudReBrand"] .glider-contain.scrollbar .glider{scrollbar-color:#0c6 #b9b9b9} [data-type="unit42"] .glider-contain.scrollbar .glider{scrollbar-color:#c84727 #b9b9b9} .glider-contain.scrollbar[data-scrollbar="white"] .glider{scrollbar-color:#fff} .glider-contain.scrollbar[data-scrollbar="black"] .glider{scrollbar-color:#141414} } .glider-prev,.glider-next{position:absolute;top:50%;width:50px;height:50px;border-radius:50px;z-index:10;cursor:pointer;display:flex;align-items:center;justify-content:center;background-size:24px 24px;background-position:center;background-repeat:no-repeat;border:2px solid #fa582d;background-color:#fa582d} .glider-prev:hover,.glider-next:hover{border-color:#fa582d;background-color:#fff} .glider-prev.glider-button-white.glider-button-white,.glider-next.glider-button-white.glider-button-white{border-color:#fff;background-color:transparent} .glider-prev.glider-button-white.glider-button-white:hover,.glider-next.glider-button-white.glider-button-white:hover{background-color:#fff} .glider-prev.glider-button-black.glider-button-black,.glider-next.glider-button-black.glider-button-black{border-color:#141414;background-color:#fff} .glider-prev.glider-button-black.glider-button-black:hover,.glider-next.glider-button-black.glider-button-black:hover{border-color:#141414;background-color:#141414} .glider-prev.disabled,.glider-next.disabled{opacity:.5;cursor:auto;pointer-events:none} .glider-prev:focus,.glider-next:focus{outline:0;box-shadow:0 0 0 3px rgba(250,88,45,0.5)} .glider-prev{left:15px;right:auto;background-image:url('/etc/clientlibs/cleangb/imgs/chevron-left-black.svg')} .glider-prev:hover{background-image:url('/etc/clientlibs/cleangb/imgs/chevron-left-black.svg')} .glider-prev.glider-button-white.glider-button-white{background-image:url('/etc/clientlibs/cleangb/imgs/chevron-left-white.svg')} .glider-prev.glider-button-white.glider-button-white:hover{background-image:url('/etc/clientlibs/cleangb/imgs/chevron-left-black.svg')} .glider-prev.glider-button-black.glider-button-black{background-image:url('/etc/clientlibs/cleangb/imgs/chevron-left-black.svg')} .glider-prev.glider-button-black.glider-button-black:hover{background-image:url('/etc/clientlibs/cleangb/imgs/chevron-left-white.svg')} .glider-next{right:15px;left:auto;background-image:url('/etc/clientlibs/cleangb/imgs/chevron-right-black.svg')} .glider-next:hover{background-image:url('/etc/clientlibs/cleangb/imgs/chevron-right-black.svg')} .glider-next.glider-button-white.glider-button-white{background-image:url('/etc/clientlibs/cleangb/imgs/chevron-right-white.svg')} .glider-next.glider-button-white.glider-button-white:hover{background-image:url('/etc/clientlibs/cleangb/imgs/chevron-right-black.svg')} .glider-next.glider-button-black.glider-button-black{background-image:url('/etc/clientlibs/cleangb/imgs/chevron-right-black.svg')} .glider-next.glider-button-black.glider-button-black:hover{background-image:url('/etc/clientlibs/cleangb/imgs/chevron-right-white.svg')} [data-type="strata"] .glider-prev,[data-type="strata"] .glider-next{background-color:#ffcb06;border-color:#ffcb06} [data-type="strata"] .glider-prev:focus,[data-type="strata"] .glider-next:focus{box-shadow:0 0 0 3px rgba(255,203,6,0.5)} [data-type="strata"] .glider-prev{background-image:url('/etc/clientlibs/cleangb/imgs/chevron-left-black.svg')} [data-type="strata"] .glider-prev:hover{background-color:#fff;background-image:url('/etc/clientlibs/cleangb/imgs/chevron-left-black.svg')} [data-type="strata"] .glider-next{background-image:url('/etc/clientlibs/cleangb/imgs/chevron-right-black.svg')} [data-type="strata"] .glider-next:hover{background-color:#fff;background-image:url('/etc/clientlibs/cleangb/imgs/chevron-right-black.svg')} [data-type="prisma"] .glider-prev,[data-type="prisma"] .glider-next{background-color:#00c0e8;border-color:#00c0e8} [data-type="prisma"] .glider-prev:focus,[data-type="prisma"] .glider-next:focus{box-shadow:0 0 0 3px rgba(0,192,232,0.5)} [data-type="prisma"] .glider-prev{background-image:url('/etc/clientlibs/cleangb/imgs/chevron-left-black.svg')} [data-type="prisma"] .glider-prev:hover{background-color:#fff;background-image:url('/etc/clientlibs/cleangb/imgs/chevron-left-black.svg')} [data-type="prisma"] .glider-next{background-image:url('/etc/clientlibs/cleangb/imgs/chevron-right-black.svg')} [data-type="prisma"] .glider-next:hover{background-color:#fff;background-image:url('/etc/clientlibs/cleangb/imgs/chevron-right-black.svg')} [data-type="cortex"] .glider-prev,[data-type="prismaCloudReBrand"] .glider-prev,[data-type="cortex"] .glider-next,[data-type="prismaCloudReBrand"] .glider-next{background-color:#0c6;border-color:#0c6} [data-type="cortex"] .glider-prev:focus,[data-type="prismaCloudReBrand"] .glider-prev:focus,[data-type="cortex"] .glider-next:focus,[data-type="prismaCloudReBrand"] .glider-next:focus{box-shadow:0 0 0 3px rgba(0,204,102,0.5)} [data-type="cortex"] .glider-prev,[data-type="prismaCloudReBrand"] .glider-prev{background-image:url('/etc/clientlibs/cleangb/imgs/chevron-left-black.svg')} [data-type="cortex"] .glider-prev:hover,[data-type="prismaCloudReBrand"] .glider-prev:hover{background-color:#fff;background-image:url('/etc/clientlibs/cleangb/imgs/chevron-left-black.svg')} [data-type="cortex"] .glider-next,[data-type="prismaCloudReBrand"] .glider-next{background-image:url('/etc/clientlibs/cleangb/imgs/chevron-right-black.svg')} [data-type="cortex"] .glider-next:hover,[data-type="prismaCloudReBrand"] .glider-next:hover{background-color:#fff;background-image:url('/etc/clientlibs/cleangb/imgs/chevron-right-black.svg')} [data-type="unit42"] .glider-prev,[data-type="unit42"] .glider-next{background-color:#c84727;border-color:#c84727} [data-type="unit42"] .glider-prev:focus,[data-type="unit42"] .glider-next:focus{box-shadow:0 0 0 3px #c84727} [data-type="unit42"] .glider-prev{background-image:url('/etc/clientlibs/cleangb/imgs/chevron-left-black.svg')} [data-type="unit42"] .glider-prev:hover{background-color:#fff;background-image:url('/etc/clientlibs/cleangb/imgs/chevron-left-black.svg')} [data-type="unit42"] .glider-next{background-image:url('/etc/clientlibs/cleangb/imgs/chevron-right-black.svg')} [data-type="unit42"] .glider-next:hover{background-color:#fff;background-image:url('/etc/clientlibs/cleangb/imgs/chevron-right-black.svg')} .glider-slide{min-width:150px} .glider-hide{opacity:0} .glider-pagination{position:absolute;text-align:center;transition:300ms opacity;transform:translate3d(0,0,0);z-index:10} .glider-dots{user-select:none;display:flex;flex-wrap:wrap;justify-content:center;margin:0 auto;padding:0} .glider-dot{border:0;margin:0;padding:0;box-shadow:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;flex-shrink:0;flex-grow:1;flex-basis:auto;display:inline-block;margin:0 15px;padding:9px 0;background:0;position:relative;color:#767676;overflow:hidden;font-weight:600;font-size:14px;transition:flex .25s ease-in-out} .glider-dot:focus{outline:0} .glider-dot.active{flex-grow:2;opacity:1;color:#141414} [data-type="strata"] .glider-dots:not(.animate-glider-dots) .glider-dot.active:before{background-color:#ffcb06} [data-type="strata"] .glider-dots:not(.animate-glider-dots) .glider-dot:focus{box-shadow:0 0 0 3px rgba(255,203,6,0.5)} [data-type="strata"] .glider-dots.animate-glider-dots .glider-dot.active>span>span{background-color:#ffcb06} [data-type="strata"] .glider-dots.animate-glider-dots .glider-dot:focus{box-shadow:0 0 0 3px rgba(255,203,6,0.5)} [data-type="prisma"] .glider-dots:not(.animate-glider-dots) .glider-dot.active:before{background-color:#00c0e8} [data-type="prisma"] .glider-dots:not(.animate-glider-dots) .glider-dot:focus{box-shadow:0 0 0 3px rgba(0,192,232,0.5)} [data-type="prisma"] .glider-dots.animate-glider-dots .glider-dot.active>span>span{background-color:#00c0e8} [data-type="prisma"] .glider-dots.animate-glider-dots .glider-dot:focus{box-shadow:0 0 0 3px rgba(0,192,232,0.5)} [data-type="cortex"] .glider-dots:not(.animate-glider-dots) .glider-dot.active:before,[data-type="prismaCloudReBrand"] .glider-dots:not(.animate-glider-dots) .glider-dot.active:before{background-color:#0c6} [data-type="cortex"] .glider-dots:not(.animate-glider-dots) .glider-dot:focus,[data-type="prismaCloudReBrand"] .glider-dots:not(.animate-glider-dots) .glider-dot:focus{box-shadow:0 0 0 3px rgba(0,204,102,0.5)} [data-type="cortex"] .glider-dots.animate-glider-dots .glider-dot.active>span>span,[data-type="prismaCloudReBrand"] .glider-dots.animate-glider-dots .glider-dot.active>span>span{background-color:#0c6} [data-type="cortex"] .glider-dots.animate-glider-dots .glider-dot:focus,[data-type="prismaCloudReBrand"] .glider-dots.animate-glider-dots .glider-dot:focus{box-shadow:0 0 0 3px rgba(0,204,102,0.5)} [data-type="unit42"] .glider-dots:not(.animate-glider-dots) .glider-dot.active:before{background-color:#c84727} [data-type="unit42"] .glider-dots:not(.animate-glider-dots) .glider-dot:focus{box-shadow:0 0 0 3px rgba(200,71,39,0.5)} [data-type="unit42"] .glider-dots.animate-glider-dots .glider-dot.active>span>span{background-color:#c84727} [data-type="unit42"] .glider-dots.animate-glider-dots .glider-dot:focus{box-shadow:0 0 0 3px rgba(200,71,39,0.5)} [data-type="black"] .glider-dots:not(.animate-glider-dots) .glider-dot.active:before{background-color:#141414} [data-type="black"] .glider-dots:not(.animate-glider-dots) .glider-dot:focus{box-shadow:0 0 0 3px rgba(0,0,0,0.5)} [data-type="black"] .glider-dots.animate-glider-dots .glider-dot.active>span>span{background-color:#141414} [data-type="black"] .glider-dots.animate-glider-dots .glider-dot:focus{box-shadow:0 0 0 3px rgba(0,0,0,0.5)} [data-type="white"] .glider-dots:not(.animate-glider-dots) .glider-dot.active:before{background-color:#fff} [data-type="white"] .glider-dots:not(.animate-glider-dots) .glider-dot:focus{box-shadow:0 0 0 3px rgba(255,255,255,0.5)} [data-type="white"] .glider-dots.animate-glider-dots .glider-dot.active>span>span{background-color:#fff} [data-type="white"] .glider-dots.animate-glider-dots .glider-dot:focus{box-shadow:0 0 0 3px rgba(255,255,255,0.5)} .glider-dots:not(.animate-glider-dots) .glider-dot:before{content:'';display:inline-block;width:100%;height:2px;background-color:#b9b9b9} .glider-dots:not(.animate-glider-dots) .glider-dot.active:before{background-color:#fa582d} .glider-dots:not(.animate-glider-dots) .glider-dot:focus{box-shadow:0 0 0 3px rgba(250,88,45,0.5)} .glider-dots:not(.animate-glider-dots) .glider-dot[data-type="default"].active:before,.glider-dots:not(.animate-glider-dots) .glider-dot[data-type="paloaltonetworks"].active:before{background-color:#fa582d !important} .glider-dots:not(.animate-glider-dots) .glider-dot[data-type="default"]:focus,.glider-dots:not(.animate-glider-dots) .glider-dot[data-type="paloaltonetworks"]:focus{box-shadow:0 0 0 3px rgba(250,88,45,0.5) !important} .glider-dots:not(.animate-glider-dots) .glider-dot[data-type="strata"].active:before{background-color:#ffcb06 !important} .glider-dots:not(.animate-glider-dots) .glider-dot[data-type="strata"]:focus{box-shadow:0 0 0 3px rgba(255,203,6,0.5) !important} .glider-dots:not(.animate-glider-dots) .glider-dot[data-type="prisma"].active:before{background-color:#00c0e8 !important} .glider-dots:not(.animate-glider-dots) .glider-dot[data-type="prisma"]:focus{box-shadow:0 0 0 3px rgba(0,192,232,0.5) !important} .glider-dots:not(.animate-glider-dots) .glider-dot[data-type="cortex"].active:before,.glider-dots:not(.animate-glider-dots) .glider-dot[data-type="prismaCloudReBrand"].active:before{background-color:#0c6 !important} .glider-dots:not(.animate-glider-dots) .glider-dot[data-type="cortex"]:focus,.glider-dots:not(.animate-glider-dots) .glider-dot[data-type="prismaCloudReBrand"]:focus{box-shadow:0 0 0 3px rgba(0,204,102,0.5) !important} .glider-dots:not(.animate-glider-dots) .glider-dot[data-type="unit42"].active:before{background-color:#c84727 !important} .glider-dots:not(.animate-glider-dots) .glider-dot[data-type="unit42"]:focus{box-shadow:0 0 0 3px rgba(200,71,39,0.5) !important} .glider-dots.animate-glider-dots .glider-dot>span{flex-grow:0;flex-shrink:0;flex-basis:auto;display:inline-block;position:relative;width:100%;height:2px;background-color:#b9b9b9;overflow:hidden} .glider-dots.animate-glider-dots .glider-dot>span>span{position:absolute;height:2px;top:0;left:0;width:100%;left:-100%;background-color:transparent;will-change:transform;transition:transform 5s linear} .glider-dots.animate-glider-dots .glider-dot.active>span>span{background-color:#fa582d} .glider-dots.animate-glider-dots .glider-dot:focus{box-shadow:0 0 0 3px rgba(250,88,45,0.5)} .glider-dots.animate-glider-dots .glider-dot[data-type="default"].active>span>span,.glider-dots.animate-glider-dots .glider-dot[data-type="paloaltonetworks"].active>span>span{background-color:#fa582d !important} .glider-dots.animate-glider-dots .glider-dot[data-type="default"]:focus,.glider-dots.animate-glider-dots .glider-dot[data-type="paloaltonetworks"]:focus{box-shadow:0 0 0 3px rgba(250,88,45,0.5)} .glider-dots.animate-glider-dots .glider-dot[data-type="strata"].active>span>span{background-color:#ffcb06 !important} .glider-dots.animate-glider-dots .glider-dot[data-type="strata"]:focus{box-shadow:0 0 0 3px rgba(255,203,6,0.5)} .glider-dots.animate-glider-dots .glider-dot[data-type="prisma"].active>span>span{background-color:#00c0e8 !important} .glider-dots.animate-glider-dots .glider-dot[data-type="prisma"]:focus{box-shadow:0 0 0 3px rgba(0,192,232,0.5)} .glider-dots.animate-glider-dots .glider-dot[data-type="cortex"].active>span>span,.glider-dots.animate-glider-dots .glider-dot[data-type="prismaCloudReBrand"].active>span>span{background-color:#0c6 !important} .glider-dots.animate-glider-dots .glider-dot[data-type="cortex"]:focus,.glider-dots.animate-glider-dots .glider-dot[data-type="prismaCloudReBrand"]:focus{box-shadow:0 0 0 3px rgba(0,204,102,0.5)} .glider-dots.animate-glider-dots .glider-dot[data-type="unit42"].active>span>span{background-color:#c84727 !important} .glider-dots.animate-glider-dots .glider-dot[data-type="unit42"]:focus{box-shadow:0 0 0 3px rgba(200,71,39,0.5)} .glider-dots.animate-glider-dots .glider-dot[data-type="black"].active>span>span{background-color:#141414 !important} .glider-dots.animate-glider-dots .glider-dot[data-type="black"]:focus{box-shadow:0 0 0 3px rgba(0,0,0,0.5)} .glider-dots.animate-glider-dots .glider-dot[data-type="white"].active>span>span{background-color:#fff !important} .glider-dots.animate-glider-dots .glider-dot[data-type="white"]:focus{box-shadow:0 0 0 3px rgba(255,255,255,0.5)} h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6,.h7,.h8{font-family:TT Hoves,Arial,"Helvetica Neue",Helvetica,sans-serif;font-weight:500;color:#141414} h1.quote-text-type,h2.quote-text-type,h3.quote-text-type,h4.quote-text-type,h5.quote-text-type,h6.quote-text-type,.h1.quote-text-type,.h2.quote-text-type,.h3.quote-text-type,.h4.quote-text-type,.h5.quote-text-type,.h6.quote-text-type,.h7.quote-text-type,.h8.quote-text-type{font-family:CelestePro,Georgia,serif;font-weight:400} h1,.h1{font-size:2rem;line-height:120%} h2,.h2{font-size:1.75rem;line-height:120%} h3,.h3{font-size:1.5rem;line-height:120%} h4,.h4{font-size:1.375rem;line-height:130%} h5,.h5{font-size:1.25rem;line-height:140%} h6,.h6{font-size:1.125rem;line-height:140%} .h7{font-size:1rem;line-height:140%} .h8{font-size:1rem;line-height:140%} .nav-headline,.nav-subheader,.nav-list{font-family:TT Hoves,Arial,"Helvetica Neue",Helvetica,sans-serif;color:#141414;line-height:140%;letter-spacing:.02rem} .nav-headline{font-size:1rem;font-weight:600} .nav-subheader,.nav-list{font-size:.75rem} .nav-subheader{font-weight:600} .nav-list{font-weight:500} .eyebrow{text-transform:uppercase;font-family:TT Hoves,Arial,"Helvetica Neue",Helvetica,sans-serif;font-weight:600;color:#141414;font-size:1.023rem;line-height:140%} .lead{font-family:TT Hoves,Arial,"Helvetica Neue",Helvetica,sans-serif;font-weight:500;color:#141414;font-size:1.023rem;line-height:140%} .lead-2{font-family:TT Hoves,Arial,"Helvetica Neue",Helvetica,sans-serif;font-weight:600;color:#5f5f5f;font-size:1.17rem;line-height:140%;margin-bottom:16px} .display-0{font-family:CelestePro,Georgia,serif;font-weight:400;color:#5f5f5f;font-size:1.755rem;line-height:120%} .display-1{font-family:CelestePro,Georgia,serif;font-weight:400;color:#5f5f5f;font-size:1.02375rem;line-height:120%} .display-2{font-family:CelestePro,Georgia,serif;font-weight:400;color:#5f5f5f;font-size:1.02375rem;line-height:120%} .display-3{font-family:CelestePro,Georgia,serif;font-weight:400;color:#5f5f5f;font-size:.8775rem;line-height:120%} .quote-1{font-family:CelestePro,Georgia,serif;font-weight:300;color:#5f5f5f;font-size:2.34;line-height:1.25em} .quote-2{font-family:CelestePro,Georgia,serif;font-weight:300;color:#5f5f5f;font-size:20px;line-height:1.3em} .quote-3{font-family:CelestePro,Georgia,serif;font-weight:300;color:#5f5f5f;font-size:1.974375rem;line-height:1.40740741em} hr{margin-top:15px;margin-bottom:15px;border:0;border-top:1px solid #b9b9b9} .btn{font-family:TT Hoves,Arial,"Helvetica Neue",Helvetica,sans-serif;font-weight:600;line-height:140%;letter-spacing:.02rem} .btn.video{letter-spacing:0rem} small,.small{font-size:80%;font-weight:400} mark,.mark{padding:.2em;background-color:#fcf8e3} .list-unstyled{padding-left:0;list-style:none} .list-inline{padding-left:0;list-style:none} .list-inline-item{display:inline-block} .list-inline-item:not(:last-child){margin-right:.5rem} .initialism{font-size:90%;text-transform:uppercase} .blockquote{margin:0;padding-top:50px;position:relative} .blockquote:before{content:'';display:block;position:absolute;top:0;left:0;width:34px;height:24px;background-size:contain;background-repeat:no-repeat;background-position:center;background-image:url('/etc/clientlibs/cleangb/imgs/quote-orange.svg')} .blockquote p{margin-bottom:30px} .blockquote-footer{display:block;color:#5f5f5f} .label-3{font-family:TT Hoves,Arial,"Helvetica Neue",Helvetica,sans-serif;color:#141414;font-weight:600;font-size:.75rem;line-height:140%} .text-400{font-weight:400} .body-serif-1,.body-serif-4{font-family:CelestePro,Georgia,serif;color:#141414;line-height:120%} .body-serif-4{font-size:.875rem} .glider-dot{font-family:TT Hoves,Arial,"Helvetica Neue",Helvetica,sans-serif} [data-type="strata"] .blockquote:before{background-image:url('/etc/clientlibs/cleangb/imgs/quote-yellow.svg')} [data-type="prisma"] .blockquote:before{background-image:url('/etc/clientlibs/cleangb/imgs/quote-blue.svg')} [data-type="cortex"] .blockquote:before{background-image:url('/etc/clientlibs/cleangb/imgs/quote-green.svg')} [data-type="unit42"] .blockquote:before{background-image:url('/etc/clientlibs/cleangb/imgs/quote-maroon.svg')} @media(min-width:320px){h1,.h1{font-size:2rem} h2,.h2{font-size:1.75rem} h3,.h3{font-size:1.5rem} h4,.h4{font-size:1.375rem} h5,.h5{font-size:1.25rem} h6,.h6{font-size:1.125rem} .h7{font-size:1rem} .h8{font-size:1rem} } @media(min-width:375px){h1,.h1{font-size:3.1865625rem;font-size:clamp(3.1865625rem,1vw,3.540625rem);min-height:0vw} h2,.h2{font-size:1.7142rem;font-size:clamp(1.7142rem,1vw,2.928425rem);min-height:0vw} h3,.h3{font-size:1.40625rem;font-size:clamp(1.40625rem,1vw,2.53125rem);min-height:0vw} h4,.h4{font-size:1.475rem;font-size:clamp(1.475rem,1vw,1.77rem);min-height:0vw} h5,.h5{font-size:1.7142rem;font-size:clamp(1.7142rem,1vw,2.928425rem);min-height:0vw} h5,.h5{font-size:1.133rem;font-size:clamp(1.133rem,1vw,1.274625rem);min-height:0vw} h6,.h6,.h7,.h8{font-size:.98175rem;font-size:clamp(0.98175rem,1vw,1.122rem);min-height:0vw} .quote-1{font-size:8.535vw} .quote-2{font-size:5.335vw} .quote-3{font-size:7.2vw} } @media(min-width:576px){.quote-1{font-size:7.2vw} .quote-2{font-size:4.7vw} .quote-3{font-size:6.2vw} } @media(min-width:768px){h1,.h1{font-size:3.540625rem;line-height:1.16666667em} h2,.h2{font-size:2.928425rem;line-height:1.07142857em} h3,.h3{font-size:2.53125rem;line-height:1.16666667em} h4,.h4{font-size:1.77rem;line-height:1.3333333} h5,.h5{font-size:1.274625rem} h6,.h6{font-size:1.122rem} .h7{font-size:1rem} .h8{font-size:1rem} .nav-headline{font-size:1rem} .nav-subheader,.nav-list{font-size:.75rem} .eyebrow{font-size:16px;line-height:24px} .lead{font-size:1.75rem;line-height:130%} .display-1{font-size:1.17rem;line-height:140%} .quote-1{font-size:5.818vw} .quote-2{font-size:4.01265vw} .quote-3{font-size:4.6125vw} .blockquote{padding-top:85px} .blockquote:before{width:52px;height:38px} .blockquote p{margin-bottom:50px} .cleanDynamicFooter .mega-footer .columns{flex-direction:row} } @media(min-width:992px){.quote-1{font-size:4.436vw} .quote-2{font-size:3.3253vw} .quote-3{font-size:3.025vw} .nav-headline{font-size:1.025rem} .nav-subheader,.nav-list{font-size:.775rem} } @media(min-width:1200px){.quote-1{font-size:2.918vw;line-height:1.35714286em} .quote-2{font-size:2.396vw;line-height:1.30434783em} .quote-3{font-size:1.667vw;line-height:1.375em} .nav-headline{font-size:1.05rem} .nav-subheader,.nav-list{font-size:.8rem} .body-serif-1,.body-serif-4{line-height:150%} .body-serif-1{font-size:1.2rem} .body-serif-4{font-size:.975rem} .label-3{font-size:.8rem} } @media(min-width:1400px){h1,.h1{font-size:3.540625rem;font-size:clamp(3.540625rem,calc(2.928425rem + 0.0479 * (100vw - 1400px)),5.0985rem)} h2,.h2{font-size:2.99985rem;font-size:clamp(2.99985rem,calc(2.99985rem + 0.0308 * (100vw - 1400px)),3.9998rem)} h3,.h3{font-size:2.53125rem;font-size:clamp(2.53125rem,calc(2.53125rem + 0.0260 * (100vw - 1400px)),3.375rem)} h4,.h4{font-size:1.77rem;font-size:clamp(1.77rem,calc(1.77rem + 0.0272 * (100vw - 1400px)),2.655rem)} h5,.h5{font-size:1.274625rem;font-size:clamp(1.274625rem,calc(1.274625rem + 0.0131 * (100vw - 1400px)),1.6995rem)} h6,.h6{font-size:1.122rem;font-size:clamp(1.122rem,calc(1.122rem + 0.0043 * (100vw - 1400px)),1.26225rem)} .nav-headline{font-size:1.075rem} .nav-subheader,.nav-list{font-size:.825rem} } @media(min-width:1400px){.nav-headline{font-size:1.1rem} .nav-subheader,.nav-list{font-size:.85rem} } @media(min-width:1920px){h1,.h1{font-size:81.6px} h2,.h2{font-size:64px} h3,.h3{font-size:54.4px} h4,.h4{font-size:38.4px} h5,.h5{font-size:27.2px} h6,.h6{font-size:20.8px} .h7{font-size:19.2px} .h8{font-size:19.2px} .quote-1{font-size:56px} .quote-2{font-size:46px} .quote-3{font-size:32px} .nav-headline{font-size:1.125rem} .nav-subheader,.nav-list{font-size:.875rem} .label-3{font-size:.875rem} .body-serif-4{font-size:1.125rem} } .panClean .cleanDynamicFooter{margin-top:0} .panClean .title-brand .eyebrow{display:inline-block;position:relative} .panClean .title-brand .eyebrow:before{content:'';position:absolute;top:0;left:0;height:5px;width:35px;background-color:#fa582d} .panClean .title-brand .mega-eyebrow{display:inline-block;position:relative} .panClean .title-brand .mega-eyebrow::before{content:'';position:absolute;top:0;left:0;height:8px;background-color:#fa582d} .panClean .title-brand .eyebrow.empty-eyebrow,.panClean .title-brand .mega-eyebrow.empty-eyebrow{padding-top:0} .panClean .title-brand .eyebrow.no-show-eyebrow::before,.panClean .title-brand .mega-eyebrow.no-show-eyebrow::before{content:none} .panClean [data-type="strata"] .title-brand .eyebrow:before,.panClean [data-type="strata"].title-brand .eyebrow:before,.panClean [data-type="strata"] .title-brand .mega-eyebrow:before,.panClean [data-type="strata"].title-brand .mega-eyebrow:before{background-color:#ffcb06} .panClean [data-type="prisma"] .title-brand .eyebrow:before,.panClean [data-type="prisma"].title-brand .eyebrow:before,.panClean [data-type="prisma"] .title-brand .mega-eyebrow:before,.panClean [data-type="prisma"].title-brand .mega-eyebrow:before{background-color:#00c0e8} .panClean [data-type="cortex"] .title-brand .eyebrow:before,.panClean [data-type="cortex"].title-brand .eyebrow:before,.panClean [data-type="cortex"] .title-brand .mega-eyebrow:before,.panClean [data-type="cortex"].title-brand .mega-eyebrow:before{background-color:#0c6} .panClean [data-type="unit42"] .title-brand .eyebrow:before,.panClean [data-type="unit42"].title-brand .eyebrow:before,.panClean [data-type="unit42"] .title-brand .mega-eyebrow:before,.panClean [data-type="unit42"].title-brand .mega-eyebrow:before{background-color:#c84727} @media(max-width:1199.98px){.panClean .title-brand .mega-eyebrow:before{width:188px} } @media(max-width:991.98px){.panClean .title-brand .eyebrow,.panClean .title-brand .mega-eyebrow{padding-top:28px;margin-bottom:20px} } @media(min-width:375px){.panClean .title-brand .eyebrow:before{width:35px;width:calc(2.1875rem + (28 - 35) *((100vw - 375px) /(768 - 375)))} } @media(min-width:768px){.panClean .title-brand .eyebrow:before{width:28px;width:calc(1.75rem + (35 - 28) *((100vw - 768px) /(1400 - 768)));height:6px} } @media(min-width:992px){.panClean .title-brand .eyebrow{padding-top:26px;margin-bottom:25px} } @media(min-width:1400px){.panClean .title-brand .eyebrow:before{width:35px;width:calc(2.1875rem + (50 - 35) *((100vw - 1400px) /(1920 - 1400)));height:6px;height:calc(0.375rem + (8 - 6) *((100vw - 1400px) /(1920 - 1400)))} .panClean .title-brand .mega-eyebrow:before{width:381px} } @media(min-width:1920px){.panClean .title-brand .eyebrow:before{width:50px;height:8px} } .panClean ul.check-list{padding:0;margin:0 0 25px;list-style:none;font-family:TT Hoves,Arial,"Helvetica Neue",Helvetica,sans-serif;text-align:left;font-weight:400;color:#5f5f5f;font-size:1.023rem;line-height:140%} .panClean ul.check-list>li{position:relative;padding:10px 0 10px 40px} .panClean ul.check-list>li::before{content:url('/etc/clientlibs/cleangb/imgs/check-blue.svg');position:absolute;top:14px;left:0} .panClean ul.check-list.theme-light{color:#fff} .panClean [data-type="default"] ul.check-list>li::before,.panClean [data-type="paloaltonetworks"] ul.check-list>li::before,.panClean [data-type="enterprise"] ul.check-list>li::before{content:url('/etc/clientlibs/cleangb/imgs/check-orange.svg')} .panClean [data-type="prisma"] ul.check-list>li::before{content:url('/etc/clientlibs/cleangb/imgs/check-blue.svg')} .panClean [data-type="cortex"] ul.check-list>li::before{content:url('/etc/clientlibs/cleangb/imgs/check-green.svg')} .panClean [data-type="strata"] ul.check-list>li::before{content:url('/etc/clientlibs/cleangb/imgs/check-yellow.svg')} .panClean [data-type="unit42"] ul.check-list>li::before{content:url('/etc/clientlibs/cleangb/imgs/check-maroon.svg')} .panClean ul.check-list[data-type="default"]>li::before,.panClean ul.check-list[data-type="enterprise"]>li::before,.panClean ul.check-list[data-type="paloaltonetworks"]>li::before{content:url('/etc/clientlibs/cleangb/imgs/check-orange.svg')} .panClean ul.check-list[data-type="prisma"]>li::before{content:url('/etc/clientlibs/cleangb/imgs/check-blue.svg')} .panClean ul.check-list[data-type="cortex"]>li::before{content:url('/etc/clientlibs/cleangb/imgs/check-green.svg')} .panClean ul.check-list[data-type="strata"]>li::before{content:url('/etc/clientlibs/cleangb/imgs/check-yellow.svg')} .panClean ul.check-list[data-type="unit42"]>li::before{content:url('/etc/clientlibs/cleangb/imgs/check-maroon.svg')} .panClean .loading-spinner{animation:is-rotating 3s infinite;width:50px;height:50px;border:6px solid #e5e5e5;border-top-color:#fa582d;border-radius:50%;display:none} .panClean .loading-spinner.loading{display:block} .panClean [data-type="strata"] .loading-spinner{border-top-color:#ffcb06} .panClean [data-type="prisma"] .loading-spinner{border-top-color:#00c0e8} .panClean [data-type="cortex"] .loading-spinner{border-top-color:#0c6} .panClean [data-type="unit42"] .loading-spinner{border-top-color:#c84727} @keyframes is-rotating{to{transform:rotate(1turn)} } .lity img{max-width:100%} .panClean .ar-1-1,.panClean .ar-4-3,.panClean .ar-3-2,.panClean .ar-3-4,.panClean .ar-12-17,.panClean .ar-16-7,.panClean .ar-16-9,.panClean .ar-16-10,.panClean .ar-8-5,.panClean .ar-21-7,.panClean .ar-3-1{display:inline-block;width:100%;height:0;overflow:hidden;position:relative;margin:0} .panClean .ar-1-1 img,.panClean .ar-4-3 img,.panClean .ar-3-2 img,.panClean .ar-3-4 img,.panClean .ar-12-17 img,.panClean .ar-16-7 img,.panClean .ar-16-9 img,.panClean .ar-16-10 img,.panClean .ar-8-5 img,.panClean .ar-21-7 img,.panClean .ar-3-1 img{position:absolute;left:0;width:100%;height:100%;object-fit:contain;font-family:'object-fit: contain;'} .panClean .ar-1-1 figcaption,.panClean .ar-4-3 figcaption,.panClean .ar-3-2 figcaption,.panClean .ar-3-4 figcaption,.panClean .ar-12-17 figcaption,.panClean .ar-16-7 figcaption,.panClean .ar-16-9 figcaption,.panClean .ar-16-10 figcaption,.panClean .ar-8-5 figcaption,.panClean .ar-21-7 figcaption,.panClean .ar-3-1 figcaption{position:absolute;left:0;right:0;bottom:0} .panClean .ar-1-1{padding-bottom:100%} .panClean .ar-4-3{padding-bottom:75%} .panClean .ar-3-2{padding-bottom:66.6666667%} .panClean .ar-3-4{padding-bottom:133.3333333%} .panClean .ar-12-17{padding-bottom:141.6666667%} .panClean .ar-16-7{padding-bottom:43.75%} .panClean .ar-16-9{padding-bottom:56.25%} .panClean .ar-16-10,.panClean .ar-8-5{padding-bottom:62.5%} .panClean .ar-21-7,.panClean .ar-3-1{padding-bottom:33.3333333%} @media(min-width:576px){.panClean .sm-ar-1-1,.panClean .sm-ar-4-3,.panClean .sm-ar-3-2,.panClean .sm-ar-3-4,.panClean .sm-ar-12-17,.panClean .sm-ar-16-7,.panClean .sm-ar-16-9,.panClean .sm-ar-16-10,.panClean .sm-ar-8-5,.panClean .sm-ar-21-7,.panClean .sm-ar-3-1{display:inline-block;width:100%;height:0;overflow:hidden;position:relative;margin:0} .panClean .sm-ar-1-1 img,.panClean .sm-ar-4-3 img,.panClean .sm-ar-3-2 img,.panClean .sm-ar-3-4 img,.panClean .sm-ar-12-17 img,.panClean .sm-ar-16-7 img,.panClean .sm-ar-16-9 img,.panClean .sm-ar-16-10 img,.panClean .sm-ar-8-5 img,.panClean .sm-ar-21-7 img,.panClean .sm-ar-3-1 img{position:absolute;width:100%;height:100%;object-fit:contain;font-family:'object-fit: contain;'} .panClean .sm-ar-1-1 figcaption,.panClean .sm-ar-4-3 figcaption,.panClean .sm-ar-3-2 figcaption,.panClean .sm-ar-3-4 figcaption,.panClean .sm-ar-12-17 figcaption,.panClean .sm-ar-16-7 figcaption,.panClean .sm-ar-16-9 figcaption,.panClean .sm-ar-16-10 figcaption,.panClean .sm-ar-8-5 figcaption,.panClean .sm-ar-21-7 figcaption,.panClean .sm-ar-3-1 figcaption{position:absolute;left:0;right:0;bottom:0} .panClean .sm-ar-1-1{padding-bottom:100%} .panClean .sm-ar-4-3{padding-bottom:75%} .panClean .sm-ar-3-2{padding-bottom:66.6666667%} .panClean .sm-ar-3-4{padding-bottom:133.3333333%} .panClean .sm-ar-12-17{padding-bottom:141.6666667%} .panClean .sm-ar-16-7{padding-bottom:43.75%} .panClean .sm-ar-16-9{padding-bottom:56.25%} .panClean .sm-ar-16-10,.panClean .sm-ar-8-5{padding-bottom:62.5%} .panClean .sm-ar-21-7,.panClean .sm-ar-3-1{padding-bottom:33.3333333%} } @media(min-width:768px){.panClean .md-ar-1-1,.panClean .md-ar-4-3,.panClean .md-ar-3-2,.panClean .md-ar-3-4,.panClean .md-ar-12-17,.panClean .md-ar-16-7,.panClean .md-ar-16-9,.panClean .md-ar-16-10,.panClean .md-ar-8-5,.panClean .md-ar-21-7,.panClean .md-ar-3-1{display:inline-block;width:100%;height:0;overflow:hidden;position:relative;margin:0} .panClean .md-ar-1-1 img,.panClean .md-ar-4-3 img,.panClean .md-ar-3-2 img,.panClean .md-ar-3-4 img,.panClean .md-ar-12-17 img,.panClean .md-ar-16-7 img,.panClean .md-ar-16-9 img,.panClean .md-ar-16-10 img,.panClean .md-ar-8-5 img,.panClean .md-ar-21-7 img,.panClean .md-ar-3-1 img{position:absolute;width:100%;height:100%;object-fit:contain;font-family:'object-fit: contain;'} .panClean .md-ar-1-1 figcaption,.panClean .md-ar-4-3 figcaption,.panClean .md-ar-3-2 figcaption,.panClean .md-ar-3-4 figcaption,.panClean .md-ar-12-17 figcaption,.panClean .md-ar-16-7 figcaption,.panClean .md-ar-16-9 figcaption,.panClean .md-ar-16-10 figcaption,.panClean .md-ar-8-5 figcaption,.panClean .md-ar-21-7 figcaption,.panClean .md-ar-3-1 figcaption{position:absolute;left:0;right:0;bottom:0} .panClean .md-ar-1-1{padding-bottom:100%} .panClean .md-ar-4-3{padding-bottom:75%} .panClean .md-ar-3-2{padding-bottom:66.6666667%} .panClean .md-ar-3-4{padding-bottom:133.3333333%} .panClean .md-ar-12-17{padding-bottom:141.6666667%} .panClean .md-ar-16-7{padding-bottom:43.75%} .panClean .md-ar-16-9{padding-bottom:56.25%} .panClean .md-ar-16-10,.panClean .md-ar-8-5{padding-bottom:62.5%} .panClean .md-ar-21-7,.panClean .md-ar-3-1{padding-bottom:33.3333333%} } @media(min-width:992px){.panClean .lg-ar-1-1,.panClean .lg-ar-4-3,.panClean .lg-ar-3-2,.panClean .lg-ar-3-4,.panClean .lg-ar-12-17,.panClean .lg-ar-16-7,.panClean .lg-ar-16-9,.panClean .lg-ar-16-10,.panClean .lg-ar-8-5,.panClean .lg-ar-21-7,.panClean .lg-ar-3-1,.panClean .lg-ar-3-1{display:inline-block;width:100%;height:0;overflow:hidden;position:relative;margin:0} .panClean .lg-ar-1-1 img,.panClean .lg-ar-4-3 img,.panClean .lg-ar-3-2 img,.panClean .lg-ar-3-4 img,.panClean .lg-ar-12-17 img,.panClean .lg-ar-16-7 img,.panClean .lg-ar-16-9 img,.panClean .lg-ar-16-10 img,.panClean .lg-ar-8-5 img,.panClean .lg-ar-21-7 img,.panClean .lg-ar-3-1 img,.panClean .lg-ar-3-1 img{position:absolute;width:100%;height:100%;object-fit:contain;font-family:'object-fit: contain;'} .panClean .lg-ar-1-1 figcaption,.panClean .lg-ar-4-3 figcaption,.panClean .lg-ar-3-2 figcaption,.panClean .lg-ar-3-4 figcaption,.panClean .lg-ar-12-17 figcaption,.panClean .lg-ar-16-7 figcaption,.panClean .lg-ar-16-9 figcaption,.panClean .lg-ar-16-10 figcaption,.panClean .lg-ar-8-5 figcaption,.panClean .lg-ar-21-7 figcaption,.panClean .lg-ar-3-1 figcaption,.panClean .lg-ar-3-1 figcaption{position:absolute;left:0;right:0;bottom:0} .panClean .lg-ar-1-1{padding-bottom:100%} .panClean .lg-ar-4-3{padding-bottom:75%} .panClean .lg-ar-3-2{padding-bottom:66.6666667%} .panClean .lg-ar-3-4{padding-bottom:133.3333333%} .panClean .lg-ar-12-17{padding-bottom:141.6666667%} .panClean .lg-ar-16-7{padding-bottom:43.75%} .panClean .lg-ar-16-9{padding-bottom:56.25%} .panClean .lg-ar-16-10,.panClean .lg-ar-8-5{padding-bottom:62.5%} .panClean .lg-ar-21-7,.panClean .lg-ar-3-1{padding-bottom:33.3333333%} } @media(min-width:1200px){.panClean .xl-ar-1-1,.panClean .xl-ar-4-3,.panClean .xl-ar-3-2,.panClean .xl-ar-3-4,.panClean .xl-ar-12-17,.panClean .xl-ar-16-7,.panClean .xl-ar-16-9,.panClean .xl-ar-16-10,.panClean .xl-ar-8-5,.panClean .xl-ar-21-7,.panClean .xl-ar-3-1,.panClean .xl-ar-3-1{display:inline-block;width:100%;height:0;overflow:hidden;position:relative;margin:0} .panClean .xl-ar-1-1 img,.panClean .xl-ar-4-3 img,.panClean .xl-ar-3-2 img,.panClean .xl-ar-3-4 img,.panClean .xl-ar-12-17 img,.panClean .xl-ar-16-7 img,.panClean .xl-ar-16-9 img,.panClean .xl-ar-16-10 img,.panClean .xl-ar-8-5 img,.panClean .xl-ar-21-7 img,.panClean .xl-ar-3-1 img,.panClean .xl-ar-3-1 img{position:absolute;width:100%;height:100%;object-fit:contain;font-family:'object-fit: contain;'} .panClean .xl-ar-1-1 figcaption,.panClean .xl-ar-4-3 figcaption,.panClean .xl-ar-3-2 figcaption,.panClean .xl-ar-3-4 figcaption,.panClean .xl-ar-12-17 figcaption,.panClean .xl-ar-16-7 figcaption,.panClean .xl-ar-16-9 figcaption,.panClean .xl-ar-16-10 figcaption,.panClean .xl-ar-8-5 figcaption,.panClean .xl-ar-21-7 figcaption,.panClean .xl-ar-3-1 figcaption,.panClean .xl-ar-3-1 figcaption{position:absolute;left:0;right:0;bottom:0} .panClean .xl-ar-1-1{padding-bottom:100%} .panClean .xl-ar-4-3{padding-bottom:75%} .panClean .xl-ar-3-2{padding-bottom:66.6666667%} .panClean .xl-ar-3-4{padding-bottom:133.3333333%} .panClean .xl-ar-12-17{padding-bottom:141.6666667%} .panClean .xl-ar-16-7{padding-bottom:43.75%} .panClean .xl-ar-16-9{padding-bottom:56.25%} .panClean .xl-ar-16-10,.panClean .xl-ar-8-5{padding-bottom:62.5%} .panClean .xl-ar-21-7,.panClean .xl-ar-3-1{padding-bottom:33.3333333%} } .panClean figure.image-cover img,.panClean [class^="ar-"].image-cover img,.panClean figure.cover img,.panClean [class^="ar-"].cover img{object-fit:cover;font-family:'object-fit: cover;'} .panClean figure.image-contain img,.panClean [class^="ar-"].image-contain img,.panClean figure.contain img,.panClean [class^="ar-"].contain img{object-fit:contain;font-family:'object-fit: contain;'} .panClean figure.left-top img,.panClean [class^="ar-"].left-top img{object-position:left top;font-family:'object-position: left top;'} .panClean figure.left-center img,.panClean [class^="ar-"].left-center img{object-position:left center;font-family:'object-position: left center;'} .panClean figure.left-bottom img,.panClean [class^="ar-"].left-bottom img{object-position:left bottom;font-family:'object-position: left bottom;'} .panClean figure.center-top img,.panClean [class^="ar-"].center-top img{object-position:center top;font-family:'object-position: center top;'} .panClean figure.center-center img,.panClean [class^="ar-"].center-center img{object-position:center center;font-family:'object-position: center center;'} .panClean figure.center-bottom img,.panClean [class^="ar-"].center-bottom img{object-position:center bottom;font-family:'object-position: center bottom;'} .panClean figure.right-top img,.panClean [class^="ar-"].right-top img{object-position:right top;font-family:'object-position: right top;'} .panClean figure.right-center img,.panClean [class^="ar-"].right-center img{object-position:right center;font-family:'object-position: right center;'} .panClean figure.right-bottom img,.panClean [class^="ar-"].right-bottom img{object-position:right bottom;font-family:'object-position: right bottom;'} .text-white,.text-dark{color:#fff !important} .text-black,.text-light{color:#141414 !important} .body-serif-1,.body-serif-2,.body-serif-3,.body-serif-4,.body-serif-5{font-family:CelestePro,Georgia,serif;color:#141414;line-height:120%} .body-serif-1,.body-serif-2{font-size:1rem} .label-3{font-family:TT Hoves,Arial,"Helvetica Neue",Helvetica,sans-serif;color:#141414;font-weight:600;font-size:.75rem;line-height:140%} .text-400{font-weight:400} .list-item{font-family:CelestePro,Georgia,serif;color:#141414;font-weight:400;font-size:1rem;line-height:150%} .nav-headline,.nav-subheader,.nav-list{font-family:TT Hoves,Arial,"Helvetica Neue",Helvetica,sans-serif;color:#141414;line-height:140%;letter-spacing:.02rem} .nav-headline{font-size:1rem;font-weight:600} .nav-subheader,.nav-list{font-size:.75rem} .nav-subheader{font-weight:600} .nav-list{font-weight:500} @media(min-width:768px){.label-3{font-size:.75rem} .nav-headline{font-size:1rem} .nav-subheader,.nav-list{font-size:.75rem} } @media(min-width:992px){.label-3{font-size:.775rem} .nav-headline{font-size:1.025rem} .nav-subheader,.nav-list{font-size:.775rem} .body-serif-1{font-size:1.1rem} } @media(min-width:1200px){.label-3{font-size:.8rem} .nav-headline{font-size:1.05rem} .nav-subheader,.nav-list{font-size:.8rem} .body-serif-1,.body-serif-2,.body-serif-3,.body-serif-4,.body-serif-5{line-height:150%} .body-serif-1{font-size:1.2rem} } @media(min-width:1400px){.label-3{font-size:.825rem} .nav-headline{font-size:1.075rem} .nav-subheader,.nav-list{font-size:.825rem} .body-serif-1{font-size:1.3rem} } @media(min-width:1600px){.label-3{font-size:.85rem} .nav-headline{font-size:1.1rem} .nav-subheader,.nav-list{font-size:.85rem} .body-serif-1{font-size:1.4rem} } @media(min-width:1920px){.label-3{font-size:.875rem} .nav-headline{font-size:1.125rem} .nav-subheader,.nav-list{font-size:.875rem} .body-serif-1{font-size:1.5rem} } html{scroll-behavior:smooth} .no-scroll{overflow:hidden !important} .waypoint{border:0;margin:0;padding:0} .panClean{position:relative} .panClean .CoveoSearchInterface{display:none} .panClean .flyout,.panClean .flyout-bg{display:none}.glider-contain{width:100%;margin:0 auto;position:relative} .glider-wrapper{width:100%} .glider-wrapper:not(.glider){display:flex;flex-wrap:nowrap;overflow:hidden} .glider-wrapper:not(.glider)>div{flex-grow:0;flex-shrink:0;flex-basis:auto} .glider{margin:0 auto;position:relative;overflow-y:hidden;-webkit-overflow-scrolling:touch;-ms-overflow-style:none;transform:translateZ(0)} .glider-track{transform:translateZ(0);width:100%;margin:0;padding:0;display:flex;z-index:1} .glider-slide{user-select:none;justify-content:center;align-content:center;width:100%;position:relative} .glider-slide img{max-width:100%} .glider::-webkit-scrollbar,.glider-wrapper::-webkit-scrollbar{opacity:0;height:0} .glider-contain.scrollbar{position:relative} .glider-contain.scrollbar .glider-wrapper{padding-bottom:45px} .glider-contain.scrollbar .glider-wrapper::-webkit-scrollbar{-webkit-appearance:none;opacity:1;width:7px;height:2px;background-color:#fff} .glider-contain.scrollbar .glider-wrapper::-webkit-scrollbar-track{background-color:#b9b9b9} .glider-contain.scrollbar .glider-wrapper::-webkit-scrollbar-thumb{background-color:#fa582d} .glider-contain.fake-scrollbar{position:relative} .glider-contain.fake-scrollbar .glider-wrapper{padding-bottom:45px} .glider-contain.fake-scrollbar .scrollbar{display:flex;position:absolute;left:0;right:7.14285714vw;bottom:0;height:2px;background-color:#b9b9b9;overflow:hidden} .glider-contain.fake-scrollbar .scrollbar .glider-dot{flex-grow:1;flex-shrink:1;flex-basis:0;height:2px;width:auto;min-width:auto;max-width:none;margin:0;padding:0;position:relative} .glider-contain.fake-scrollbar .scrollbar .glider-dot:before{position:absolute;top:0;left:0} .glider-contain.fake-scrollbar .scrollbar .glider-dot.active:before{background-color:#fa582d} .glider-prev,.glider-next{position:absolute;top:50%;width:50px;height:50px;border-radius:50px;z-index:10;display:flex;align-items:center;justify-content:center;background-size:24px 24px;background-position:center;background-repeat:no-repeat;border:2px solid #fa582d;background-color:#fa582d} .glider-prev.glider-button-white.glider-button-white,.glider-next.glider-button-white.glider-button-white{border-color:#fff;background-color:transparent} .glider-prev.glider-button-black.glider-button-black,.glider-next.glider-button-black.glider-button-black{border-color:#141414;background-color:#fff} .glider-prev{left:15px;right:auto;background-image:url('/etc/clientlibs/clean/imgs/chevron-left-black.svg')} .glider-prev.glider-button-white.glider-button-white{background-image:url('/etc/clientlibs/clean/imgs/chevron-left-white.svg')} .glider-next{right:15px;left:auto;background-image:url('/etc/clientlibs/clean/imgs/chevron-right-black.svg')} .glider-next.glider-button-white.glider-button-white{background-image:url('/etc/clientlibs/clean/imgs/chevron-right-white.svg')} [data-type="strata"] .glider-prev,[data-type="strata"] .glider-next{background-color:#ffcb06;border-color:#ffcb06} [data-type="prisma"] .glider-prev,[data-type="prisma"] .glider-next{background-color:#00c0e8;border-color:#00c0e8} [data-type="cortex"] .glider-prev,[data-type="cortex"] .glider-next{background-color:#0c6;border-color:#0c6} [data-type="unit42"] .glider-prev,[data-type="unit42"] .glider-next{background-color:#c84727;border-color:#c84727} .glider-slide{min-width:150px} .glider-hide{opacity:0} .glider-pagination{position:absolute;text-align:center;transition:300ms opacity;transform:translate3d(0,0,0);z-index:10} .glider-dots{user-select:none;display:flex;flex-wrap:wrap;justify-content:center;margin:0 auto;padding:0} .glider-dot{border:0;margin:0;padding:0;box-shadow:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;flex-shrink:0;flex-grow:1;flex-basis:auto;display:inline-block;margin:0 15px;padding:9px 0;background:0;position:relative;color:#767676;overflow:hidden;font-weight:600;font-size:14px;transition:flex .25s ease-in-out} .glider-dot.active{flex-grow:2;opacity:1;color:#141414} .glider-dots:not(.animate-glider-dots) .glider-dot:before{content:'';display:inline-block;width:100%;height:2px;background-color:#b9b9b9} .glider-dots:not(.animate-glider-dots) .glider-dot.active:before{background-color:#fa582d} .glider-dots.animate-glider-dots .glider-dot>span{flex-grow:0;flex-shrink:0;flex-basis:auto;display:inline-block;position:relative;width:100%;height:2px;background-color:#b9b9b9;overflow:hidden} .glider-dots.animate-glider-dots .glider-dot>span>span{position:absolute;height:2px;top:0;left:0;width:100%;left:-100%;background-color:transparent;will-change:transform;transition:transform 5s linear} .glider-dots.animate-glider-dots .glider-dot.active>span>span{background-color:#fa582d}.cleanDynamicFooter{margin-top:200px;overflow:hidden} .cleanDynamicFooter.show-dropdown{overflow:initial} .cleanDynamicFooter .footer-form{padding:45px 0;background-color:#141414;background-size:auto 100%;background-position:left center;background-repeat:no-repeat} .cleanDynamicFooter .footer-form .footer-form-input-container{width:100%} .cleanDynamicFooter .footer-form .form label.form-field{flex-grow:1} .cleanDynamicFooter .footer-form .form input{flex-grow:1;flex-shrink:1;flex-basis:auto;background:0;padding:7px 0;border:0;border-bottom:1px solid #5f5f5f;width:100%} .cleanDynamicFooter .footer-form .form input::placeholder{color:#fff} .cleanDynamicFooter .footer-form .form input:-ms-input-placeholder{color:#fff} .cleanDynamicFooter .footer-form .form input::-ms-input-placeholder{color:#fff} .cleanDynamicFooter .footer-form .form .btn-primary{flex-basis:auto;white-space:nowrap;padding:12px 24px} .cleanDynamicFooter .footer-form .form .validation-icon{position:absolute;visibility:hidden;opacity:0} .cleanDynamicFooter .footer-form .form-legal a{text-decoration:underline;font-weight:600} .cleanDynamicFooter .footer-form .form-legal a:hover{text-decoration:none} .cleanDynamicFooter .footer-form .form-legal.text-white a{color:#fff} .cleanDynamicFooter .mega-footer{padding:45px 0} .cleanDynamicFooter .mega-footer .heading-col{border-bottom:1px solid #d8d8d8;margin-bottom:20px} .cleanDynamicFooter .mega-footer .heading-col .nav-headline{padding:10px 0} .cleanDynamicFooter .mega-footer .columns .list-unstyled{margin-bottom:0} .cleanDynamicFooter .mega-footer .columns .list-unstyled>li{padding:8px 0} .cleanDynamicFooter .footer-bottom{border-top:1px solid #d8d8d8;padding:80px 0 40px} .cleanDynamicFooter .footer-bottom .pan-logo{width:245px;height:46px;margin-bottom:30px} .cleanDynamicFooter .footer-bottom .pan-logo img{width:100%;height:100%} .cleanDynamicFooter .footer-bottom .social-icons{gap:30px} .cleanDynamicFooter .footer-bottom .social-icons .social-icon{width:30px;height:30px} .cleanDynamicFooter .footer-bottom .social-icons .social-icon img{width:100%;height:100%} .cleanDynamicFooter .dropdown .btn-language{border-radius:40px;padding:10px 15px 10px 35px;border:1px solid #141414;background-color:#fff;background-size:20px 20px;background-position:15px center;background-repeat:no-repeat;font-size:18px} .cleanDynamicFooter .dropdown .btn-language span{padding:0 15px 0 5px} .cleanDynamicFooter .dropdown .btn-language i{background-image:url('/etc/clientlibs/clean/imgs/chevron-down-black.svg');width:24px;height:24px;background-position:center;background-size:contain;background-repeat:no-repeat;transition:transform .15s ease-in-out} @media(min-width:768px) and (max-width:1399.98px){.cleanDynamicFooter .mega-footer .col-md-12 .columns .list-unstyled{flex:0 0 33.33333%;max-width:33.33333%} .cleanDynamicFooter .footer-bottom .pan-logo{width:190px;height:35px} } @media(max-width:1399.98px){.cleanDynamicFooter .footer-bottom .social-icons{gap:24px} .cleanDynamicFooter .footer-bottom .social-icons .social-icon{width:24px;height:24px} .cleanDynamicFooter .dropdown .btn-language{padding:8px 12px 8px 30px;background-size:16px 16px;font-size:16px} .cleanDynamicFooter .dropdown .btn-language span{padding:0 10px 0 3px} .cleanDynamicFooter .dropdown .btn-language i{width:20px;height:20px} } @media(max-width:767.98px){.cleanDynamicFooter .footer-form .form input{flex-grow:0;flex-shrink:0;flex-basis:100%;max-width:100%;margin-bottom:30px} .cleanDynamicFooter .footer-form .form-title{padding:0 0 32px 0} .cleanDynamicFooter .mega-footer{padding:45px 0} .cleanDynamicFooter .mega-footer .heading-col{position:relative;border-bottom:0;cursor:pointer;margin-bottom:5px} .cleanDynamicFooter .mega-footer .heading-col .nav-headline{padding-bottom:15px} .cleanDynamicFooter .mega-footer .heading-col:after{content:'';position:absolute;right:0;top:50%;margin-top:-12px;display:inline-flex;width:20px;height:20px;background-image:url('/etc/clientlibs/clean/imgs/chevron-down-black.svg');background-position:center;background-size:contain;background-repeat:no-repeat;transition:transform .15s ease-in-out;z-index:0} .cleanDynamicFooter .mega-footer .heading-col:not(.collapsed):after{transform:rotate(180deg)} .cleanDynamicFooter .mega-footer .columns .list-unstyled>li.sub-title{position:relative} .cleanDynamicFooter .mega-footer .columns .list-unstyled>li.sub-title a,.cleanDynamicFooter .mega-footer .columns .list-unstyled>li.sub-title span{position:relative;padding:10px 25px 15px 20px;text-decoration:none;z-index:1} .cleanDynamicFooter .mega-footer .columns .list-unstyled>li.sub-title a:hover,.cleanDynamicFooter .mega-footer .columns .list-unstyled>li.sub-title span:hover{text-decoration:none} .cleanDynamicFooter .mega-footer .columns .list-unstyled>li.sub-title.collapse ~ .link.hide{display:none} .cleanDynamicFooter .mega-footer .columns .list-unstyled>li.sub-title.expand ~ .link.show{display:list-item} .cleanDynamicFooter .mega-footer .columns .list-unstyled>li.sub-title.hide{display:none} .cleanDynamicFooter .mega-footer .columns .list-unstyled>li.sub-title.show{display:list-item} .cleanDynamicFooter .mega-footer .columns .list-unstyled>li.sub-title.show.expand:after{transform:rotate(180deg)} .cleanDynamicFooter .mega-footer .columns .list-unstyled>li.sub-title.show.collapse:after{transform:rotate(0)} .cleanDynamicFooter .mega-footer .columns .list-unstyled>li.sub-title.hide.expand:after{transform:rotate(180deg)} .cleanDynamicFooter .mega-footer .columns .list-unstyled>li.sub-title.hide.collapse:after{transform:rotate(0)} .cleanDynamicFooter .mega-footer .columns .list-unstyled>li.sub-title:after{content:'';position:absolute;right:0;top:50%;margin-top:-12px;display:inline-flex;width:20px;height:20px;background-image:url('/etc/clientlibs/clean/imgs/chevron-down-black.svg');background-position:center;background-size:contain;background-repeat:no-repeat;opacity:.65;transition:transform .15s ease-in-out} .cleanDynamicFooter .mega-footer .columns .list-unstyled>li.link a,.cleanDynamicFooter .mega-footer .columns .list-unstyled>li.link span{padding:5px 0 5px 40px} .cleanDynamicFooter .mega-footer .columns.show .list-unstyled>li:first-child{display:list-item} .cleanDynamicFooter .footer-bottom .pan-logo{width:150px;height:28px} .cleanDynamicFooter .footer-bottom .bottom-links>li{margin-bottom:15px} .cleanDynamicFooter .footer-bottom .social-icons{width:100%;position:relative;padding-right:125px} .cleanDynamicFooter .footer-bottom .social-icons>li:last-child{position:absolute;right:0} } @media(max-width:374.98px){.cleanDynamicFooter .footer-bottom .social-icons{gap:20px} } @media(min-width:768px){.cleanDynamicFooter .mega-footer{padding-bottom:40px} .cleanDynamicFooter .mega-footer .heading-col{pointer-events:none} .cleanDynamicFooter .mega-footer .columns{margin:0 -15px} .cleanDynamicFooter .mega-footer .columns .list-unstyled{flex-grow:1;flex-shrink:1;flex-basis:auto;padding:0 15px;margin-bottom:30px} .cleanDynamicFooter .mega-footer .columns .list-unstyled>li.sub-title ~ .sub-title{margin-top:20px} .cleanDynamicFooter .footer-bottom .bottom-links{gap:20px} .cleanDynamicFooter .order-md-1{order:1} .cleanDynamicFooter .order-md-2{order:2} .cleanDynamicFooter .order-md-3{order:3} } @media(min-width:992px){.cleanDynamicFooter .mega-footer .columns .list-unstyled>li{padding:calc(.562rem + (12 - 9) *((100vw - 992px) /(1600 - 992))) 0} } @media(min-width:1200px){.cleanDynamicFooter .footer-form{padding:60px 0} .cleanDynamicFooter .mega-footer{padding:60px 0} } @media(min-width:1400px){.cleanDynamicFooter .order-xxl-2{order:2} .cleanDynamicFooter .order-xxl-3{order:3} } @media(min-width:1600px){.cleanDynamicFooter .footer-form{padding:75px 0} .cleanDynamicFooter .mega-footer{padding:75px 0} .cleanDynamicFooter .mega-footer .columns .list-unstyled>li{padding:12px 0} .cleanDynamicFooter .footer-bottom .bottom-links{gap:30px} } .panClean:not([class*='pan-template-dynamic']):not(.new-footer-old-template) .cleanDynamicFooter h4,.panClean:not([class*='pan-template-dynamic']):not(.new-footer-old-template) .cleanDynamicFooter .h4{font-size:1.375rem;line-height:130%} @media(min-width:768px){.panClean:not([class*='pan-template-dynamic']):not(.new-footer-old-template) .cleanDynamicFooter h4,.panClean:not([class*='pan-template-dynamic']):not(.new-footer-old-template) .cleanDynamicFooter .h4{font-size:calc(1.375rem + (48 - 22) *((100vw - 768px) /(1920 - 768)))} }.panClean .col-facets .searchfacets{width:100%} @media(max-width:1199.98px){.panClean .col-facets{display:flex;flex-direction:column;position:fixed;left:0;right:0;bottom:0;visibility:hidden;z-index:998} .panClean .col-facets.open{display:flex !important} .panClean .col-facets.open .mobile-header,.panClean .col-facets.open .searchfacets>.actions{display:flex} } @media(min-width:768px) and (max-width:1199.98px){.panClean .col-facets{top:0;padding:120px 7.14285714vw;opacity:0} .panClean .col-facets:before{content:'';position:absolute;top:0;left:0;right:0;bottom:0;background-color:#141414;opacity:.9} .panClean .col-facets.open{opacity:1;visibility:visible;z-index:1001;transition:visibility .15s,opacity .15s ease-in} } @media(max-width:767.98px){.panClean .col-facets{background-color:#fff;height:100%;width:100%;top:100%;padding:75px 0} .panClean .col-facets.open{transition:visibility .25s ease-in-out,transform .25s ease-in-out;transform:translateY(-100%);visibility:visible;z-index:1001} } @media(min-width:1200px){.panClean .col-facets{padding-right:45px} } @media(min-width:1920px){.panClean .col-facets{flex:0 0 20%;max-width:20%;padding-right:15px} } .panClean .searchfacets .datepicker{padding-top:30px} .panClean .searchfacets .datepicker>label{font-size:.950625rem;font-weight:500} .panClean .searchfacets .datepicker .input-group.date{position:relative;background-color:#f4f4f2;border-radius:8px} .panClean .searchfacets .datepicker .input-group.date input{border:2px solid #f4f4f2;border-radius:8px;padding:8px 15px 8px 50px;font-size:1.02375rem;line-height:128%;background:0;width:100%;z-index:1} .panClean .searchfacets .datepicker .input-group.date input:focus{outline:0;box-shadow:0 0 0 3px rgba(250,88,45,0.5)} .panClean .searchfacets .datepicker .input-group.date .icon-calendar{position:absolute;top:0;left:15px;bottom:0;width:24px;background-image:url('/etc/clientlibs/clean/imgs/calendar-black.svg');background-size:20px 20px;background-position:center;background-repeat:no-repeat;z-index:0} .panClean .searchfacets .datepicker .input-group.date .tempus-dominus-widget{position:absolute;font-weight:500} .panClean .searchfacets .datepicker .input-group.date .tempus-dominus-widget .fa-solid{display:inline-block;width:24px;height:24px;background-size:24px 24px;background-repeat:no-repeat;background-position:center} .panClean .searchfacets .datepicker .input-group.date .tempus-dominus-widget .fa-chevron-left{background-image:url('/etc/clientlibs/clean/imgs/chevron-left-black.svg')} .panClean .searchfacets .datepicker .input-group.date .tempus-dominus-widget .fa-chevron-right{background-image:url('/etc/clientlibs/clean/imgs/chevron-right-black.svg')} .panClean .searchfacets .datepicker .input-group.date .tempus-dominus-widget .fa-arrow-up{background-image:url('/etc/clientlibs/clean/imgs/chevron-up-black.svg')} .panClean .searchfacets .datepicker .input-group.date .tempus-dominus-widget .fa-arrow-down{background-image:url('/etc/clientlibs/clean/imgs/chevron-down-black.svg')} .panClean .searchfacets .datepicker .input-group.date .tempus-dominus-widget .fa-clock{background-image:url('/etc/clientlibs/clean/imgs/clock-black.svg')} .panClean .searchfacets .datepicker .input-group.date .tempus-dominus-widget .fa-calendar{background-image:url('/etc/clientlibs/clean/imgs/calendar-black.svg')} .panClean .searchfacets .datepicker-actions{display:flex;align-items:center;justify-content:flex-end;padding-top:30px} .panClean .searchfacets .accordion{margin:0 0 40px;font-family:TT Hoves,Arial,"Helvetica Neue",Helvetica,sans-serif;font-weight:600} .panClean .searchfacets .facet-section{padding:30px 0;border-bottom:1px solid #d8d8d8} .panClean .searchfacets .desktop-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:-5px;padding-top:35px} .panClean .searchfacets .desktop-header .h3{font:1.02375rem/114% TT Hoves,Arial,"Helvetica Neue",Helvetica,sans-serif;color:#5f5f5f;margin-bottom:0} .panClean .searchfacets .desktop-header .btn-clear-all-facets{font-size:.8775rem;line-height:116%;padding:0} .panClean .searchfacets .desktop-header .btn-clear-all-facets:hover,.panClean .searchfacets .desktop-header .btn-clear-all-facets:focus{color:#5f5f5f;outline:0;box-shadow:none} .panClean .searchfacets .facet-header{display:flex;justify-content:space-between;align-items:center;cursor:pointer} .panClean .searchfacets .facet-header .h4{flex-grow:1;font-size:1.17rem;line-height:131%;color:#5f5f5f;margin:0;padding-right:15px} .panClean .searchfacets .facet-header .collapse-icon{display:inline-flex;width:30px;height:30px;border-radius:30px;justify-content:center;align-items:center;border:0;padding:0;background-color:#fff} .panClean .searchfacets .facet-header .collapse-icon i{width:30px;height:30px;background-image:url('/etc/clientlibs/clean/imgs/chevron-up-black.svg');background-position:center;background-size:24px 24px;transition:transform .15s ease-in} .panClean .searchfacets .facet-header.collapsed .collapse-icon i{transform:rotate(180deg)} .panClean .searchfacets .facet-list{list-style:none;padding:30px 0 0;margin:0} .panClean .searchfacets .facet-list+.facet-list{padding-top:0} .panClean .searchfacets .facet-list>li{padding:10px 0} .panClean .searchfacets .facet-list>li label{position:relative;display:inline-flex;justify-content:space-between;width:100%;font-size:1.02375rem;line-height:128%;font-weight:500;color:#5f5f5f;margin:0} .panClean .searchfacets .facet-list>li label i{flex-shrink:0;flex-basis:22px;display:inline-block;width:22px;height:22px;border-radius:2px;border:2px solid #b9b9b9;background-color:#fff} .panClean .searchfacets .facet-list>li label span{flex-grow:1;margin-left:20px} .panClean .searchfacets .facet-list>li label span.count{margin-left:0} .panClean .searchfacets .facet-list>li label input[type="checkbox"]{position:absolute;opacity:1;top:4px;left:5px;z-index:-1} .panClean .searchfacets .facet-list>li label input[type="checkbox"]:checked+i{background-image:url('/etc/clientlibs/clean/imgs/check-black.svg');background-position:center;background-size:20px 20px;background-repeat:no-repeat;border-color:#141414} .panClean .searchfacets .facet-list>li label input[type="checkbox"]:checked+i+span{color:#141414} .panClean .searchfacets .facet-list>li label input[type="checkbox"]:focus{outline:0;box-shadow:none} .panClean .searchfacets .facet-list>li label input[type="checkbox"]:focus+i{box-shadow:0 0 0 3px rgba(250,88,45,0.5)} .panClean .searchfacets .btn-toggle-facets{display:inline-flex;align-items:center;color:#141414;font-size:1.02375rem;line-height:100%} .panClean .searchfacets .mobile-header{display:none} @media(max-width:1199.98px){.panClean .searchfacets{display:flex;flex-direction:column;height:100%;position:relative;overflow:auto} .panClean .searchfacets .accordion{flex-grow:1} .panClean .searchfacets .desktop-header{padding:35px 30px 0} .panClean .searchfacets .mobile-header,.panClean .searchfacets>.actions{position:fixed;display:flex;align-items:center;justify-content:space-between;height:75px;background-color:#fff;padding:20px 30px;z-index:1;display:none} .panClean .searchfacets .mobile-header{box-shadow:0 4px 10px rgba(0,0,0,0.1);padding-right:0} .panClean .searchfacets .mobile-header .h3{font-size:1.31625rem;line-height:133%} .panClean .searchfacets>.actions{box-shadow:0 -4px 10px rgba(0,0,0,0.1)} .panClean .searchfacets>.actions .h3{font-size:.8775rem;line-height:150%;padding-right:30px} .panClean .searchfacets>.actions .h3 em{font-style:normal} .panClean .searchfacets>.actions .btn-primary.btn-sm{font-size:.8775rem} .panClean .searchfacets>.actions .btn-primary.btn-sm i{display:none} .panClean .searchfacets .accordion{padding:0 30px 30px;margin:0} .panClean .searchfacets .btn-close-mobile-facets{width:75px;height:75px;padding:0 30px;display:flex;justify-content:center;align-items:center;border-radius:8px} .panClean .searchfacets .btn-close-mobile-facets i{flex-shrink:0;flex-grow:0;flex-basis:24px;width:24px;height:24px;background-image:url('/etc/clientlibs/clean/imgs/x-black.svg');background-size:24px 24px;background-position:center;background-repeat:no-repeat} } @media(max-width:991.98px){.panClean .searchfacets .facet-section{padding:18px 0} .panClean .searchfacets .facet-header h3{font-size:1.17rem;line-height:131%} } @media(max-width:767.98px){.panClean .searchfacets .mobile-header{top:0;left:0;right:0} .panClean .searchfacets>.actions{bottom:0;left:0;right:0} .panClean .searchfacets>.actions .h3{font-size:1.02375rem} .panClean .searchfacets>.actions .btn-primary.btn-sm{font-size:1.02375rem} } @media(min-width:768px) and (max-width:1199.98px){.panClean .searchfacets{margin:0;background-color:#fff;overflow:auto;z-index:1} .panClean .searchfacets .mobile-header{top:45px;left:7.14285714vw;right:7.14285714vw;border-radius:10px 10px 0 0} .panClean .searchfacets>.actions{bottom:45px;left:7.14285714vw;right:7.14285714vw;border-radius:0 0 10px 10px} } @media(min-width:576px) and (max-width:991.98px){.panClean .searchfacets .facet-list{display:flex;flex-wrap:wrap} .panClean .searchfacets .facet-list>li{flex-grow:1;flex-shrink:1;flex-basis:50%;max-width:50%;display:inline-flex} .panClean .searchfacets .facet-list>li:nth-of-type(odd){padding-right:30px} .panClean .searchfacets .facet-list>li:nth-of-type(even){padding-left:30px} } @media(min-width:576px) and (max-width:767.98px){.panClean .searchfacets .facet-list>li:nth-of-type(odd){padding-right:15px} .panClean .searchfacets .facet-list>li:nth-of-type(even){padding-left:15px} } @media(min-width:1200px){.panClean .searchfacets>.actions{width:100%;display:flex;padding:15px 0} .panClean .searchfacets>.actions .h3{display:none} } .panClean .searchpagination{display:flex;justify-content:space-between;align-items:center;margin:30px 0 45px} .panClean .searchpagination .result-count-label{font-size:1.31625rem;line-height:133%;color:#141414} .panClean .searchpagination .pagination-wrap{display:flex;margin:0 auto;overflow:hidden} .panClean .searchpagination .pagination-wrap .pagination{display:flex;align-items:center;margin:0;padding:0} .panClean .searchpagination .pagination-wrap .pagination>li{display:inline-flex;height:24px;padding:0 15px} .panClean .searchpagination .pagination-wrap .pagination>li>button,.panClean .searchpagination .pagination-wrap .pagination>li>span{font-family:TT Hoves,Arial,"Helvetica Neue",Helvetica,sans-serif;font-weight:600;font-size:1.25rem;line-height:120%;color:#5f5f5f;padding:0;outline:0;border:0;background:0} .panClean .searchpagination .pagination-wrap .pagination>li>button:hover{text-decoration:none} .panClean .searchpagination .pagination-wrap .pagination>li.active>button,.panClean .searchpagination .pagination-wrap .pagination>li.active>span{color:#141414} .panClean .searchpagination .pagination-wrap .pagination>li.disabled span{color:#b9b9b9} .panClean .searchpagination .pagination-wrap .pagination>li.disabled span i{opacity:.33333} .panClean .searchpagination .pagination-wrap .icon-chevron-left,.panClean .searchpagination .pagination-wrap .icon-chevron-right{display:inline-flex;width:24px;height:24px;background-size:24px 24px;background-position:center;background-repeat:no-repeat} .panClean .searchpagination .pagination-wrap .icon-chevron-left{background-image:url('/etc/clientlibs/clean/imgs/chevron-left-black.svg')} .panClean .searchpagination .pagination-wrap .icon-chevron-right{background-image:url('/etc/clientlibs/clean/imgs/chevron-right-black.svg')} .panClean .searchpagination .sort-dropdown .btn-sort{display:inline-flex;align-items:center;background-color:#fff;border:0;font-size:1.31625rem;line-height:133%;padding:0 0 0 15px} .panClean .searchpagination .sort-dropdown .btn-sort::after{content:'';display:inline-flex;background-image:url('/etc/clientlibs/clean/imgs/chevron-down-black.svg');background-position:center;background-repeat:no-repeat;background-size:24px 24px;transition:transform .15s;margin-left:25px;border:0;width:24px;height:24px} .panClean .searchpagination .sort-dropdown .btn-sort em{font-style:normal;text-transform:capitalize} .panClean .searchpagination .sort-dropdown .btn-sort em:before{content:':';margin-right:10px} .panClean .searchpagination .sort-dropdown.show .btn-sort::after{transform:rotate(180deg)} .panClean .searchpagination .sort-dropdown .dropdown-menu{background:#fff;border-color:#fff;box-shadow:0 0 12px 2px rgba(0,0,0,0.2);border-radius:15px;min-width:244px;top:calc(100% + 15px)} .panClean .searchpagination .sort-dropdown .dropdown-menu>li{padding:0} .panClean .searchpagination .sort-dropdown .dropdown-menu>li button{width:100%;text-align:center;display:inline-block;border:0;font-size:1.17rem;line-height:131%;padding:8px 30px;color:#b9b9b9;font-family:TT Hoves,Arial,"Helvetica Neue",Helvetica,sans-serif;font-weight:600;background-color:#fff} .panClean .searchpagination .sort-dropdown .dropdown-menu>li button:hover{text-decoration:none;color:#141414} .panClean .searchpagination .sort-dropdown .dropdown-menu>li.active button{color:#141414} @media(max-width:1199.98px){.panClean .searchpagination .sort-dropdown .btn-sort,.panClean .searchpagination .result-count-label{font-size:1.17rem;line-height:125%} } @media(max-width:767.98px){.panClean .searchpagination{margin:15px 0 30px} .panClean .searchpagination .pagination-wrap{width:100%} .panClean .searchpagination .pagination-wrap .pagination{width:100%;justify-content:space-between} .panClean .searchpagination .pagination-wrap .pagination>li{padding:0 2px} .panClean .searchpagination .sort-dropdown .btn-sort{font-size:1.02375rem;line-height:142%} .panClean .searchpagination .sort-dropdown .btn-sort>span em{display:none} .panClean .searchpagination .result-count-label{font-size:1.02375rem;line-height:142%} } @media(max-width:575.98px){.panClean .searchpagination .pagination-wrap .pagination>li>button,.panClean .searchpagination .pagination-wrap .pagination>li>span{font-size:.8775rem} .panClean .searchpagination .searchpagination .pagination-wrap .icon-chevron-left,.panClean .searchpagination .searchpagination .pagination-wrap .icon-chevron-right{height:18px;width:18px;background-size:18px 18px;background-position:center;margin-bottom:-4px} .panClean .searchpagination .pagination-wrap .pagination>li.pager-gap{padding:0} } .panClean .searchfacets .escape-hatch{margin-top:40px;margin-bottom:40px;box-shadow:0 0 12px rgba(0,0,0,0.15);border-radius:8px;border-bottom:8px solid #141414;padding:30px;text-align:center} .panClean .searchfacets .escape-hatch .image{margin:0 auto 14px;min-width:40px;max-width:40px;max-height:40px;text-align:left} .panClean .searchfacets .escape-hatch .h6{font-size:1.17rem;line-height:137%;margin-bottom:14px} .panClean .searchfacets .escape-hatch.mobile{display:none} @media(max-width:1199.98px){.panClean .searchfacets .escape-hatch{margin-top:60px;display:none} .panClean .searchfacets .escape-hatch.mobile{display:block} } @media(max-width:767.98px){.panClean .searchfacets .escape-hatch{margin-top:40px} } @media(max-width:575.98px){.panClean .searchfacets .escape-hatch.mobile .btn-black.btn-sm{padding:8px 18px;font-size:.8775rem} } .panClean .searchbreadbox .breadbox{display:flex;flex-wrap:wrap;margin:0 -6px;padding:0;list-style:none;padding:30px 0 15px} .panClean .searchbreadbox .breadbox .heading{display:flex;justify-content:space-between;margin-bottom:30px} .panClean .searchbreadbox .breadbox .heading h3{font-size:1.02375rem;line-height:100%;color:#5f5f5f;padding-right:15px;margin:0} .panClean .searchbreadbox .breadbox .heading .remove-all{border:0;background:0;padding:0;color:#141414;font-size:.8775rem;line-height:116%;font-weight:600} .panClean .searchbreadbox .breadbox .badge{font-family:TT Hoves,Arial,"Helvetica Neue",Helvetica,sans-serif;margin:0 6px 12px;background-color:#f4f4f2;border-radius:17px;font-size:.804375rem;line-height:136%;font-weight:600;padding:10px 40px 10px 17px;border:0;position:relative;color:#5f5f5f;text-transform:capitalize;text-align:left} .panClean .searchbreadbox .breadbox .badge:after{position:absolute;right:17px;top:9px;width:16px;height:16px;content:'';background-image:url('/etc/clientlibs/clean/imgs/x-black.svg');background-position:center;background-size:16px 16px;background-repeat:no-repeat;opacity:.65} .panClean .searchbreadbox .breadbox .badge:focus{outline:0;box-shadow:0 0 0 3px rgba(250,88,45,0.5)} .panClean .searchbreadbox .breadbox .badge[onclick="cqsearch.removeSolrQuery();"]{display:none} @media(max-width:1199.98px){.panClean .searchbreadbox{padding:0 30px} .panClean .searchbreadbox .breadbox{border-bottom:1px solid #d8d8d8} } .panClean .searchfacets .desktop-header+.searchbreadbox .badge[onclick="cqsearch.removeAllSolrQueries();"]{display:none}.panClean .prisma-custom-background{position:relative} .panClean .prisma-custom-background.brandingBar:after{content:'';width:50%;height:35px;position:absolute;bottom:-18px;z-index:1} .panClean .prisma-custom-background.brandingBar.bottomRight:after{right:0} .panClean .prisma-custom-background.brandingBar.bottomLeft:after{left:0} .panClean .prisma-custom-background.brandingBar[data-custom-type="prisma"]:after{background-image:linear-gradient(270deg,#50d2e6 0,#14a7cf 100%)} .panClean .prisma-custom-background.brandingBar[data-custom-type="strata"]:after{background-image:linear-gradient(270deg,#ffcb06 0,#ea9b26 100%)} .panClean .prisma-custom-background.brandingBar[data-custom-type="cortex"]:after{background-image:linear-gradient(270deg,#0c6 0,#00a653 100%)} .panClean .prisma-custom-background.brandingBar[data-custom-type="default"]:after,.panClean .prisma-custom-background.brandingBar[data-custom-type="paloaltonetworks"]:after{background-image:linear-gradient(270deg,#fa582d 0,#ff2e00 100%)} .panClean .prisma-custom-background.brandingBar[data-custom-type="unit42"]:after{background-image:linear-gradient(270deg,#c84727 0,#e01f23 100%)} .panClean .prisma-custom-background.brandingBar[data-custom-type="okyo"]:after{background-image:linear-gradient(270deg,#7d87ff 0,#6e79ff 100%)} .panClean .prisma-custom-background.edit-mode{padding:100px 0 0} .panClean .prisma-custom-background .half-circle-svg{width:100%;position:absolute;top:1px;left:0;right:0;transform:translateY(-100%);z-index:1;overflow:hidden;pointer-events:none} .panClean .prisma-custom-background .half-circle-svg>svg{position:absolute;top:0;left:0;width:100%;height:100%} .panClean .prisma-custom-background .half-circle-svg.type-1{padding-bottom:18.75%} .panClean .prisma-custom-background .half-circle-svg.type-2{padding-bottom:4.427083%} .panClean .prisma-custom-background .half-circle-svg.type-3{padding-bottom:7.8125%} .panClean .prisma-custom-background .half-circle-svg.type-4{padding-bottom:9.375%} .panClean .prisma-custom-background .half-circle-svg.type-5{padding-bottom:10.4166667%;transform:translateY(100%);bottom:2px;top:auto} .panClean .prisma-custom-background .half-circle-svg.type-6{padding-bottom:10.4166667%} .panClean .prisma-custom-background .half-circle-svg.type-7{padding-bottom:9.4166667%;transform:translateY(100%);bottom:2px;top:auto} .panClean .prisma-custom-background .half-circle-svg.type-8{padding-bottom:9.375%} .panClean .prisma-custom-background .background-logo{background-repeat:no-repeat;position:absolute;top:0;left:0;right:0;bottom:0;z-index:0} .panClean .prisma-custom-background .prisma-custom-background-content{position:relative;z-index:1} @media(max-width:1399.98px){.panClean .prisma-custom-background .prismaDemandGenComp+.prismaTabsComp{margin-top:-50px} .panClean .prisma-custom-background .prismaInlineVideoFeature+.stickyListComp{margin-top:-75px} } @media(max-width:767.98px){.panClean .prisma-custom-background .prismaDemandGenComp+.prismaTabsComp{margin-top:-165px} .panClean .prisma-custom-background .prismaInlineVideoFeature+.stickyListComp{margin-top:-210px} } @media(max-width:575.98px){.panClean .prisma-custom-background .prismaDemandGenComp+.prismaTabsComp{margin-top:-210px} .panClean .prisma-custom-background .prismaInlineVideoFeature+.stickyListComp{margin-top:-275px} }.panClean .linkHelper .darwin-button .btn-primary.video i,.panClean .linkHelper .darwin-button .btn-primary-outline.video i,.panClean .linkHelper .darwin-button .btn-white.video i{background-image:url('/etc/clientlibs/clean/imgs/darwin_play_icon_black.svg')} .panClean .linkHelper .darwin-button .btn-black.video i{background-image:url('/etc/clientlibs/clean/imgs/darwin_play_icon_white.svg')} .panClean .linkHelper [data-type="strata"] .btn:focus,.panClean .linkHelper [data-type="strata"].btn:focus,.panClean .linkHelper [data-type="strata"] .btn.focus,.panClean .linkHelper [data-type="strata"].btn.focus{box-shadow:0 0 0 3px rgba(255,203,6,0.5)} .panClean .linkHelper [data-type="strata"] .btn-primary{background-color:#ffcb06} .panClean .linkHelper [data-type="strata"] .btn-primary:hover{background-color:#ffd639} .panClean .linkHelper [data-type="strata"] .btn-primary:active{background-color:#f6c200} .panClean .linkHelper [data-type="strata"] .btn-primary-outline{border-color:#ffcb06} .panClean .linkHelper [data-type="strata"] .btn-primary-outline:hover{background-color:#ffcb06} .panClean .linkHelper [data-type="strata"] .btn-primary-outline:active{background-color:#f6c200} .panClean .linkHelper [data-type="strata"].btn-shadow{background-image:linear-gradient(to right,#ffcb06,#ffca01)} .panClean .linkHelper [data-type="strata"].btn-shadow:hover i{background-image:url('/etc/clientlibs/clean/imgs/icon-strata-white.svg') !important} .panClean .linkHelper [data-type="strata"].btn-shadow i{background-image:url('/etc/clientlibs/clean/imgs/icon-strata-black.svg')} .panClean .linkHelper [data-type="strata"].btn-shadow:focus{box-shadow:0 0 0 3px rgba(255,203,6,0.5) !important} .panClean .linkHelper [data-type="prisma"] .btn:focus,.panClean .linkHelper [data-type="prisma"].btn:focus,.panClean .linkHelper [data-type="prisma"] .btn.focus,.panClean .linkHelper [data-type="prisma"].btn.focus{box-shadow:0 0 0 3px rgba(0,192,232,0.5)} .panClean .linkHelper [data-type="prisma"] .btn-primary{background-color:#00c0e8} .panClean .linkHelper [data-type="prisma"] .btn-primary:hover{background-color:#02d3ff} .panClean .linkHelper [data-type="prisma"] .btn-primary:active{background-color:#00b3d9} .panClean .linkHelper [data-type="prisma"] .btn-primary-outline{border-color:#00c0e8} .panClean .linkHelper [data-type="prisma"] .btn-primary-outline:hover{background-color:#00c0e8} .panClean .linkHelper [data-type="prisma"] .btn-primary-outline:active{background-color:#00b3d9} .panClean .linkHelper [data-type="prisma"].btn-shadow{background-image:linear-gradient(to right,#00c0e8,#0096b5)} .panClean .linkHelper [data-type="prisma"].btn-shadow i{background-image:url('/etc/clientlibs/clean/imgs/icon-prisma-black.svg')} .panClean .linkHelper [data-type="prisma"].btn-shadow:hover{color:#fff} .panClean .linkHelper [data-type="prisma"].btn-shadow:hover i{background-image:url('/etc/clientlibs/clean/imgs/icon-prisma-white.svg') !important} .panClean .linkHelper [data-type="prisma"].btn-shadow:focus{box-shadow:0 0 0 3px rgba(0,192,232,0.5) !important} .panClean .linkHelper [data-type="cortex"] .btn:focus,.panClean .linkHelper [data-type="cortex"].btn:focus,.panClean .linkHelper [data-type="cortex"] .btn.focus,.panClean .linkHelper [data-type="cortex"].btn.focus{box-shadow:0 0 0 3px rgba(0,204,102,0.5)} .panClean .linkHelper [data-type="cortex"] .btn-primary{background-color:#0c6} .panClean .linkHelper [data-type="cortex"] .btn-primary:hover{background-color:#00e673} .panClean .linkHelper [data-type="cortex"] .btn-primary:active{background-color:#00bd5e} .panClean .linkHelper [data-type="cortex"] .btn-primary-outline{border-color:#0c6} .panClean .linkHelper [data-type="cortex"] .btn-primary-outline:hover{background-color:#0c6} .panClean .linkHelper [data-type="cortex"] .btn-primary-outline:active{background-color:#00bd5e} .panClean .linkHelper [data-type="cortex"].btn-shadow{background-image:linear-gradient(to right,#0c6,#00a653)} .panClean .linkHelper [data-type="cortex"].btn-shadow i{background-image:url('/etc/clientlibs/clean/imgs/icon-cortex-black.svg')} .panClean .linkHelper [data-type="cortex"].btn-shadow:hover{color:#fff} .panClean .linkHelper [data-type="cortex"].btn-shadow:hover i{background-image:url('/etc/clientlibs/clean/imgs/icon-cortex-white.svg') !important} .panClean .linkHelper [data-type="cortex"].btn-shadow:focus{box-shadow:0 0 0 3px rgba(0,204,102,0.5) !important} .panClean .linkHelper [data-type="prismaCloudReBrand"] .btn:focus,.panClean .linkHelper [data-type="prismaCloudReBrand"].btn:focus,.panClean .linkHelper [data-type="prismaCloudReBrand"] .btn.focus,.panClean .linkHelper [data-type="prismaCloudReBrand"].btn.focus{box-shadow:0 0 0 3px rgba(0,204,102,0.5)} .panClean .linkHelper [data-type="prismaCloudReBrand"] .btn-primary{background-color:#0c6} .panClean .linkHelper [data-type="prismaCloudReBrand"] .btn-primary:hover{background-color:#00e673} .panClean .linkHelper [data-type="prismaCloudReBrand"] .btn-primary:active{background-color:#00bd5e} .panClean .linkHelper [data-type="prismaCloudReBrand"] .btn-primary-outline{border-color:#0c6} .panClean .linkHelper [data-type="prismaCloudReBrand"] .btn-primary-outline:hover{background-color:#0c6} .panClean .linkHelper [data-type="prismaCloudReBrand"] .btn-primary-outline:active{background-color:#00bd5e} .panClean .linkHelper [data-type="prismaCloudReBrand"].btn-shadow{background-image:linear-gradient(to right,#0c6,#00a653)} .panClean .linkHelper [data-type="prismaCloudReBrand"].btn-shadow i{background-image:url('/etc/clientlibs/clean/imgs/icon-prismaRebrand-black.svg')} .panClean .linkHelper [data-type="prismaCloudReBrand"].btn-shadow:hover{color:#fff} .panClean .linkHelper [data-type="prismaCloudReBrand"].btn-shadow:hover i{background-image:url('/etc/clientlibs/clean/imgs/icon-prismaRebrand-white.svg') !important} .panClean .linkHelper [data-type="prismaCloudReBrand"].btn-shadow:focus{box-shadow:0 0 0 3px rgba(0,204,102,0.5) !important} .panClean .linkHelper [data-type="unit42"] .btn:focus,.panClean .linkHelper [data-type="unit42"].btn:focus,.panClean .linkHelper [data-type="unit42"] .btn.focus,.panClean .linkHelper [data-type="unit42"].btn.focus{box-shadow:0 0 0 3px #c84727} .panClean .linkHelper [data-type="unit42"] .btn-primary{background-color:#c84727} .panClean .linkHelper [data-type="unit42"] .btn-primary:hover{background-color:#db6447} .panClean .linkHelper [data-type="unit42"] .btn-primary:active{background-color:#bb4225} .panClean .linkHelper [data-type="unit42"] .btn-primary-outline{border-color:#c84727} .panClean .linkHelper [data-type="unit42"] .btn-primary-outline:hover{background-color:#c84727} .panClean .linkHelper [data-type="unit42"] .btn-primary-outline:active{background-color:#bb4225} .panClean .linkHelper [data-type="unit42"].btn-shadow{background-image:linear-gradient(to right,#c84727,#e01f23)} .panClean .linkHelper [data-type="unit42"].btn-shadow i{background-image:url('/etc/clientlibs/clean/imgs/icon-Unit42-black.svg')} .panClean .linkHelper [data-type="unit42"].btn-shadow:hover{color:#fff} .panClean .linkHelper [data-type="unit42"].btn-shadow:hover i{background-image:url('/etc/clientlibs/clean/imgs/icon-Unit42-white.svg') !important} .panClean .linkHelper [data-type="unit42"].btn-shadow:focus{box-shadow:0 0 0 3px #c84727 !important} .panClean .linkHelper [data-type="default"] .btn-primary,.panClean .linkHelper [data-type="paloaltonetworks"] .btn-primary{background-color:#fa582d} .panClean .linkHelper [data-type="default"] .btn-primary:focus,.panClean .linkHelper [data-type="paloaltonetworks"] .btn-primary:focus{box-shadow:0 0 0 3px rgba(250,88,45,0.5)} .panClean .linkHelper [data-type="default"] .btn-primary:hover,.panClean .linkHelper [data-type="paloaltonetworks"] .btn-primary:hover{background-color:#fb7652} .panClean .linkHelper [data-type="default"] .btn-primary:active,.panClean .linkHelper [data-type="paloaltonetworks"] .btn-primary:active{background-color:#f94414} .panClean .linkHelper [data-type="default"].btn-shadow,.panClean .linkHelper [data-type="paloaltonetworks"].btn-shadow{background-image:linear-gradient(to right,#fa582d,#ff2e00)} .panClean .linkHelper [data-type="default"].btn-shadow i,.panClean .linkHelper [data-type="paloaltonetworks"].btn-shadow i{background-image:url('/etc/clientlibs/clean/imgs/logo-default-black.svg') !important} .panClean .linkHelper [data-type="default"].btn-shadow:focus,.panClean .linkHelper [data-type="paloaltonetworks"].btn-shadow:focus{box-shadow:0 0 0 3px rgba(250,88,45,0.5) !important} .panClean .linkHelper [data-type="default"].btn-shadow:hover,.panClean .linkHelper [data-type="paloaltonetworks"].btn-shadow:hover{color:#fff} .panClean .linkHelper [data-type="default"].btn-shadow:hover i,.panClean .linkHelper [data-type="paloaltonetworks"].btn-shadow:hover i{background-image:url('/etc/clientlibs/clean/imgs/logo-default-white.svg') !important}.panClean .prismaHeroComp .prismabootcamppage .linkHelper a{visibility:hidden} .panClean .prismaHeroComp .prismabootcamppage .linkHelper a.visible{visibility:visible} .panClean .prismaHeroComp .region{margin-bottom:10px} .panClean .prismaHeroComp .region.invisible{visibility:hidden} @media(min-width:768px){.panClean .prismaHeroComp .region{margin-bottom:18px} } @media(min-width:992px){.panClean .prismaHeroComp .region{margin-bottom:22px} } .panClean .prismaHeroComp .region span{font-family:TT Hoves,Arial,"Helvetica Neue",Helvetica,sans-serif;font-style:normal;font-weight:500;font-size:.73rem;line-height:1.2;color:#141414;padding:2px 10px 4px 10px;background:#00bfe7;border-radius:5px} @media(min-width:992px){.panClean .prismaHeroComp .region span{font-size:1.02rem;font-weight:600} } .panClean .prismaHeroComp .prisma-bootcamp-banner-info-badge{margin-top:15px} .panClean .prismaHeroComp .prisma-bootcamp-banner-info-badge .badge-title{font-family:TT Hoves,Arial,"Helvetica Neue",Helvetica,sans-serif;font-style:normal;font-weight:700;font-size:.877rem;line-height:1.5rem;color:#ffff;display:inline-block;margin-top:15px} .panClean .prismaHeroComp .prisma-bootcamp-banner-info-badge .badge-title.invisible{visibility:hidden} .panClean .prismaHeroComp .prisma-bootcamp-banner-info-badge .badge-title.date i{background-image:url('/etc/clientlibs/clean/imgs/prisma/date_white.svg')} .panClean .prismaHeroComp .prisma-bootcamp-banner-info-badge .badge-title.time i{background-image:url('/etc/clientlibs/clean/imgs/prisma/Icon_library_clock_white.svg')} .panClean .prismaHeroComp .prisma-bootcamp-banner-info-badge .badge-title.mode i{background-image:url('/etc/clientlibs/clean/imgs/prisma/Icon_library_computer_white.svg')} .panClean .prismaHeroComp .prisma-bootcamp-banner-info-badge .badge-title.learners i{background-image:url('/etc/clientlibs/clean/imgs/prisma/Icon_library_people_white.svg')} .panClean .prismaHeroComp .prisma-bootcamp-banner-info-badge .badge-title.regions i{background-image:url('/etc/clientlibs/clean/imgs/prisma/continent_icon.svg')} .panClean .prismaHeroComp .prisma-bootcamp-banner-info-badge .badge-title:not(:last-child){margin-right:12px} @media(min-width:992px){.panClean .prismaHeroComp .prisma-bootcamp-banner-info-badge .badge-title:not(:last-child){margin-right:30px} } @media(min-width:992px){.panClean .prismaHeroComp .prisma-bootcamp-banner-info-badge .badge-title{font-weight:700;font-size:1.02rem;line-height:1.21} } .panClean .prismaHeroComp .prisma-bootcamp-banner-info-badge .badge-title i{background-repeat:no-repeat;width:20px;height:15px;background-size:contain;display:inline-block;vertical-align:text-top;margin-right:5px} .panClean .prismaHeroComp .prismaHero-overlay-grey:after{content:'';position:absolute;left:0;right:0;top:0;bottom:0;background-color:rgba(0,0,0,0.3)} .panClean .prismaHeroComp .prismaHero-overlay-black:after{content:'';position:absolute;left:0;right:0;top:0;bottom:0;background-color:rgba(0,0,0,0.5)} .panClean .prismaHeroComp hr.waypoint{margin:0;border:0;height:0} .panClean .prismaHeroComp .title-icon{font-family:TT Hoves,Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:1.31rem;line-height:1.33;display:flex;align-items:center} .panClean .prismaHeroComp .title-icon::before{content:"";width:52px;height:52px;background-position:center;background-size:contain;background-repeat:no-repeat;margin-right:14px} .panClean .prismaHeroComp .modal{display:none} .panClean .prismaHeroComp .hidden-image{display:none} .panClean .prismaHeroComp .active-image{display:block} .panClean .prismaHeroComp .prisma-hero-modal{left:50%;transform:translateX(-50%);max-width:100%} .panClean .prismaHeroComp .prisma-hero-modal.show{display:block} .panClean .prismaHeroComp .prisma-hero-modal .modal-dialog{max-width:1140px} .panClean .prismaHeroComp .prisma-hero-modal .modal-body{margin:50px 0;padding:0;max-height:calc(100vh - 100px);display:flex;justify-content:center;align-items:center} .panClean .prismaHeroComp .prisma-hero-modal .modal-body img{max-width:100%;box-shadow:0 4px 20px rgba(0,0,0,0.25);max-height:calc(100vh - 186px);border-radius:16px;object-fit:contain;font-family:"object-fit: contain;"} .panClean .prismaHeroComp .prisma-hero-modal .modal-content{border:0;border-radius:0;outline:0;background:0} .panClean .prismaHeroComp .prisma-hero-modal .close-hero-image{background:0;border:0;width:30px;height:30px;border-radius:30px;padding:0;display:flex;justify-content:center;align-items:center;align-self:flex-end} .panClean .prismaHeroComp .prisma-hero-modal .close-hero-image:focus{outline:0;box-shadow:0 0 0 3px rgba(0,192,232,0.5)} .panClean .prismaHeroComp .prisma-hero-modal[data-type="cortex"] .close-hero-image:focus{box-shadow:0 0 0 3px rgba(0,232,96,0.5)} .panClean .prismaHeroComp .open-image{width:100%;display:flex;cursor:pointer} .panClean .prismaHeroComp .ar-8-5{box-shadow:0 4px 20px rgba(0,0,0,0.25)} .panClean .prismaHeroComp .hero-images{flex-direction:column;display:flex;justify-content:center;position:static;z-index:1} .panClean .prismaHeroComp .hero-images .image-container{position:absolute;max-width:42%;width:42%;border-radius:16px;max-height:calc(100% - 200px);display:flex} .panClean .prismaHeroComp .hero-images .image-container figure{border-top-left-radius:16px} .panClean .prismaHeroComp .hero-images .image-container img{border-top-left-radius:16px;object-fit:unset;font-family:'object-fit: unset;'} .panClean .prismaHeroComp .hero-images .image-container:last-of-type{z-index:-1;bottom:-3.57142857vw;right:7.14285714vw} .panClean .prismaHeroComp .hero-images .image-container:last-of-type .open-image{animation-delay:.25s;animation-duration:.75s} .panClean .prismaHeroComp .hero-images .image-container:first-of-type{z-index:0;bottom:0;right:0} .panClean .prismaHeroComp .hero-slider-hortizontal-dots{display:none} @media(max-width:1599.98px){.panClean .prismaHeroComp .hero-images .image-container{max-width:47.5%;width:47.5%} .panClean .prismaHeroComp .hero-images .image-container:last-of-type{right:7.14285714vw;bottom:-3.57142857vw} .panClean .prismaHeroComp .hero-images .image-container:first-of-type{right:0;bottom:0} } @media(max-width:1199.98px){.panClean .prismaHeroComp .hero-images .image-container{max-width:50%;width:50%} .panClean .prismaHeroComp .hero-images .image-container:last-of-type{right:14.2857143vw;bottom:-7.14285714vw} .panClean .prismaHeroComp .hero-images .image-container:first-of-type{right:-78.5714286vw;right:0;bottom:0} } @media(max-width:1199.98px) and (min-width:768px){.panClean .prismaHeroComp .hero-images .image-container:last-of-type{right:7.14285714vw} .panClean .prismaHeroComp .hero-images .image-container:first-of-type{right:0} } @media(max-width:991.98px){.panClean .prismaHeroComp .dialog{margin:50px 30px} } @media(max-width:767.98px){.panClean .prismaHeroComp .hero-images{height:56vw} .panClean .prismaHeroComp .hero-images .image-container{max-width:78.5714286vw;width:78.5714286vw} .panClean .prismaHeroComp .hero-images .image-container:last-of-type{right:14.2857143vw;bottom:-7.14285714vw} .panClean .prismaHeroComp .hero-images .image-container:first-of-type{right:0;bottom:0} .panClean .prismaHeroComp .hero-slider-hortizontal-dots.show{display:flex} } @media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.panClean .prismaHeroComp .hero-images{z-index:0} .panClean .prismaHeroComp .hero-images .image-container:last-of-type{z-index:0} .panClean .prismaHeroComp .hero-images .image-container:first-of-type{z-index:1} .panClean .prismaHeroComp .prisma-hero-modal .modal-content{align-items:center} .panClean .prismaHeroComp .prisma-hero-modal .modal-body{display:block} } .panClean .prisma-hero{overflow:hidden;position:relative;background-size:cover;background-repeat:no-repeat;padding:80px 0} .panClean .prisma-hero .hidden-image{display:none} .panClean .prisma-hero .open-image{width:100%;display:flex;cursor:pointer} .panClean .prisma-hero .background-logo{background-repeat:no-repeat;position:absolute;top:0;left:0;right:0;bottom:0;z-index:0} .panClean .prisma-hero .background-logo.center{background-position:center center} .panClean .prisma-hero .background-logo.center-left{background-position:left center} .panClean .prisma-hero .background-logo.center-right{background-position:right center} .panClean .prisma-hero .background-logo.top-left{background-position:left top} .panClean .prisma-hero .background-logo.top-right{background-position:right top} .panClean .prisma-hero .background-logo.top-center{background-position:center top} .panClean .prisma-hero .background-logo.bottom-left{background-position:left bottom} .panClean .prisma-hero .background-logo.bottom-right{background-position:right bottom} .panClean .prisma-hero .background-logo.bottom-center{background-position:center bottom} .panClean .prisma-hero .background-logo.auto{background-size:auto} .panClean .prisma-hero .background-logo.cover{background-size:cover} .panClean .prisma-hero .background-logo.contain{background-size:contain} .panClean .prisma-hero .title{max-width:100%;margin-bottom:20px} .panClean .prisma-hero .description.h6{font-size:1.60rem;line-height:1.45;letter-spacing:0;font-weight:600;font-family:TT Hoves,Arial,"Helvetica Neue",Helvetica,sans-serif} .panClean .prisma-hero .description.smallDecimal{font-size:1.17rem;line-height:1.38;letter-spacing:0;font-weight:600;font-family:TT Hoves,Arial,"Helvetica Neue",Helvetica,sans-serif} .panClean .prisma-hero .description.display-1{font-size:1.02rem;line-height:1.71;margin-bottom:40px} .panClean .prisma-hero .small-title{padding:0;border:0} .panClean .prisma-hero .title-brand{margin-bottom:0} .panClean .prisma-hero.image-type-homePage .description.h5{font-weight:600} .panClean .prisma-hero.image-type-homePage .hero-images .image-container{max-width:66.666667%;width:66.666667%;max-height:calc(100% - 150px)} .panClean .prisma-hero.image-type-homePage .hero-images .image-container:last-of-type{right:calc(14.2857143vw - 25vw);bottom:-3.57142857vw} .panClean .prisma-hero.image-type-homePage .hero-images .image-container:first-of-type{right:-25vw;bottom:0} .panClean .prisma-hero.image-type-homePage .background-logo.custom-homepage{background-image:url('/etc/clientlibs/clean/imgs/prisma/prisma-beams.svg') !important} .panClean .prisma-hero.image-type-default .background-logo.custom-environments{background-image:url('/etc/clientlibs/clean/imgs/prisma/prisma-beams-reversed.svg') !important} .panClean .prisma-hero .content{position:relative;z-index:1} .panClean .prisma-hero .eyebrow{margin-bottom:0 !important;padding:15px 0 20px} .panClean .prisma-hero .actions{display:flex;flex-direction:column;align-items:flex-start;margin-top:40px} .panClean .prisma-hero .actions .btn-primary{margin-bottom:20px} .panClean .prisma-hero .linkHelper .list-unstyled{display:flex;flex-direction:column;align-items:flex-start;margin-bottom:0} .panClean .prisma-hero .linkHelper .list-unstyled .btn{margin-bottom:20px !important} .panClean .prisma-hero .linkHelper .list-unstyled:first-of-type{margin-top:40px} .panClean .prisma-hero .sub-title{font-weight:600} .panClean .prisma-hero .hero-text{z-index:999} .panClean .prisma-hero .title-brand{display:flex;flex-direction:column} .panClean .prisma-hero form{margin-bottom:25px;margin-top:16px} .panClean .prisma-hero .form-field{width:100%;max-width:300px;position:relative;margin:0 20px 20px 0} .panClean .prisma-hero .form-field input{width:100%;border:1px solid #7d7d7d;background-color:#101010;padding:10px 15px;margin:0 0 10px;font-family:CelestePro,Georgia,serif;font-weight:400;font-size:1.17rem} .panClean .prisma-hero .form-field input::-webkit-input-placeholder{color:#767676} .panClean .prisma-hero .form-field input::-moz-placeholder{color:#767676} .panClean .prisma-hero .form-field input:-ms-input-placeholder{color:#767676} .panClean .prisma-hero .form-field input:-moz-placeholder{color:#767676} .panClean .prisma-hero .form-field input::placeholder{color:#767676} .panClean .prisma-hero .form-field input:focus{outline:0;box-shadow:0 0 0 3px rgba(250,88,45,0.5)} .panClean .prisma-hero .form-field input:invalid:not(:focus):not(:placeholder-shown),.panClean .prisma-hero .form-field input:invalid:focus:not(:placeholder-shown){border-color:#e01f23} .panClean .prisma-hero .form-field input:invalid:not(:focus):not(:placeholder-shown)+.validation,.panClean .prisma-hero .form-field input:invalid:focus:not(:placeholder-shown)+.validation{height:30px;color:#e01f23} .panClean .prisma-hero .form-field input:invalid:not(:focus):not(:placeholder-shown)+.validation+.validation-icon,.panClean .prisma-hero .form-field input:invalid:focus:not(:placeholder-shown)+.validation+.validation-icon{visibility:visible;opacity:1;background-image:url('/etc/clientlibs/clean/imgs/info-red.svg')} .panClean .prisma-hero .form-field input:valid{border-color:#d8d8d8} .panClean .prisma-hero .form-field input:valid+.validation{height:0} .panClean .prisma-hero .form-field input:valid+.validation+.validation-icon{visibility:visible;opacity:1;background-image:url('/etc/clientlibs/clean/imgs/check-green.svg')} .panClean .prisma-hero .form-field input.empty{border-color:#e01f23} .panClean .prisma-hero .form-field input.empty+.validation{height:30px;color:#e01f23} .panClean .prisma-hero .form-field input.empty+.validation+.validation-icon{visibility:visible;opacity:1;background-image:url('/etc/clientlibs/clean/imgs/info-red.svg')} .panClean .prisma-hero .form-field .validation{font-weight:600;height:0;width:100%;overflow:hidden;will-change:height;transition:height .25s ease-in-out} .panClean .prisma-hero .form-field .validation-icon{position:absolute;left:-38px;top:15px;width:23px;height:23px;background-position:center;background-size:auto;background-repeat:no-repeat;visibility:hidden;opacity:0;will-change:visibility,opacity;transition:visibility .25s ease-in-out,opacity .25s ease-in-out} .panClean .prisma-hero .interaction{display:flex} @media(max-width:1399.98px){.panClean .prisma-hero .interaction{flex-direction:column} } @media(max-width:991.98px){.panClean .prisma-hero{background-position:center;padding-top:125px} .panClean .prisma-hero .content{padding:7.14285714vw 0} .panClean .prisma-hero .eyebrow:before{width:25px} .panClean .prisma-hero .btn-primary{font-size:.87rem} .panClean .prisma-hero .btn-link{font-size:1.02rem} } @media(max-width:767.98px){.panClean .prisma-hero{padding-bottom:0} .panClean .prisma-hero .title{letter-spacing:-1px} .panClean .prisma-hero .title.h2,.panClean .prisma-hero .title.h1,.panClean .prisma-hero .title.h3,.panClean .prisma-hero .title.h4,.panClean .prisma-hero .title.h5,.panClean .prisma-hero .title.h6{font-size:2.34rem} .panClean .prisma-hero .description.h5,.panClean .prisma-hero .description.h6{font-size:1.02rem;line-height:1.5em;font-weight:500;margin-bottom:22px} .panClean .prisma-hero .description.smallDecimal{font-size:1.02rem} .panClean .prisma-hero .description.display-1{margin-bottom:22px} .panClean .prisma-hero .btn-primary{font-size:.877rem} .panClean .prisma-hero.image-type-homePage .background-logo.custom-homepage{background-size:contain;background-position:right bottom} .panClean .prisma-hero.image-type-homePage .hero-images{height:50vw} .panClean .prisma-hero.image-type-homePage .hero-images .image-container:last-of-type{right:14.2857143vw;bottom:-7.14285714vw} .panClean .prisma-hero.image-type-homePage .hero-images .image-container:first-of-type{right:0;bottom:-2vw} .panClean .prisma-hero.image-type-homePage .hero-images .image-container figure{border-top-left-radius:8px} .panClean .prisma-hero.image-type-homePage .hero-images .image-container img{border-top-left-radius:8px} .panClean .prisma-hero.image-type-default .background-logo.custom-environments{background-size:auto 50%;background-position:50% 50%} } @media(max-width:575.98px){.panClean .prisma-hero h1{word-break:break-word} .panClean .prisma-hero.image-type-homePage .hero-images{height:60vw} .panClean .prisma-hero.image-type-default .background-logo.custom-environments{background-position:50% 75%} } @media(min-width:576px){.panClean .prisma-hero .container-fluid{width:85.71428%} } @media(min-width:768px){.panClean .prisma-hero .to-animate{opacity:0} .panClean .prisma-hero .description.h5{font-size:1.17rem;line-height:1.5em} .panClean .prisma-hero.image-type-homePage .background-logo.custom-homepage{background-attachment:fixed;background-position:calc(50% + 260px) 0} .panClean .prisma-hero.image-type-default .background-logo.custom-environments{background-attachment:fixed;background-position:calc(50% + 110px) 100px} } @media(min-width:768px) and (max-width:991.98px){.panClean .prisma-hero .title.h2,.panClean .prisma-hero .title.h1,.panClean .prisma-hero .title.h3,.panClean .prisma-hero .title.h4,.panClean .prisma-hero .title.h5,.panClean .prisma-hero .title.h6{font-size:2.34rem;line-height:1.25em} } @media(min-width:992px){.panClean .prisma-hero{padding-top:152px;background-position:left bottom} .panClean .prisma-hero .content{padding:7.14285714vw 0;padding-bottom:calc(7.14285714vw + 55px)} .panClean .prisma-hero .description.h5{font-size:1.31rem} .panClean .prisma-hero .actions .btn-primary{margin-bottom:1.2vw} .panClean .prisma-hero .linkHelper .list-unstyled .btn{margin-bottom:1.2vw !important} } @media(min-width:992px) and (max-width:1399.98px){.panClean .prisma-hero .title .h2,.panClean .prisma-hero .title .h1,.panClean .prisma-hero .title .h3,.panClean .prisma-hero .title .h4,.panClean .prisma-hero .title .h5,.panClean .prisma-hero .title .h6{font-size:2.34rem;line-height:1.25em;font-size:calc(2rem + (48 - 37) *((100vw - 992px) /(1400 - 992)))} } @media(min-width:1200px){.panClean .prisma-hero{padding:240px 0 150px 0} .panClean .prisma-hero .content{padding:7.14285714vw 0} .panClean .prisma-hero .description.h5{font-size:1.46rem;line-height:1.3333333em} .panClean .prisma-hero.image-type-homePage .hero-images .image-container{max-height:calc(100% - 200px)} .panClean .prisma-hero.image-type-homePage .background-logo.custom-homepage{background-position:calc(50% + 150px) 0} .panClean .prisma-hero.image-type-default .background-logo.custom-environments{background-position:calc(50% + 110px) 0} } @media(min-width:1400px){.panClean .prisma-hero.image-type-homePage{padding:340px 0 150px 0} .panClean .prisma-hero.image-type-homePage .title{margin-bottom:45px} .panClean .prisma-hero .description.h5{font-size:1.60rem} } @media(min-width:1920px){.panClean .prisma-hero.image-type-homePage .hero-images .image-container{max-height:calc(100% - 250px)} .panClean .prisma-hero.image-type-homePage .description.h5{margin-bottom:58px} .panClean .prisma-hero.image-type-homePage .background-logo.custom-homepage{background-size:auto 75%} .panClean .prisma-hero.image-type-default .background-logo.custom-environments{background-size:auto} .panClean .prisma-hero .title{margin-bottom:30px} .panClean .prisma-hero .description.h5{font-size:1.755rem} } .panClean .prisma-hero .breadcrumbs.breadcrumbs-trust-center{z-index:1;display:flex;flex-direction:row;align-items:center;padding-top:8px;padding-bottom:8px;margin-bottom:40px;position:relative;width:100%} .panClean .prisma-hero .breadcrumbs.breadcrumbs-trust-center i{background-repeat:no-repeat;background-image:url('/etc/clientlibs/clean/imgs/arrow-left-white.svg');width:20px;height:14px;margin-right:10px} .panClean .prisma-hero .breadcrumbs.breadcrumbs-trust-center .actions{margin-top:0} .panClean .prisma-hero .breadcrumbs.breadcrumbs-trust-center .actions a{color:#fff;font-family:TT Hoves,Arial,"Helvetica Neue",Helvetica,sans-serif} @media(min-width:1200px){.panClean .prisma-hero .breadcrumbs.breadcrumbs-trust-center{position:absolute;top:21%} } .panClean .prisma-hero.hero-bg-white,.panClean .pan-gtm_bg_video-hero.hero-bg-white,.panClean .prismahero.hero-bg-white,.panClean .prismaHeroSlider.hero-bg-white{background-color:#fff} .panClean .prisma-hero.hero-bg-gray,.panClean .pan-gtm_bg_video-hero.hero-bg-gray,.panClean .prismahero.hero-bg-gray,.panClean .prismaHeroSlider.hero-bg-gray{background-color:#f4f4f2} .panClean .prisma-hero.hero-bg-black,.panClean .pan-gtm_bg_video-hero.hero-bg-black,.panClean .prismahero.hero-bg-black,.panClean .prismaHeroSlider.hero-bg-black{background-color:#141414} .panClean .prisma-hero.hero-theme-light *:not(.btn),.panClean .pan-gtm_bg_video-hero.hero-theme-light *:not(.btn),.panClean .prismahero.hero-theme-light *:not(.btn),.panClean .prismaHeroSlider.hero-theme-light *:not(.btn){color:#141414} .panClean .prisma-hero.hero-theme-light *:not(.btn).hero-legal,.panClean .pan-gtm_bg_video-hero.hero-theme-light *:not(.btn).hero-legal,.panClean .prismahero.hero-theme-light *:not(.btn).hero-legal,.panClean .prismaHeroSlider.hero-theme-light *:not(.btn).hero-legal{color:#5f5f5f} .panClean .prisma-hero.hero-theme-light .form-field input,.panClean .pan-gtm_bg_video-hero.hero-theme-light .form-field input,.panClean .prismahero.hero-theme-light .form-field input,.panClean .prismaHeroSlider.hero-theme-light .form-field input{background:0} .panClean .prisma-hero.hero-theme-dark *:not(.btn),.panClean .pan-gtm_bg_video-hero.hero-theme-dark *:not(.btn),.panClean .prismahero.hero-theme-dark *:not(.btn),.panClean .prismaHeroSlider.hero-theme-dark *:not(.btn){color:#fff} .panClean .prisma-hero.hero-theme-dark *:not(.btn).hero-legal,.panClean .pan-gtm_bg_video-hero.hero-theme-dark *:not(.btn).hero-legal,.panClean .prismahero.hero-theme-dark *:not(.btn).hero-legal,.panClean .prismaHeroSlider.hero-theme-dark *:not(.btn).hero-legal{color:#c4c4c4} .panClean .prisma-hero.hero-bg-gradient[data-type="default"],.panClean .pan-gtm_bg_video-hero.hero-bg-gradient[data-type="default"],.panClean .prismahero.hero-bg-gradient[data-type="default"],.panClean .prismaHeroSlider.hero-bg-gradient[data-type="default"],.panClean .prisma-hero.hero-bg-gradient[data-type="paloaltonetworks"],.panClean .pan-gtm_bg_video-hero.hero-bg-gradient[data-type="paloaltonetworks"],.panClean .prismahero.hero-bg-gradient[data-type="paloaltonetworks"],.panClean .prismaHeroSlider.hero-bg-gradient[data-type="paloaltonetworks"]{background-image:linear-gradient(to right,#7b3a2c,#fa582d)} .panClean .prisma-hero.hero-bg-gradient[data-type="strata"],.panClean .pan-gtm_bg_video-hero.hero-bg-gradient[data-type="strata"],.panClean .prismahero.hero-bg-gradient[data-type="strata"],.panClean .prismaHeroSlider.hero-bg-gradient[data-type="strata"]{background-image:linear-gradient(to right,#222900,#ffcb06)} .panClean .prisma-hero.hero-bg-gradient[data-type="prisma"],.panClean .pan-gtm_bg_video-hero.hero-bg-gradient[data-type="prisma"],.panClean .prismahero.hero-bg-gradient[data-type="prisma"],.panClean .prismaHeroSlider.hero-bg-gradient[data-type="prisma"]{background-image:linear-gradient(to right,#002229,#00bfe7)} .panClean .prisma-hero.hero-bg-gradient[data-type="cortex"],.panClean .pan-gtm_bg_video-hero.hero-bg-gradient[data-type="cortex"],.panClean .prismahero.hero-bg-gradient[data-type="cortex"],.panClean .prismaHeroSlider.hero-bg-gradient[data-type="cortex"],.panClean .prisma-hero.hero-bg-gradient[data-type="cortexxdr"],.panClean .pan-gtm_bg_video-hero.hero-bg-gradient[data-type="cortexxdr"],.panClean .prismahero.hero-bg-gradient[data-type="cortexxdr"],.panClean .prismaHeroSlider.hero-bg-gradient[data-type="cortexxdr"]{background-image:linear-gradient(to right,#032900,#0c6)} .panClean .prisma-hero.hero-bg-gradient[data-type="unit42"],.panClean .pan-gtm_bg_video-hero.hero-bg-gradient[data-type="unit42"],.panClean .prismahero.hero-bg-gradient[data-type="unit42"],.panClean .prismaHeroSlider.hero-bg-gradient[data-type="unit42"]{background-image:linear-gradient(to right,#290000,#e01f23)} .panClean .prisma-hero[data-type="paloaltonetworks"] .title-icon::before,.panClean .pan-gtm_bg_video-hero[data-type="paloaltonetworks"] .title-icon::before,.panClean .prismahero[data-type="paloaltonetworks"] .title-icon::before,.panClean .prismaHeroSlider[data-type="paloaltonetworks"] .title-icon::before{background-image:url('/etc/clientlibs/clean/imgs/logo-default-orange.svg')} .panClean .prisma-hero[data-type="paloaltonetworks"] .title-icon.no-background::before,.panClean .pan-gtm_bg_video-hero[data-type="paloaltonetworks"] .title-icon.no-background::before,.panClean .prismahero[data-type="paloaltonetworks"] .title-icon.no-background::before,.panClean .prismaHeroSlider[data-type="paloaltonetworks"] .title-icon.no-background::before{background-image:url('/etc/clientlibs/clean/imgs/logo-default-orange.svg')} .panClean .prisma-hero[data-type="paloaltonetworks"] .btn-dark:hover i,.panClean .pan-gtm_bg_video-hero[data-type="paloaltonetworks"] .btn-dark:hover i,.panClean .prismahero[data-type="paloaltonetworks"] .btn-dark:hover i,.panClean .prismaHeroSlider[data-type="paloaltonetworks"] .btn-dark:hover i{background-image:url('/etc/clientlibs/clean/imgs/arrow-right-orange.svg')} .panClean .prisma-hero[data-type="strata"] .title-icon::before,.panClean .pan-gtm_bg_video-hero[data-type="strata"] .title-icon::before,.panClean .prismahero[data-type="strata"] .title-icon::before,.panClean .prismaHeroSlider[data-type="strata"] .title-icon::before{background-image:url('/etc/clientlibs/clean/imgs/logo-strata.svg')} .panClean .prisma-hero[data-type="strata"] .title-icon.no-background::before,.panClean .pan-gtm_bg_video-hero[data-type="strata"] .title-icon.no-background::before,.panClean .prismahero[data-type="strata"] .title-icon.no-background::before,.panClean .prismaHeroSlider[data-type="strata"] .title-icon.no-background::before{background-image:url('/etc/clientlibs/clean/imgs/icon-strata.svg')} .panClean .prisma-hero[data-type="strata"] .btn-dark:hover i,.panClean .pan-gtm_bg_video-hero[data-type="strata"] .btn-dark:hover i,.panClean .prismahero[data-type="strata"] .btn-dark:hover i,.panClean .prismaHeroSlider[data-type="strata"] .btn-dark:hover i{background-image:url('/etc/clientlibs/clean/imgs/arrow-right-yellow.svg')} .panClean .prisma-hero[data-type="prisma"] .title-icon::before,.panClean .pan-gtm_bg_video-hero[data-type="prisma"] .title-icon::before,.panClean .prismahero[data-type="prisma"] .title-icon::before,.panClean .prismaHeroSlider[data-type="prisma"] .title-icon::before{background-image:url('/etc/clientlibs/clean/imgs/logo-prisma.svg')} .panClean .prisma-hero[data-type="prisma"] .title-icon.no-background::before,.panClean .pan-gtm_bg_video-hero[data-type="prisma"] .title-icon.no-background::before,.panClean .prismahero[data-type="prisma"] .title-icon.no-background::before,.panClean .prismaHeroSlider[data-type="prisma"] .title-icon.no-background::before{background-image:url('/etc/clientlibs/clean/imgs/icon-prisma.svg')} .panClean .prisma-hero[data-type="prisma"] .btn-dark:hover i,.panClean .pan-gtm_bg_video-hero[data-type="prisma"] .btn-dark:hover i,.panClean .prismahero[data-type="prisma"] .btn-dark:hover i,.panClean .prismaHeroSlider[data-type="prisma"] .btn-dark:hover i{background-image:url('/etc/clientlibs/clean/imgs/arrow-right-blue.svg')} .panClean .prisma-hero[data-type="cortex"] .title-icon::before,.panClean .pan-gtm_bg_video-hero[data-type="cortex"] .title-icon::before,.panClean .prismahero[data-type="cortex"] .title-icon::before,.panClean .prismaHeroSlider[data-type="cortex"] .title-icon::before{background-image:url('/etc/clientlibs/clean/imgs/logo-cortex.svg')} .panClean .prisma-hero[data-type="cortex"] .title-icon.no-background::before,.panClean .pan-gtm_bg_video-hero[data-type="cortex"] .title-icon.no-background::before,.panClean .prismahero[data-type="cortex"] .title-icon.no-background::before,.panClean .prismaHeroSlider[data-type="cortex"] .title-icon.no-background::before{background-image:url('/etc/clientlibs/clean/imgs/icon-cortex.svg')} .panClean .prisma-hero[data-type="cortex"] .btn-dark:hover i,.panClean .pan-gtm_bg_video-hero[data-type="cortex"] .btn-dark:hover i,.panClean .prismahero[data-type="cortex"] .btn-dark:hover i,.panClean .prismaHeroSlider[data-type="cortex"] .btn-dark:hover i,.panClean .prisma-hero[data-type="cortexxdr"] .btn-dark:hover i,.panClean .pan-gtm_bg_video-hero[data-type="cortexxdr"] .btn-dark:hover i,.panClean .prismahero[data-type="cortexxdr"] .btn-dark:hover i,.panClean .prismaHeroSlider[data-type="cortexxdr"] .btn-dark:hover i{background-image:url('/etc/clientlibs/clean/imgs/arrow-right-green.svg')} .panClean .prisma-hero[data-type="cortexxdr"] .title-icon::before,.panClean .pan-gtm_bg_video-hero[data-type="cortexxdr"] .title-icon::before,.panClean .prismahero[data-type="cortexxdr"] .title-icon::before,.panClean .prismaHeroSlider[data-type="cortexxdr"] .title-icon::before{background-image:url('/etc/clientlibs/clean/imgs/logo-cortex-xdr.svg')} .panClean .prisma-hero[data-type="cortexxdr"] .title-icon.no-background::before,.panClean .pan-gtm_bg_video-hero[data-type="cortexxdr"] .title-icon.no-background::before,.panClean .prismahero[data-type="cortexxdr"] .title-icon.no-background::before,.panClean .prismaHeroSlider[data-type="cortexxdr"] .title-icon.no-background::before{background-image:url('/etc/clientlibs/clean/imgs/logo-cortex-xdr-white.svg')} .panClean .prisma-hero[data-type="unit42"] .title-icon::before,.panClean .pan-gtm_bg_video-hero[data-type="unit42"] .title-icon::before,.panClean .prismahero[data-type="unit42"] .title-icon::before,.panClean .prismaHeroSlider[data-type="unit42"] .title-icon::before{background-image:url('/etc/clientlibs/clean/imgs/logo-Unit42.svg')} .panClean .prisma-hero[data-type="unit42"] .title-icon.no-background::before,.panClean .pan-gtm_bg_video-hero[data-type="unit42"] .title-icon.no-background::before,.panClean .prismahero[data-type="unit42"] .title-icon.no-background::before,.panClean .prismaHeroSlider[data-type="unit42"] .title-icon.no-background::before{background-image:url('/etc/clientlibs/clean/imgs/icon-Unit42.svg')} .panClean .prisma-hero[data-type="unit42"] .btn-dark:hover i,.panClean .pan-gtm_bg_video-hero[data-type="unit42"] .btn-dark:hover i,.panClean .prismahero[data-type="unit42"] .btn-dark:hover i,.panClean .prismaHeroSlider[data-type="unit42"] .btn-dark:hover i{background-image:url('/etc/clientlibs/clean/imgs/arrow-right-maroon.svg')} .panClean .prismahero{position:relative;background-size:cover;background-repeat:no-repeat} .panClean .prismahero.hero-theme-dark{background-color:#141414} .panClean .prismahero .hero-slide{width:100%} .panClean .prismahero .hero-slide .sectionTitle.subHeading{max-width:75%} .panClean .prismahero .hero-slider-dots{background-color:#f4f4f2;display:flex;align-items:center} .panClean .prismahero .hero-slider-dots>.glider-dot{display:inline-block;text-align:center;margin:20px 0 0;padding:0 1px;height:60px;font-size:1.02rem;line-height:1.42;font-weight:700;font-family:TT Hoves,Arial,"Helvetica Neue",Helvetica,sans-serif;color:#767676;flex:1;text-overflow:ellipsis;position:relative;border-radius:0} .panClean .prismahero .hero-slider-dots>.glider-dot:before{position:absolute;top:0;left:0;right:0} .panClean .prismahero .hero-slider-dots>.glider-dot:after{top:0;transition-duration:45s} .panClean .prismahero .hero-slider-dots>.glider-dot.active{color:#141414} .panClean .prismahero .hero-slide-labels{display:flex} .panClean .prismahero .content{position:relative;z-index:1} .panClean .prismahero .eyebrow{color:#fff;position:relative;padding:15px 0 20px} .panClean .prismahero .eyebrow:before{position:absolute;content:'';top:0;left:0;height:8px;background-color:#fff} .panClean .prismahero .actions{display:flex;flex-direction:column;align-items:flex-start} .panClean .prismahero .actions .btn-primary{margin-bottom:20px} .panClean .prismahero .text-left .actions{align-items:flex-start} .panClean .prismahero .text-center .title-icon{justify-content:center} .panClean .prismahero .text-center .actions{align-items:center} .panClean .prismahero .text-center .eyebrow{align-self:center} .panClean .prismahero .text-center .eyebrow::before{left:50%;transform:translateX(-50%)} .panClean .prismahero .text-right .actions{align-items:flex-start} .panClean .prismahero .title-icon{font-family:TT Hoves,Arial,"Helvetica Neue",Helvetica,sans-serif;font-weight:700;color:#fff;display:flex;align-items:center;margin-bottom:1rem} .panClean .prismahero .title-icon .brand-logo{width:42px;height:52px;display:inline-block;flex-grow:0;flex-shrink:0;background-size:contain;background-repeat:no-repeat;background-position:left center;margin-right:10px} .panClean .prismahero .title-icon .brand-title{text-transform:uppercase;font-size:1.17rem;font-weight:700} .panClean .prismahero .title-icon .icon{width:54px;display:inline-block;flex-grow:0;flex-shrink:0;background-size:auto;background-repeat:no-repeat;background-position:center} .panClean .prismahero .title-icon .text{display:inline-block;width:100%;text-transform:uppercase} .panClean .prismahero .eventVenueAndDate{font-family:TT Hoves,Arial,"Helvetica Neue",Helvetica,sans-serif;font-weight:600;font-size:1.17rem;display:inline-block;margin-top:1rem} .panClean .prismahero .prisma-tabbed-slider{width:100%;overflow:hidden;position:relative} .panClean .prismahero .heroSlide{overflow:hidden;background-repeat:no-repeat;background-size:auto 100%;background-position:100%;height:100%} .panClean .prismahero .heroSlide .brandArrow{position:absolute;width:75vw;height:70vw;left:-5vw;transform:rotate(0);background-size:120% !important;background-position:center !important;z-index:-1} .panClean .prismahero .heroSlide .arrowONTop{z-index:999} .panClean .prismahero .heroSlide.without-branded-square{background-size:cover;background-position:center} .panClean .prismahero .heroSlide.dark .eyebrow{color:#fff} .panClean .prismahero .heroSlide.dark h1{color:#fff} .panClean .prismahero .heroSlide.dark .sectionTitle{color:#fff} .panClean .prismahero .heroSlide.light h1{color:#141414} .panClean .prismahero .heroSlide.light .sectionTitle{color:#141414} .panClean .prismahero .heroSlide.light .eyebrow{color:#141414} .panClean .prismahero .overlayContent{position:absolute;background:#fff;width:45%;height:100%;top:0;left:0} .panClean .prismahero .glider-slide.active .brandArrow{transform:rotate(0);animation:prismaRotateUp .75s ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both} .panClean .prismahero .glider-slide.active .contentSlide{-webkit-animation-name:fadeInRight_prisma;animation-name:fadeInRight_prisma;-webkit-animation-duration:1s;animation-duration:1s} @media(min-width:576px){.panClean .prismahero .container-fluid{width:85.71428%} } @media(max-width:991.98px){.panClean .prismahero{background-position:center;padding-top:75px} .panClean .prismahero .text-center{text-align:left !important} .panClean .prismahero .content{padding:7.14285714vw 0} .panClean .prismahero .title-icon{margin-bottom:20px} .panClean .prismahero .title-icon .text{font-size:1.02rem} .panClean .prismahero .eyebrow:before{width:25px} .panClean .prismahero span.sectionTitle{margin-bottom:1rem;font-size:1.75rem;line-height:1.33;font-family:TT Hoves,Arial,"Helvetica Neue",Helvetica,sans-serif;font-weight:700;display:inline-block} .panClean .prismahero .prisma-tabbed-slider{width:100%} .panClean .prismahero .prisma-tabbed-slider .hero-slide{height:100vw;width:auto} .panClean .prismahero .prisma-tabbed-slider .content{padding-bottom:160px;padding-top:120px} .panClean .prismahero .overlayContent{opacity:.7;width:100%} .panClean .prismahero .text-center .title-icon{justify-content:flex-start} .panClean .prismahero .text-center .actions{align-items:flex-start} .panClean .prismahero .text-center .eyebrow{align-self:flex-start} .panClean .prismahero .text-center .eyebrow::before{left:0;transform:none} .panClean .prismahero .hero-slider-dots{height:100px} } @media(min-width:576px) and (max-width:991.98px){.panClean .prismahero .prisma-tabbed-slider{width:100%} .panClean .prismahero .prisma-tabbed-slider .hero-slide{height:70vw} } @media(max-width:767.98px){.panClean .prismahero .prisma-tabbed-slider{width:100%} .panClean .prismahero .prisma-tabbed-slider .hero-slide{height:100vw} .panClean .prismahero .prisma-tabbed-slider .hero-slide span.sectionTitle{margin-bottom:1rem;font-size:1.31rem;line-height:1.33;font-family:TT Hoves,Arial,"Helvetica Neue",Helvetica,sans-serif;font-weight:700;display:inline-block} .panClean .prismahero .title-icon{margin-bottom:15px} .panClean .prismahero h1{margin-bottom:15px} .panClean .prismahero .prisma-tabbed-slider .content{padding:30vw 0 50vw 0} .panClean .prismahero .hero-slider-dots{padding:0 7.14285714vw} } @media(max-width:575.98px){.panClean .prismahero .prisma-tabbed-slider{width:100%} .panClean .prismahero .prisma-tabbed-slider .hero-slide{height:100vw} .panClean .prismahero .hero-slider-dots{left:-15px;right:-15px;padding:0 15px} .panClean .prismahero .hero-slider-dots>.glider-dot{font-size:.87rem;line-height:1.33} } @media(min-width:768px){.panClean .prismahero .hero-slider-dots{position:absolute;left:7.14285714vw;right:7.14285714vw;bottom:30px;margin-left:15px;margin-right:15px;padding-left:7.14285714vw;padding-right:7.14285714vw;z-index:1} } @media(min-width:992px){.panClean .prismahero{padding-top:100px;background-position:center center} .panClean .prismahero .prisma-tabbed-slider{width:100%} .panClean .prismahero .prisma-tabbed-slider .hero-slide{height:42vw} .panClean .prismahero .content{padding:7.14285714vw 0} .panClean .prismahero .title-icon{display:flex;align-items:center;margin-bottom:1rem} .panClean .prismahero .title-icon .text{font-size:1.31rem;margin-left:15px} .panClean .prismahero h1{margin-bottom:1.65vw} .panClean .prismahero span.sectionTitle{font-size:1.755rem;line-height:1.33;font-family:TT Hoves,Arial,"Helvetica Neue",Helvetica,sans-serif;font-weight:700;margin-top:0rem;margin-bottom:3rem;display:inline-block} .panClean .prismahero .actions .btn-primary{margin-bottom:1.2vw} .panClean .prismahero .eyebrow:before{width:50px} .panClean .prismahero:before{content:'';position:absolute;bottom:0;left:0;width:200px;height:55px;background-color:#fff;z-index:1} .panClean .prismahero .hero-slider-dots{height:100px} } @media(min-width:992px) and (max-width:1199.98px){.panClean .prismahero .heroSlide{background-size:cover !important} } @media(min-width:1200px){.panClean .prismahero{padding-top:149px} .panClean .prismahero .prisma-tabbed-slider .hero-slide{height:30vw;max-height:460px} .panClean .prismahero .heroSlide .brandArrow{top:-10vw} .panClean .prismahero h1{margin-bottom:1.65vw} } @media(min-width:1400px){.panClean .prismahero .prisma-tabbed-slider .hero-slide{height:28vw} } @media(min-width:1920px){.panClean .prismahero .prisma-tabbed-slider .glider-slide .content{display:flex;align-items:center;padding-top:7.14285714vw} .panClean .prismahero .prisma-tabbed-slider .glider-slide .content .hero-slide{height:auto;max-height:none} } @media all and (-ms-high-contrast:none),(-ms-high-contrast:active){.panClean .prismahero .prisma-overlay{width:100%;height:100%;position:absolute;left:0;top:0;background:linear-gradient(0,rgba(255,255,255,0.9),rgba(255,255,255,0.9))} .panClean .prismahero .prisma-tabbed-slider .container-fluid{width:100%} } .panClean .prismaHero-sliding .background-logo,.panClean .redesigned-tabs .background-logo,.panClean .prisma-hero .background-logo{background-repeat:no-repeat;position:absolute;top:0;left:0;right:0;bottom:0;z-index:0} .panClean .prismaHero-sliding .background-logo.center,.panClean .redesigned-tabs .background-logo.center,.panClean .prisma-hero .background-logo.center{background-position:center center} .panClean .prismaHero-sliding .background-logo.center-left,.panClean .redesigned-tabs .background-logo.center-left,.panClean .prisma-hero .background-logo.center-left{background-position:left center} .panClean .prismaHero-sliding .background-logo.center-right,.panClean .redesigned-tabs .background-logo.center-right,.panClean .prisma-hero .background-logo.center-right{background-position:right center} .panClean .prismaHero-sliding .background-logo.top-left,.panClean .redesigned-tabs .background-logo.top-left,.panClean .prisma-hero .background-logo.top-left{background-position:left top} .panClean .prismaHero-sliding .background-logo.top-right,.panClean .redesigned-tabs .background-logo.top-right,.panClean .prisma-hero .background-logo.top-right{background-position:right top} .panClean .prismaHero-sliding .background-logo.top-center,.panClean .redesigned-tabs .background-logo.top-center,.panClean .prisma-hero .background-logo.top-center{background-position:center top} .panClean .prismaHero-sliding .background-logo.bottom-left,.panClean .redesigned-tabs .background-logo.bottom-left,.panClean .prisma-hero .background-logo.bottom-left{background-position:left bottom} .panClean .prismaHero-sliding .background-logo.bottom-right,.panClean .redesigned-tabs .background-logo.bottom-right,.panClean .prisma-hero .background-logo.bottom-right{background-position:right bottom} .panClean .prismaHero-sliding .background-logo.bottom-center,.panClean .redesigned-tabs .background-logo.bottom-center,.panClean .prisma-hero .background-logo.bottom-center{background-position:center bottom} .panClean .prismaHero-sliding .background-logo.auto,.panClean .redesigned-tabs .background-logo.auto,.panClean .prisma-hero .background-logo.auto{background-size:auto} .panClean .prismaHero-sliding .background-logo.cover,.panClean .redesigned-tabs .background-logo.cover,.panClean .prisma-hero .background-logo.cover{background-size:cover} .panClean .prismaHero-sliding .background-logo.contain,.panClean .redesigned-tabs .background-logo.contain,.panClean .prisma-hero .background-logo.contain{background-size:contain} .panClean .prismaHero-sliding .background-logo.custom-cortex,.panClean .redesigned-tabs .background-logo.custom-cortex,.panClean .prisma-hero .background-logo.custom-cortex,.panClean .prismaHero-sliding .background-logo.custom-sase,.panClean .redesigned-tabs .background-logo.custom-sase,.panClean .prisma-hero .background-logo.custom-sase{z-index:1} @media(max-width:991.98px){.panClean .prismaHero-sliding .background-logo.custom-cortex,.panClean .redesigned-tabs .background-logo.custom-cortex,.panClean .prisma-hero .background-logo.custom-cortex{background-size:150% !important;background-position:calc(50% + 50px) 0} .panClean .prismaHero-sliding .background-logo.custom-cortex-fullcircle,.panClean .redesigned-tabs .background-logo.custom-cortex-fullcircle,.panClean .prisma-hero .background-logo.custom-cortex-fullcircle{background-position:center left;background-size:150% 150%} .panClean .prismaHero-sliding .background-logo.custom-sase,.panClean .redesigned-tabs .background-logo.custom-sase,.panClean .prisma-hero .background-logo.custom-sase{background-size:170% !important;background-position:calc(40% - 80px) 0} .panClean .prismaHero-sliding .background-logo.custom-public-sector,.panClean .redesigned-tabs .background-logo.custom-public-sector,.panClean .prisma-hero .background-logo.custom-public-sector{background-size:65% !important;background-position:bottom right} } @media(max-width:767.98px){.panClean .prismaHero-sliding .background-logo.custom-cortex,.panClean .redesigned-tabs .background-logo.custom-cortex,.panClean .prisma-hero .background-logo.custom-cortex{background-size:155% !important;background-position:40% 100%;transform:rotate(-5deg)} .panClean .prismaHero-sliding .background-logo.custom-cortex-fullcircle,.panClean .redesigned-tabs .background-logo.custom-cortex-fullcircle,.panClean .prisma-hero .background-logo.custom-cortex-fullcircle{background-position:left 65%;background-size:150%} .panClean .prismaHero-sliding .background-logo.custom-sase,.panClean .redesigned-tabs .background-logo.custom-sase,.panClean .prisma-hero .background-logo.custom-sase{background-size:185% !important;background-position:calc(50% - 110px) 100%} .panClean .prismaHero-sliding .background-logo.custom-public-sector,.panClean .redesigned-tabs .background-logo.custom-public-sector,.panClean .prisma-hero .background-logo.custom-public-sector{background-size:100% !important;background-position:bottom right} } @media(max-width:575.98px){.panClean .prismaHero-sliding.custom-cortex-fullcircle,.panClean .redesigned-tabs.custom-cortex-fullcircle,.panClean .prisma-hero.custom-cortex-fullcircle{background-size:120%;background-position:0 75%} } @media(min-width:992px){.panClean .prismaHero-sliding .background-logo.custom-cortex,.panClean .redesigned-tabs .background-logo.custom-cortex,.panClean .prisma-hero .background-logo.custom-cortex{background-position:calc(50% - 110px) 100%} .panClean .prismaHero-sliding .background-logo.custom-cortex-fullcircle,.panClean .redesigned-tabs .background-logo.custom-cortex-fullcircle,.panClean .prisma-hero .background-logo.custom-cortex-fullcircle{background-position:bottom center;background-size:100%} .panClean .prismaHero-sliding .background-logo.custom-sase,.panClean .redesigned-tabs .background-logo.custom-sase,.panClean .prisma-hero .background-logo.custom-sase{background-position:90% 100%;transform:rotate(-10deg)} .panClean .prismaHero-sliding .background-logo.custom-public-sector,.panClean .redesigned-tabs .background-logo.custom-public-sector,.panClean .prisma-hero .background-logo.custom-public-sector{background-size:65% !important;background-position:bottom right} } .panClean .prisma-hero .hero-events-container{border-left:4px solid #fa582d;background:#01232c;padding-top:50px;padding-bottom:50px;margin-top:-30px;z-index:999} .panClean .prisma-hero .hero-events-container .feature-chicklet{border-bottom:1px solid #d8d8d8;padding:30px 0} .panClean .prisma-hero .hero-events-container .feature-chicklet .img-container{padding:0} .panClean .prisma-hero .hero-events-container .feature-chicklet .card-content{padding-left:40px;display:flex;flex-direction:column;justify-content:center;align-items:flex-start} .panClean .prisma-hero .hero-events-container .feature-chicklet .card-content .event-title{font-family:TT Hoves,Arial,"Helvetica Neue",Helvetica,sans-serif;font-style:normal;font-weight:700;font-size:1.46rem;line-height:1.5} .panClean .prisma-hero .hero-events-container .feature-chicklet .card-content h5{width:100%} .panClean .prisma-hero .hero-events-container .feature-chicklet .card-content .btn-link:after{background-color:#fa582d} .panClean .prisma-hero .hero-events-container .feature-chicklet .card-content .btn-link.ext-link{position:relative} .panClean .prisma-hero .hero-events-container .feature-chicklet .card-content .btn-link.ext-link i{width:25px;height:15px;margin-left:10px;flex-grow:0;flex-shrink:0;display:inline-block;background-size:contain;background-position:center;background-repeat:no-repeat;background-image:url("/etc/clientlibs/clean/imgs/ext-link-arrow-orange.svg");position:absolute;right:-25px;top:10px} .panClean .prisma-hero .hero-events-container .feature-chicklet .card-type-text{font-size:1.02rem;font-family:TT Hoves,Arial,"Helvetica Neue",Helvetica,sans-serif;line-height:1.33;text-transform:uppercase;display:flex;justify-content:flex-start;align-items:center} .panClean .prisma-hero .hero-events-container .feature-chicklet .card-type-text:before{content:"";margin-right:10px;width:6px;height:6px;border-radius:50%;background-color:#fa582d} .panClean .prisma-hero .hero-events-container .feature-chicklet.no-border{border-right:0 solid #d8d8d8} .panClean .prisma-hero .hero-events-container .feature-chicklet:last-of-type{border-bottom:0} .panClean .prisma-hero .hero-events-container .bottom-cards{margin-top:5rem} @media(max-width:991.98px){.panClean .prisma-hero .hero-events-container{padding-top:0;padding-bottom:0} .panClean .prisma-hero .hero-events-container .feature-chicklet .card-content{padding-left:15px;padding-right:5px} } @media(max-width:767.98px){.panClean .prisma-hero .hero-events-container{padding:10px 30px 10px 34px;margin-top:30px;margin-bottom:40px} .panClean .prisma-hero .hero-events-container .feature-chicklet{flex-direction:column} .panClean .prisma-hero .hero-events-container .feature-chicklet .card-content{padding-top:20px;padding-left:0;padding-right:5px} } @media(min-width:992px){.panClean .prisma-hero .hero-events-container .content .display-1{margin-bottom:45px} } .panClean .prisma-hero[data-type="paloaltonetworks"] .hero-events-container{border-color:#fa582d} .panClean .prisma-hero[data-type="paloaltonetworks"] .hero-events-container .feature-chicklet .card-type-text:before{content:"";width:5px;height:5px;background-color:#fa582d} .panClean .prisma-hero[data-type="paloaltonetworks"] .hero-events-container .feature-chicklet .card-content .btn-link:after{background-color:#fa582d} .panClean .prisma-hero[data-type="paloaltonetworks"] .hero-events-container .feature-chicklet .card-content .btn-link.ext-link{position:relative} .panClean .prisma-hero[data-type="paloaltonetworks"] .hero-events-container .feature-chicklet .card-content .btn-link.ext-link i{background-image:url("/etc/clientlibs/clean/imgs/ext-link-arrow-orange.svg")} .panClean .prisma-hero[data-type="default"] .hero-events-container{border-color:#fa582d} .panClean .prisma-hero[data-type="default"] .hero-events-container .feature-chicklet .card-type-text:before{content:"";width:5px;height:5px;background-color:#fa582d} .panClean .prisma-hero[data-type="default"] .hero-events-container .feature-chicklet .card-content .btn-link:after{background-color:#fa582d} .panClean .prisma-hero[data-type="default"] .hero-events-container .feature-chicklet .card-content .btn-link.ext-link{position:relative} .panClean .prisma-hero[data-type="default"] .hero-events-container .feature-chicklet .card-content .btn-link.ext-link i{background-image:url("/etc/clientlibs/clean/imgs/ext-link-arrow-orange.svg")} .panClean .prisma-hero[data-type="cortex"] .hero-events-container{border-color:#0c6} .panClean .prisma-hero[data-type="cortex"] .hero-events-container .feature-chicklet .card-type-text:before{content:"";width:5px;height:5px;background-color:#0c6} .panClean .prisma-hero[data-type="cortex"] .hero-events-container .feature-chicklet .card-content .btn-link:after{background-color:#0c6} .panClean .prisma-hero[data-type="cortex"] .hero-events-container .feature-chicklet .card-content .btn-link.ext-link{position:relative} .panClean .prisma-hero[data-type="cortex"] .hero-events-container .feature-chicklet .card-content .btn-link.ext-link i{background-image:url("/etc/clientlibs/clean/imgs/ext-link-arrow-cortex-green.svg")} .panClean .prisma-hero[data-type="prisma"] .hero-events-container{border-color:#00c0e8} .panClean .prisma-hero[data-type="prisma"] .hero-events-container .feature-chicklet .card-type-text:before{content:"";width:5px;height:5px;background-color:#00c0e8} .panClean .prisma-hero[data-type="prisma"] .hero-events-container .feature-chicklet .card-content .btn-link:after{background-color:#00c0e8} .panClean .prisma-hero[data-type="prisma"] .hero-events-container .feature-chicklet .card-content .btn-link.ext-link{position:relative} .panClean .prisma-hero[data-type="prisma"] .hero-events-container .feature-chicklet .card-content .btn-link.ext-link i{background-image:url("/etc/clientlibs/clean/imgs/ext-link-arrow-prisma-blue.svg")} .panClean .prisma-hero[data-type="strata"] .hero-events-container{border-color:#ffcb06} .panClean .prisma-hero[data-type="strata"] .hero-events-container .feature-chicklet .card-type-text:before{content:"";width:5px;height:5px;background-color:#ffcb06} .panClean .prisma-hero[data-type="strata"] .hero-events-container .feature-chicklet .card-content .btn-link:after{background-color:#ffcb06} .panClean .prisma-hero[data-type="strata"] .hero-events-container .feature-chicklet .card-content .btn-link.ext-link{position:relative} .panClean .prisma-hero[data-type="strata"] .hero-events-container .feature-chicklet .card-content .btn-link.ext-link i{background-image:url("/etc/clientlibs/clean/imgs/ext-link-arrow-strata-yellow.svg")} .panClean .prisma-hero[data-type="unit42"] .hero-events-container{border-color:#c84727} .panClean .prisma-hero[data-type="unit42"] .hero-events-container .feature-chicklet .card-type-text:before{content:"";width:5px;height:5px;background-color:#c84727} .panClean .prisma-hero[data-type="unit42"] .hero-events-container .feature-chicklet .card-content .btn-link:after{background-color:#c84727} .panClean .prisma-hero[data-type="unit42"] .hero-events-container .feature-chicklet .card-content .btn-link.ext-link{position:relative} .panClean .prisma-hero[data-type="unit42"] .hero-events-container .feature-chicklet .card-content .btn-link.ext-link i{background-image:url("/etc/clientlibs/clean/imgs/ext-link-arrow-unit-maroon.svg")}.panClean .resourceIconCarouselFilters .resource-icon-carousel{padding:15px 0} .panClean .resourceIconCarouselFilters .resource-icon-carousel .glider-wrapper:not(.glider){display:flex} .panClean .resourceIconCarouselFilters .resource-icon-carousel .glider-track{margin:0 auto} .panClean .resourceIconCarouselFilters .resource-icon-carousel .glider-slide{flex-shrink:0;padding:0 15px} .panClean .resourceIconCarouselFilters .resource-icon-carousel .glider-slide .image{width:45px;margin:0 0 12px} .panClean .resourceIconCarouselFilters .resource-icon-carousel .glider-slide p.h6{font-size:.73125rem;line-height:140%;color:#141414;text-align:center;margin:0} .panClean .resourceIconCarouselFilters .resource-icon-carousel .glider-slide .content{display:flex;flex-direction:column;align-items:center;border-bottom:4px solid transparent;padding-bottom:16px;height:100%;justify-content:flex-start;outline:0;border:0;background:0;width:100%} .panClean .resourceIconCarouselFilters .resource-icon-carousel .glider-slide .content .image{text-align:left} .panClean .resourceIconCarouselFilters .resource-icon-carousel .glider-slide .content .hover-image{display:none;filter:none !important;z-index:1} .panClean .resourceIconCarouselFilters .resource-icon-carousel .glider-slide .content:hover{border-color:#fa582d;text-decoration:none} .panClean .resourceIconCarouselFilters .resource-icon-carousel .glider-slide .content:hover p.h6{color:#fa582d} .panClean .resourceIconCarouselFilters .resource-icon-carousel .glider-slide .content:hover img{filter:invert(49%) sepia(55%) saturate(3876%) hue-rotate(341deg) brightness(97%) contrast(103%)} .panClean .resourceIconCarouselFilters .resource-icon-carousel .glider-slide .content:hover .hover-image{display:flex} .panClean .resourceIconCarouselFilters .resource-icon-carousel .glider-slide .content:hover .hover-image+img{display:none} .panClean .resourceIconCarouselFilters .resource-icon-carousel .glider-arrows .glider-prev,.panClean .resourceIconCarouselFilters .resource-icon-carousel .glider-arrows .glider-next{background-color:#fff;border:#fff;box-shadow:0 0 12px rgba(0,0,0,0.25);margin-top:-25px;z-index:1;visibility:visible;opacity:1;transition:visibility .15s ease-in,opacity .15s ease-in} .panClean .resourceIconCarouselFilters .resource-icon-carousel .glider-arrows .glider-prev.disabled,.panClean .resourceIconCarouselFilters .resource-icon-carousel .glider-arrows .glider-next.disabled{visibility:hidden;opacity:0} .panClean .resourceIconCarouselFilters .resource-icon-carousel .glider-arrows .glider-prev-fade,.panClean .resourceIconCarouselFilters .resource-icon-carousel .glider-arrows .glider-next-fade{visibility:hidden;opacity:0;position:absolute;bottom:0;width:120px;height:100%;z-index:0;transition:visibility .15s ease-in,opacity .15s ease-in} .panClean .resourceIconCarouselFilters .resource-icon-carousel .glider-arrows .glider-prev{background-image:url('/etc/clientlibs/clean/imgs/chevron-left-black.svg');left:0} .panClean .resourceIconCarouselFilters .resource-icon-carousel .glider-arrows .glider-prev:not(.disabled)+.glider-prev-fade{visibility:visible;opacity:1;display:flex;position:absolute;left:0;background-image:linear-gradient(to right,#fff 0,rgba(255,255,255,0) 100%)} .panClean .resourceIconCarouselFilters .resource-icon-carousel .glider-arrows .glider-next{background-image:url('/etc/clientlibs/clean/imgs/chevron-right-black.svg');right:0} .panClean .resourceIconCarouselFilters .resource-icon-carousel .glider-arrows .glider-next:not(.disabled)+.glider-next-fade{visibility:visible;opacity:1;display:flex;position:absolute;right:0;background-image:linear-gradient(to left,#fff 0,rgba(255,255,255,0) 100%)} @media(max-width:767.98px){.panClean .resourceIconCarouselFilters .resource-icon-carousel .glider-slide{min-width:75px} } @media(max-width:575.98px){.panClean .resourceIconCarouselFilters .resource-icon-carousel{margin:0 -15px} .panClean .resourceIconCarouselFilters .resource-icon-carousel .glider-arrows{display:none} } @media(min-width:768px){.panClean .resourceIconCarouselFilters .resource-icon-carousel .glider-slide{min-width:120px;max-width:120px;flex-basis:120px;flex-grow:0} } @media(min-width:1200px){.panClean .resourceIconCarouselFilters .resource-icon-carousel{padding-top:60px} .panClean .resourceIconCarouselFilters .resource-icon-carousel .glider-arrows .glider-prev{left:-25px} .panClean .resourceIconCarouselFilters .resource-icon-carousel .glider-arrows .glider-next{right:-25px} }.panClean .base-component-spacer.spacer-none{height:0} .panClean .base-component-spacer.spacer-small{height:30px} .panClean .base-component-spacer.spacer-medium{height:60px} .panClean .base-component-spacer.spacer-large{height:90px} @media(max-width:991.98px){.panClean .base-component-spacer.tablet-spacer-none{height:0} .panClean .base-component-spacer.tablet-spacer-small{height:30px} .panClean .base-component-spacer.tablet-spacer-medium{height:60px} .panClean .base-component-spacer.tablet-spacer-large{height:90px} } @media(max-width:767.98px){.panClean .base-component-spacer.mobile-spacer-none{height:0} .panClean .base-component-spacer.mobile-spacer-small{height:30px} .panClean .base-component-spacer.mobile-spacer-medium{height:60px} .panClean .base-component-spacer.mobile-spacer-large{height:90px} }.panClean .searchinput{display:flex;align-items:center;padding:30px 0;position:relative;z-index:2} .panClean .searchinput.open{z-index:999} .panClean .searchinput.open .btn-close-mega-dropdown{display:inline-block} .panClean .searchinput.open .search-wrap .search-field-mega-dropdown{visibility:visible;opacity:1} .panClean .searchinput .search-wrap{position:relative;flex-grow:1;flex-shrink:1;flex-basis:auto;z-index:100;z-index:0} .panClean .searchinput .search-wrap .search-field-mega-dropdown{visibility:hidden;opacity:0;background-color:#fff;box-shadow:0 2px 30px 10px rgba(0,0,0,0.3);border-radius:32px;position:absolute;top:0;left:0;right:0;padding:95px 60px 135px;z-index:1;transition:visibility .1s ease-in-out,opacity .1s ease-in-out} .panClean .searchinput .search-wrap .resource-search-field{border:2px solid #141414;width:100%;padding:14px 60px 14px 60px;border-radius:32px;font-size:1.31625rem;line-height:133%;font-weight:600;font-family:TT Hoves,Arial,"Helvetica Neue",Helvetica,sans-serif;position:relative;z-index:2} .panClean .searchinput .search-wrap .resource-search-field.show-clear{padding-right:125px} .panClean .searchinput .search-wrap .resource-search-field:focus{outline:0;box-shadow:0 0 0 3px rgba(250,88,45,0.5)} .panClean .searchinput .search-wrap .resource-search-field::-webkit-input-placeholder{color:#767676} .panClean .searchinput .search-wrap .resource-search-field:-ms-input-placeholder{color:#767676} .panClean .searchinput .search-wrap .resource-search-field::placeholder{color:#767676} .panClean .searchinput .search-wrap .resource-search-field #search-clear{display:none} .panClean .searchinput .search-wrap .resource-search-field::-webkit-search-cancel-button{display:none} .panClean .searchinput .search-wrap #search-pan-search{position:absolute;left:18px;top:50%;transform:translateY(-50%);width:30px;height:30px;background-image:url('/etc/clientlibs/clean/imgs/search-black.svg');z-index:3;font-size:0;background-repeat:no-repeat;padding:0;background-size:cover;background-position:center} .panClean .searchinput .search-wrap #search-pan-clear{display:none} .panClean .searchinput .btn-close-mega-dropdown{display:none;position:absolute;top:30px;right:0;z-index:3;width:58px;height:58px;padding:0;border-radius:32px;text-align:center;z-index:1} .panClean .searchinput .btn-close-mega-dropdown i{display:inline-flex;width:24px;height:24px;background-image:url('/etc/clientlibs/clean/imgs/x-black.svg');background-size:24px 24px;background-position:center;background-repeat:no-repeat} .panClean .searchinput .btn-flyout-facets{display:flex;padding:0;justify-content:center;align-items:center;flex-basis:24px;flex-grow:0;flex-shrink:0;max-width:24px;margin-left:16px} .panClean .searchinput .btn-flyout-facets i{display:flex;width:24px;height:24px;background-size:contain;background-position:center;background-repeat:no-repeat;background-image:url('/etc/clientlibs/clean/imgs/resources/nav-alt-black.svg')} @media(max-width:1599.98px){.panClean .searchinput .search-wrap .search-field-mega-dropdown{padding-left:45px;padding-right:45px} } @media(max-width:1399.98px){.panClean .searchinput .search-wrap .search-field-mega-dropdown{padding-left:30px;padding-right:30px} } @media(max-width:1199.98px){.panClean .searchinput .search-wrap .search-field-mega-dropdown{padding-left:45px;padding-right:45px} .panClean .searchinput .btn-close-mega-dropdown{right:40px} } @media(max-width:991.98px){.panClean .searchinput{margin-bottom:45px} .panClean .searchinput input:placeholder-shown{text-overflow:ellipsis} .panClean .searchinput.open input::placeholder{visibility:hidden} .panClean .searchinput.open input::-webkit-input-placeholder{visibility:hidden} .panClean .searchinput.open input::-moz-placeholder{visibility:hidden} .panClean .searchinput.open input:-ms-input-placeholder{visibility:hidden} .panClean .searchinput.open input:-moz-placeholder{visibility:hidden} .panClean .searchinput .placeholdertext-mob{font-size:1.02375rem;line-height:150%;color:#5f5f5f;position:relative;font-family:TT Hoves,Arial,"Helvetica Neue",Helvetica,sans-serif;margin-bottom:40px;width:100%} .panClean .searchinput .placeholdertext-mob:after{content:'';position:absolute;bottom:-20px;left:-30px;width:calc(100% + 60px);height:1px;background-color:#d8d8d8} .panClean .searchinput .search-wrap .search-field-mega-dropdown{padding-left:30px;padding-right:30px;padding-top:75px} .panClean .searchinput .search-wrap .resource-search-field::-webkit-input-placeholder{font-size:1.02375rem} .panClean .searchinput .search-wrap .resource-search-field:-ms-input-placeholder{font-size:1.02375rem} .panClean .searchinput .search-wrap .resource-search-field::placeholder{font-size:1.02375rem} } @media(max-width:767.98px){.panClean .searchinput .placeholdertext-mob{font-size:.8775rem} .panClean .searchinput .placeholdertext-mob:after{left:-25px;width:calc(100% + 50px)} .panClean .searchinput .search-wrap .search-field-mega-dropdown{padding-left:25px;padding-right:25px} .panClean .searchinput .search-wrap .resource-search-field{padding:14px 32px 14px 52px} .panClean .searchinput .search-wrap .resource-search-field.show-clear{padding-right:120px} .panClean .searchinput .btn-close-mega-dropdown{right:0} .panClean .searchinput.open .btn-flyout-facets{display:none} } @media(min-width:1200px){.panClean .searchinput .btn-flyout-facets{display:none} } @media(min-width:1600px){.panClean .searchinput .search-wrap .search-field-mega-dropdown{padding-left:45px;padding-right:45px} } @media(min-width:1920px){.panClean .searchinput .search-wrap .search-field-mega-dropdown{padding-left:60px;padding-right:60px} }.panClean .resourceCarouselTabs .resource-carousel-tabs{padding:0;overflow:hidden} .panClean .resourceCarouselTabs .resource-carousel-tabs .glider-wrapper:not(.glider){display:flex} .panClean .resourceCarouselTabs .resource-carousel-tabs .glider-wrapper:not(.glider) .glider-slide{max-width:412px;flex-basis:412px;padding:0 15px;flex-grow:0;flex-shrink:0} .panClean .resourceCarouselTabs .resource-carousel-tabs .glider-contain .glider-wrapper{padding-left:7.14285714vw} .panClean .resourceCarouselTabs .resource-carousel-tabs .glider-slide{padding:15px} .panClean .resourceCarouselTabs .resource-carousel-tabs .glider-slide.hide{display:none} .panClean .resourceCarouselTabs .resource-carousel-tabs .glider-slide.bg-brandingBackgroundAndIcon .icon{position:absolute;top:25%;left:50%;width:50%;height:25%;transform:translate(-50%,-25%);background-position:center;background-repeat:no-repeat;background-size:contain} .panClean .resourceCarouselTabs .resource-carousel-tabs .glider-arrows .glider-prev,.panClean .resourceCarouselTabs .resource-carousel-tabs .glider-arrows .glider-next{background-color:#fff;border:#fff;margin-top:-25px;visibility:visible;opacity:1;transition:visibility .15s ease-in,opacity .15s ease-in} .panClean .resourceCarouselTabs .resource-carousel-tabs .glider-arrows .glider-prev.disabled,.panClean .resourceCarouselTabs .resource-carousel-tabs .glider-arrows .glider-next.disabled{visibility:hidden;opacity:0} .panClean .resourceCarouselTabs .resource-carousel-tabs .glider-arrows .glider-prev{background-image:url('/etc/clientlibs/clean/imgs/chevron-left-black.svg');left:30px} .panClean .resourceCarouselTabs .resource-carousel-tabs .glider-arrows .glider-next{background-image:url('/etc/clientlibs/clean/imgs/chevron-right-black.svg');right:30px} .panClean .resourceCarouselTabs .resource-carousel-tabs .filters-wrap{display:flex;margin:0 0 30px} .panClean .resourceCarouselTabs .resource-carousel-tabs .filters{display:flex;flex-wrap:nowrap;flex-grow:1;flex-shrink:0;flex-basis:auto;list-style-type:none;margin:0;padding:0 25px;flex-wrap:wrap;margin:0 -25px} .panClean .resourceCarouselTabs .resource-carousel-tabs .filters li{flex-shrink:0;padding:0 25px} .panClean .resourceCarouselTabs .resource-carousel-tabs .filters li .cta-pills{font-size:1.17rem;line-height:150%;font-weight:600;padding:10px 24px;position:relative;display:flex;justify-content:center;align-items:center;box-shadow:inset 0 3px 6px rgba(0,0,0,0.1);background:0;border-radius:30px;border:2px solid transparent;font-family:TT Hoves,Arial,"Helvetica Neue",Helvetica,sans-serif;color:#141414} .panClean .resourceCarouselTabs .resource-carousel-tabs .filters li .cta-pills:hover{border-color:#d8d8d8;color:#767676;box-shadow:none} .panClean .resourceCarouselTabs .resource-carousel-tabs .filters li .cta-pills.active{background:0;box-shadow:none;color:#141414;border-color:#141414} .panClean .resourceCarouselTabs .resource-carousel-tabs .filters li .cta-pills.active:hover{color:#141414;border-color:#141414} .panClean .resourceCarouselTabs .resource-carousel-tabs .header{text-align:center;margin:0 0 45px} .panClean .resourceCarouselTabs .resource-carousel-tabs .header.theme-dark-text .title{color:#141414} .panClean .resourceCarouselTabs .resource-carousel-tabs .header.theme-dark-text .description{color:#5f5f5f} .panClean .resourceCarouselTabs .resource-carousel-tabs .header.theme-light-text .title,.panClean .resourceCarouselTabs .resource-carousel-tabs .header.theme-light-text .description{color:#fff} .panClean .resourceCarouselTabs .resource-carousel-tabs .card{border-radius:8px;padding:294px 42px 0;height:100%;width:100%;position:relative;border:0;overflow:hidden;display:flex;flex-direction:column;justify-content:flex-end;background-size:cover;text-align:left} .panClean .resourceCarouselTabs .resource-carousel-tabs .card h3.title{font-size:1.755rem;line-height:133%;margin:0 0 14px} .panClean .resourceCarouselTabs .resource-carousel-tabs .card p.h6{font-size:1.17rem;line-height:137%;margin:0 0 15px;font-weight:500} .panClean .resourceCarouselTabs .resource-carousel-tabs .card .btn{transition:transform .15s ease-in;margin-bottom:30px} .panClean .resourceCarouselTabs .resource-carousel-tabs .card:hover{text-decoration:none} .panClean .resourceCarouselTabs .resource-carousel-tabs .card:focus{outline:0;box-shadow:0 0 0 3px rgba(250,88,45,0.5)} .panClean .resourceCarouselTabs .resource-carousel-tabs .card.theme-dark-text{background-color:#fff} .panClean .resourceCarouselTabs .resource-carousel-tabs .card.theme-dark-text h3.title,.panClean .resourceCarouselTabs .resource-carousel-tabs .card.theme-dark-text p.h6{color:#141414} .panClean .resourceCarouselTabs .resource-carousel-tabs .card.theme-light-text{background-color:#141414} .panClean .resourceCarouselTabs .resource-carousel-tabs .card.theme-light-text h3.title{color:#fff} .panClean .resourceCarouselTabs .resource-carousel-tabs .card.theme-light-text p.h6{color:#f4f4f2} @media(max-width:1199.98px){.panClean .resourceCarouselTabs .resource-carousel-tabs .glider-contain .glider-slide{padding:0 6px} .panClean .resourceCarouselTabs .resource-carousel-tabs .glider-arrows{display:none} .panClean .resourceCarouselTabs .resource-carousel-tabs .filters{padding:0 8px;margin:0 -8px} .panClean .resourceCarouselTabs .resource-carousel-tabs .filters li{padding:0 8px} .panClean .resourceCarouselTabs .resource-carousel-tabs .filters li .cta-pills{font-size:.8775rem;line-height:200%;padding:8px 24px} .panClean .resourceCarouselTabs .resource-carousel-tabs .card{padding:184px 25px 25px} .panClean .resourceCarouselTabs .resource-carousel-tabs .card h3.title{font-size:1.17rem;line-height:150%} .panClean .resourceCarouselTabs .resource-carousel-tabs .card p.h6{font-size:1.02375rem;line-height:171%} .panClean .resourceCarouselTabs .resource-carousel-tabs .card .btn{display:none} } @media(max-width:575.98px){.panClean .resourceCarouselTabs .resource-carousel-tabs .glider-contain .glider-wrapper{padding-left:9px} .panClean .resourceCarouselTabs .resource-carousel-tabs .filters-wrap{padding:0 15px} .panClean .resourceCarouselTabs .resource-carousel-tabs .filters{display:block;margin:0;padding:0} .panClean .resourceCarouselTabs .resource-carousel-tabs .filters>li{width:100%;display:flex;justify-content:center;margin:0 0 15px} .panClean .resourceCarouselTabs .resource-carousel-tabs .filters>li>.btn{width:100%} } @media(min-width:576px){.panClean .resourceCarouselTabs .resource-carousel-tabs .filters-wrap{width:100%;padding:0 7.14285714vw} .panClean .resourceCarouselTabs .resource-carousel-tabs .filters-wrap.nav-center{overflow:hidden} .panClean .resourceCarouselTabs .resource-carousel-tabs .filters-wrap.nav-center .filters{justify-content:center} .panClean .resourceCarouselTabs .resource-carousel-tabs .filters-wrap.nav-scroll{overflow:auto} .panClean .resourceCarouselTabs .resource-carousel-tabs .filters-wrap.nav-scroll::-webkit-scrollbar{opacity:0;height:0} } @media(min-width:1200px){.panClean .resourceCarouselTabs .resource-carousel-tabs .card .card-content{transition:transform .15s ease-in;position:relative;bottom:-50px} .panClean .resourceCarouselTabs .resource-carousel-tabs .card .btn{visibility:hidden;opacity:0;transition:visibility .15s ease-in,opacity .15s ease-in} .panClean .resourceCarouselTabs .resource-carousel-tabs .card .btn:hover{color:#fff} .panClean .resourceCarouselTabs .resource-carousel-tabs .card .btn:hover i{opacity:1} .panClean .resourceCarouselTabs .resource-carousel-tabs .card:hover .card-content,.panClean .resourceCarouselTabs .resource-carousel-tabs .card:focus .card-content{transform:translateY(-50px)} .panClean .resourceCarouselTabs .resource-carousel-tabs .card:hover .btn,.panClean .resourceCarouselTabs .resource-carousel-tabs .card:focus .btn{visibility:visible;opacity:1} } @-moz-document url-prefix(){.panClean .resourceCarouselTabs .filters-wrap.nav-scroll{scrollbar-color:#f4f4f2 #fff;scrollbar-width:thin;padding-bottom:10px} }.panClean .custom-text-comp.theme-dark .eyebrow,.panClean .custom-text-comp.theme-dark .mega-eyebrow,.panClean .custom-text-comp.theme-dark .sub-title{color:#141414} .panClean .custom-text-comp.theme-dark .quote-text-type{color:#5f5f5f} .panClean .custom-text-comp.theme-dark .eyebrow.gray,.panClean .custom-text-comp.theme-dark .mega-eyebrow.gray,.panClean .custom-text-comp.theme-dark .sub-title.gray{color:#5f5f5f} .panClean .custom-text-comp.theme-dark .eyebrow.gray .btn-link,.panClean .custom-text-comp.theme-dark .mega-eyebrow.gray .btn-link,.panClean .custom-text-comp.theme-dark .sub-title.gray .btn-link{color:#5f5f5f} .panClean .custom-text-comp.theme-dark .eyebrow.gray .btn-link::after,.panClean .custom-text-comp.theme-dark .mega-eyebrow.gray .btn-link::after,.panClean .custom-text-comp.theme-dark .sub-title.gray .btn-link::after{background-color:#5f5f5f;bottom:3px} .panClean .custom-text-comp.theme-dark a:not(.btn-link,.btn){text-decoration:underline;color:#5f5f5f} .panClean .custom-text-comp.theme-dark a.btn-link{color:#5f5f5f;text-decoration:underline} .panClean .custom-text-comp.theme-dark a.btn-link:after{content:none} .panClean .custom-text-comp.theme-light .eyebrow,.panClean .custom-text-comp.theme-light .mega-eyebrow,.panClean .custom-text-comp.theme-light .sub-title,.panClean .custom-text-comp.theme-light .quote-text-type,.panClean .custom-text-comp.theme-light .normal-text-type,.panClean .custom-text-comp.theme-light .display-1{color:#fff} .panClean .custom-text-comp.theme-light a:not(.btn-link,.btn){text-decoration:underline;color:#fff} .panClean .custom-text-comp.theme-light a.btn-link{color:#fff;text-decoration:underline} .panClean .custom-text-comp.theme-light a.btn-link:after{content:none} .panClean .custom-text-comp.theme-light .eyebrow.gray,.panClean .custom-text-comp.theme-light .mega-eyebrow.gray,.panClean .custom-text-comp.theme-light .sub-title.gray{color:#5f5f5f} .panClean .custom-text-comp.theme-light .eyebrow.gray .btn-link,.panClean .custom-text-comp.theme-light .mega-eyebrow.gray .btn-link,.panClean .custom-text-comp.theme-light .sub-title.gray .btn-link{color:#5f5f5f} .panClean .custom-text-comp.theme-light .eyebrow.gray .btn-link::after,.panClean .custom-text-comp.theme-light .mega-eyebrow.gray .btn-link::after,.panClean .custom-text-comp.theme-light .sub-title.gray .btn-link::after{background-color:#5f5f5f;bottom:3px} .panClean .custom-text-comp.content-alignment-right .row{flex-direction:row-reverse} .panClean .custom-text-comp .eyebrow,.panClean .custom-text-comp .mega-eyebrow{margin-bottom:45px;font-family:TT Hoves,Arial,"Helvetica Neue",Helvetica,sans-serif} .panClean .custom-text-comp .eyebrow.no-show-eyebrow:before,.panClean .custom-text-comp .mega-eyebrow.no-show-eyebrow:before{display:none} .panClean .custom-text-comp .eyebrow.no-content-eyebrow,.panClean .custom-text-comp .mega-eyebrow.no-content-eyebrow{margin-bottom:0 !important} .panClean .custom-text-comp .eyebrow.medium,.panClean .custom-text-comp .mega-eyebrow.medium{font-size:1.316rem;line-height:1.3} .panClean .custom-text-comp .eyebrow.small,.panClean .custom-text-comp .mega-eyebrow.small{font-weight:600} .panClean .custom-text-comp .normal-text-type{margin-bottom:32px} .panClean .custom-text-comp .sub-title.unit42{font-size:1.608rem;font-weight:500;line-height:1.45;letter-spacing:-0.5px} .panClean .custom-text-comp .quote-text-type{font-family:CelestePro,Georgia,serif;font-weight:300;margin:0 0 45px} .panClean .custom-text-comp .title-color-gtm{color:#fa582d;background-image:linear-gradient(to right,#fa582d,#ee3606);background-clip:text;-webkit-background-clip:text} .panClean .custom-text-comp .display-1.decimal{font-family:TT Hoves,Arial,"Helvetica Neue",Helvetica,sans-serif;font-weight:500;font-size:1.023rem;line-height:1.4} .panClean .custom-text-comp .actions{margin-top:45px} .panClean .custom-text-comp .actions .btn{margin-bottom:10px} .panClean .custom-text-comp ul.check-list{padding-left:40px;padding-left:0;margin:24px 0 0 0} .panClean .custom-text-comp ul.check-list>li{padding-bottom:15px;position:relative} .panClean .custom-text-comp ul.check-list>li::before{position:absolute;content:url('/etc/clientlibs/clean/imgs/check-orange.svg');top:5px;left:-40px;top:12px;left:0} .panClean .custom-text-comp .check-list-center{display:flex;justify-content:center} .panClean .custom-text-comp[data-type="prisma"] .title-color-gtm{color:#00c0e8;background-image:linear-gradient(to right,#00c0e8,#0096b5)} .panClean .custom-text-comp[data-type="prisma"] ul.check-list>li::before{content:url('/etc/clientlibs/clean/imgs/check-blue.svg')} .panClean .custom-text-comp[data-type="cortex"] .title-color-gtm{color:#0c6;background-image:linear-gradient(to right,#0c6,#00994d)} .panClean .custom-text-comp[data-type="cortex"] ul.check-list>li::before{content:url('/etc/clientlibs/clean/imgs/check-green.svg')} .panClean .custom-text-comp[data-type="strata"] .title-color-gtm{color:#ffcb06;background-image:linear-gradient(to right,#ffcb06,#d2a600)} .panClean .custom-text-comp[data-type="strata"] ul.check-list>li::before{content:url('/etc/clientlibs/clean/imgs/check-yellow.svg')} .panClean .custom-text-comp[data-type="unit42"] .title-color-gtm{color:#c84727;background-image:linear-gradient(to right,#d64420,#d9551d)} .panClean .custom-text-comp[data-type="unit42"] ul.check-list>li::before{content:url('/etc/clientlibs/clean/imgs/check-maroon.svg')} .panClean .custom-text-comp[data-type="okyo"] .title-color-gtm{color:#7d87ff;background-image:linear-gradient(to right,#7d87ff,#4a58ff)} .panClean .custom-text-comp[data-type="okyo"] ul.check-list>li::before{content:url('/etc/clientlibs/clean/imgs/check-purple.svg')} @media(max-width:991.98px){.panClean .custom-text-comp .normal-text-type{margin-bottom:24px} .panClean .custom-text-comp.reduce-mobile-text-spacing .title{margin-bottom:16px} .panClean .custom-text-comp.reduce-mobile-text-spacing .actions{margin-top:16px} .panClean .custom-text-comp.title-brand .eyebrow::before{width:30px} .panClean .custom-text-comp.title-brand .eyebrow,.panClean .custom-text-comp.title-brand .mega-eyebrow{padding-top:25px;margin-bottom:45px} .panClean .custom-text-comp.title-brand .eyebrow.medium,.panClean .custom-text-comp.title-brand .mega-eyebrow.medium{font-size:1.023rem;line-height:1.29} .panClean .custom-text-comp.title-brand.text-center:not(.makeAlignmentCenterOnDevices){text-align:left !important} .panClean .custom-text-comp.title-brand.text-center:not(.makeAlignmentCenterOnDevices) .eyebrow:before,.panClean .custom-text-comp.title-brand.text-center:not(.makeAlignmentCenterOnDevices) .mega-eyebrow:before{left:0;transform:none} .panClean .custom-text-comp.title-brand.text-center:not(.makeAlignmentCenterOnDevices) .check-list-center{justify-content:flex-start} .panClean .custom-text-comp.title-brand.text-center .eyebrow:before,.panClean .custom-text-comp.title-brand.text-center .mega-eyebrow:before{left:50%;transform:translate(-50%)} .panClean .custom-text-comp.title-brand .sub-title.unit42{font-size:1.023rem;line-height:1.43} .panClean .custom-text-comp.title-brand.makeAlignmentCenterOnDevices{text-align:center !important} .panClean .custom-text-comp.title-brand.makeAlignmentCenterOnDevices .eyebrow:before,.panClean .custom-text-comp.title-brand.makeAlignmentCenterOnDevices .mega-eyebrow:before{left:50%;transform:translate(-50%)} .panClean .custom-text-comp.title-brand.makeAlignmentCenterOnDevices .check-list-center{justify-content:center} .panClean .custom-text-comp ul.check-list{margin:18px 0 0 0} } @media(max-width:767.98px){.panClean .custom-text-comp .quote-text-type.h3{line-height:1.6em} .panClean .custom-text-comp .normal-text-type{margin-bottom:32px} } @media(min-width:375px){.panClean .custom-text-comp .h6 .btn-link{font-size:1.023rem;font-size:calc(0.875rem + (16 - 14) *((100vw - 375px) /(768 - 375)))} } @media(min-width:768px){.panClean .custom-text-comp .h6 .btn-link{font-size:1.17rem} } @media(min-width:992px){.panClean .custom-text-comp .normal-text-type{margin-bottom:32px} .panClean .custom-text-comp.reduce-desktop-title-spacing.title-brand{margin-bottom:0} .panClean .custom-text-comp.title-brand{text-align:center;margin-bottom:60px} .panClean .custom-text-comp.title-brand .eyebrow::before{width:50px} .panClean .custom-text-comp.title-brand .eyebrow,.panClean .custom-text-comp.title-brand .mega-eyebrow{padding-top:28px;margin-bottom:45px} .panClean .custom-text-comp.title-brand .eyebrow:before,.panClean .custom-text-comp.title-brand .mega-eyebrow:before{left:50%;transform:translateX(-50%)} .panClean .custom-text-comp.title-brand.text-left .eyebrow:before,.panClean .custom-text-comp.title-brand.text-left .mega-eyebrow:before{left:0;transform:none} .panClean .custom-text-comp .display-1.decimal{font-size:1.608rem;line-height:1.4;letter-spacing:0} } @media(min-width:1400px){.panClean .custom-text-comp .h6 .btn-link{font-size:1.17rem;font-size:calc(1rem + (18 - 16) *((100vw - 1400px) /(1920 - 1400)))} } @media(min-width:1920px){.panClean .custom-text-comp .h6 .btn-link{font-size:1.316rem} } @media all and (-ms-high-contrast:none){.panClean .custom-text-comp .title-color-gtm{background:transparent !important} .panClean .custom-text-comp[data-type="default"] .title-color-gtm{color:#fa582d} .panClean .custom-text-comp[data-type="strata"] .title-color-gtm{color:#ffcb06} .panClean .custom-text-comp[data-type="prisma"] .title-color-gtm{color:#00c0e8} .panClean .custom-text-comp[data-type="cortex"] .title-color-gtm{color:#0c6} .panClean .custom-text-comp[data-type="unit42"] .title-color-gtm{color:#c84727} .panClean .custom-text-comp[data-type="okyo"] .title-color-gtm{color:#7d87ff} }.panClean .base-comp-spacer.spacer-none{padding-top:0} .panClean .base-comp-spacer.spacer-small{padding-top:2rem} .panClean .base-comp-spacer.spacer-medium{padding-top:4rem} .panClean .base-comp-spacer.spacer-large{padding-top:6rem} .panClean .base-comp-spacer.spacer-xlarge{padding-top:8rem} .panClean .base-comp-spacer.spacer-xxlarge{padding-top:10rem} .panClean .base-comp-spacer.spacer-xxxlarge{padding-top:12rem} .panClean .base-comp-spacer.bottom-spacer-none{padding-bottom:0} .panClean .base-comp-spacer.bottom-spacer-small{padding-bottom:2rem} .panClean .base-comp-spacer.bottom-spacer-medium{padding-bottom:4rem} .panClean .base-comp-spacer.bottom-spacer-large{padding-bottom:6rem} .panClean .base-comp-spacer.bottom-spacer-xlarge{padding-bottom:8rem} .panClean .base-comp-spacer.bottom-spacer-xxlarge{padding-bottom:10rem} .panClean .base-comp-spacer.bottom-spacer-xxxlarge{padding-bottom:12rem} @media(max-width:991.98px){.panClean .base-comp-spacer.tablet-spacer-none{padding-top:0 !important} .panClean .base-comp-spacer.tablet-spacer-small{padding-top:2rem !important} .panClean .base-comp-spacer.tablet-spacer-medium{padding-top:4rem !important} .panClean .base-comp-spacer.tablet-spacer-large{padding-top:6rem !important} .panClean .base-comp-spacer.tablet-spacer-xlarge{padding-top:8rem !important} .panClean .base-comp-spacer.tablet-spacer-xxlarge{padding-top:10rem !important} .panClean .base-comp-spacer.tablet-spacer-xxxlarge{padding-top:12rem !important} .panClean .base-comp-spacer.bottom-tablet-spacer-none{padding-bottom:0 !important} .panClean .base-comp-spacer.bottom-tablet-spacer-small{padding-bottom:2rem !important} .panClean .base-comp-spacer.bottom-tablet-spacer-medium{padding-bottom:4rem !important} .panClean .base-comp-spacer.bottom-tablet-spacer-large{padding-bottom:6rem !important} .panClean .base-comp-spacer.bottom-tablet-spacer-xlarge{padding-bottom:8rem !important} .panClean .base-comp-spacer.bottom-tablet-spacer-xxlarge{padding-bottom:10rem !important} .panClean .base-comp-spacer.bottom-tablet-spacer-xxxlarge{padding-bottom:12rem !important} } @media(max-width:767.98px){.panClean .base-comp-spacer.mobile-spacer-none{padding-top:0 !important} .panClean .base-comp-spacer.mobile-spacer-small{padding-top:2rem !important} .panClean .base-comp-spacer.mobile-spacer-medium{padding-top:4rem !important} .panClean .base-comp-spacer.mobile-spacer-large{padding-top:6rem !important} .panClean .base-comp-spacer.mobile-spacer-xlarge{padding-top:8rem !important} .panClean .base-comp-spacer.mobile-spacer-xxlarge{padding-top:10rem !important} .panClean .base-comp-spacer.mobile-spacer-xxxlarge{padding-top:12rem !important} .panClean .base-comp-spacer.bottom-mobile-spacer-none{padding-bottom:0 !important} .panClean .base-comp-spacer.bottom-mobile-spacer-small{padding-bottom:2rem !important} .panClean .base-comp-spacer.bottom-mobile-spacer-medium{padding-bottom:4rem !important} .panClean .base-comp-spacer.bottom-mobile-spacer-large{padding-bottom:6rem !important} .panClean .base-comp-spacer.bottom-mobile-spacer-xlarge{padding-bottom:8rem !important} .panClean .base-comp-spacer.bottom-mobile-spacer-xxlarge{padding-bottom:10rem !important} .panClean .base-comp-spacer.bottom-mobile-spacer-xxxlarge{padding-bottom:12rem !important} }@media(min-width:1920px){.panClean .col-search-results{flex:0 0 80%;max-width:80%;padding-left:60px} } .panClean .searchresults .row>.col-12{margin-bottom:30px} .panClean .searchresults .result{background:#fff;box-shadow:0 2px 6px 2px rgba(0,0,0,0.15);border-radius:8px;overflow:hidden;height:100%;display:flex;flex-direction:column;position:relative} .panClean .searchresults .result:hover{text-decoration:none} .panClean .searchresults .result figure.ar-16-9{background-color:#f4f4f2} .panClean .searchresults .result figure.ar-16-9::after{content:'';position:absolute;left:0;bottom:-1px;right:0;width:100%;padding-bottom:18.75%;background-image:url('/etc/clientlibs/clean/imgs/resources/rsc-half-circle.svg');background-size:100% auto;background-repeat:no-repeat;background-position:left bottom;z-index:1} .panClean .searchresults .result figure.ar-16-9.default-image{background-size:auto 50%;background-position:center;background-repeat:no-repeat} .panClean .searchresults .result figure.ar-16-9.asset-brand-logo img{object-fit:contain;padding:35px 30px 60px} .panClean .searchresults .result .content{padding:35px 30px;flex-grow:1} .panClean .searchresults .result .actions{padding:35px 30px} .panClean .searchresults .result .actions>.btn-link{display:inline-flex;align-items:center} .panClean .searchresults .result .actions>.btn-link i{margin-left:5px} .panClean .searchresults .result .icon.lock-icon{display:inline-flex;width:20px;height:20px;background-image:url('/etc/clientlibs/clean/imgs/lock-black.svg');background-size:20px 20px;background-repeat:no-repeat;background-position:center;margin-left:5px} .panClean .searchresults .result[data-resourcetype="serviceDescription"] figure.default-image,.panClean .searchresults .result[data-resourcetype="referenceArchitecture"] figure.default-image,.panClean .searchresults .result[data-resourcetype="useCase"] figure.default-image,.panClean .searchresults .result[data-resourcetype="presentation"] figure.default-image,.panClean .searchresults .result[data-resourcetype="other"] figure.default-image,.panClean .searchresults .result[data-resourcetype="pressRelease"] figure.default-image,.panClean .searchresults .result[data-resourcetype="inTheNews"] figure.default-image,.panClean .searchresults .result[data-resourcetype="article"] figure.default-image,.panClean .searchresults .result[data-resourcetype="blogs"] figure.default-image,.panClean .searchresults .result[data-resourcetype="education"] figure.default-image,.panClean .searchresults .result[data-resourcetype="interactiveContent"] figure.default-image{background-image:url('/etc/clientlibs/clean/imgs/resources/logos/icon-article.svg')} .panClean .searchresults .result[data-resourcetype="whitePaper"] figure.default-image,.panClean .searchresults .result[data-resourcetype="datasheet"] figure.default-image,.panClean .searchresults .result[data-resourcetype="book"] figure.default-image,.panClean .searchresults .result[data-resourcetype="guide"] figure.default-image,.panClean .searchresults .result[data-resourcetype="research"] figure.default-image{background-image:url('/etc/clientlibs/clean/imgs/resources/logos/icon-downloadable.svg')} .panClean .searchresults .result[data-resourcetype="infographic"] figure.default-image{background-image:url('/etc/clientlibs/clean/imgs/resources/logos/icon-interactive.svg')} .panClean .searchresults .result[data-resourcetype="tool"] figure.default-image{background-image:url('/etc/clientlibs/clean/imgs/resources/logos/icon-tool.svg')} .panClean .searchresults .result[data-resourcetype="podcast"] figure.default-image{background-image:url('/etc/clientlibs/clean/imgs/resources/logos/icon-podcast.svg')} .panClean .searchresults .result[data-resourcetype="customerStudy"] figure.default-image{background-image:url('/etc/clientlibs/clean/imgs/resources/logos/icon-customer-story.svg')} .panClean .searchresults .result[data-resourcetype="webinar"] figure.default-image{background-size:auto 40%;background-image:url('/etc/clientlibs/clean/imgs/resources/logos/icon-video.svg')} .panClean .searchresults .result[data-resourcetype="video"] figure.default-image{background-size:auto 40%;background-image:url('/etc/clientlibs/clean/imgs/resources/logos/icon-video.svg')} .panClean .searchresults .result[data-resourcetype="video"] figure.asset-brand-logo img{padding:0;object-fit:cover} .panClean .searchresults .result[data-resourcetype="inTheNews"] figure.asset-brand-logo img{object-fit:contain} .panClean .searchresults .result[data-resourcetype="unit42"] figure.default-image{background-image:url('/etc/clientlibs/clean/imgs/icon-Unit42.svg')} .panClean .searchresults .result[data-trending="true"]::before{content:"TRENDING";background:#fa582d;top:0;position:absolute;left:0;height:27px;width:100%;text-align:center;font:.73125rem/110% TT Hoves,Arial,"Helvetica Neue",Helvetica,sans-serif;font-weight:500;padding:8px;color:#fff;z-index:1} .panClean .searchresults .result-type{color:#5f5f5f;font-size:1.31625rem;line-height:133%;display:flex;margin:0 0 10px;text-transform:uppercase} .panClean .searchresults .result-title{color:#141414;font-size:1.755rem;line-height:133%;display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden} .panClean .searchresults .result-meta{font-size:.950625rem;line-height:138%} .panClean .searchresults .result-meta a{color:#141414} .panClean .searchresults .result-meta a:hover{text-decoration:underline} .panClean .searchresults .no-results{display:flex;justify-content:center;align-items:center;padding:15px;background-color:#f4f4f2;border-radius:8px} .panClean .searchresults .no-results .no-results-title{margin:0} @media(max-width:1199.98px){.panClean .searchresults .result-type{font-size:1.02375rem;line-height:128%} .panClean .searchresults .result-title{font-size:1.31625rem;line-height:133%} } @media(max-width:767.98px){.panClean .searchresults .no-results{margin-top:15px} } @media(min-width:768px){.panClean .searchresults .no-results{margin-top:30px} } .panClean .searchresults .curated-result{box-shadow:0 1.60242px 4.80725px 1.60242px rgba(0,0,0,0.15);border-radius:8px;overflow:hidden;height:100%} .panClean .searchresults .curated-result:hover{text-decoration:none} .panClean .searchresults .curated-result.layout-backgroundImage{display:flex;flex-direction:column;position:relative} .panClean .searchresults .curated-result.layout-backgroundImage .bg-image{position:absolute;top:0;left:0;bottom:0;right:0;z-index:0;background-size:cover;background-repeat:no-repeat;background-position:left top;z-index:1} .panClean .searchresults .curated-result.layout-backgroundImage .content{padding:120px 30px 35px 30px;flex-grow:1;z-index:2} .panClean .searchresults .curated-result.layout-backgroundImage .result-title{font-size:1.755rem;line-height:133%;margin:0 0 15px} .panClean .searchresults .curated-result.layout-backgroundImage .result-description{font-size:.950625rem;line-height:138%;margin:0 0 15px;font-weight:500} .panClean .searchresults .curated-result.layout-backgroundImage .actions{padding:35px 30px;position:relative;z-index:2} .panClean .searchresults .curated-result.layout-backgroundImage .actions .btn-outline-dark:hover{background-color:#fff;border-color:#fff;color:#141414} .panClean .searchresults .curated-result.layout-backgroundImage .actions .btn-outline-light:hover{background-color:#141414;border-color:#141414;color:#fff} .panClean .searchresults .curated-result.theme-light{background-color:#fff} .panClean .searchresults .curated-result.theme-light .result-title,.panClean .searchresults .curated-result.theme-light .result-type,.panClean .searchresults .curated-result.theme-light .result-description{color:#141414} .panClean .searchresults .curated-result.theme-dark{background-color:#141414} .panClean .searchresults .curated-result.theme-dark .result-title,.panClean .searchresults .curated-result.theme-dark .result-type,.panClean .searchresults .curated-result.theme-dark .result-description{color:#fff} @media(max-width:767.98px){.panClean .searchresults .curated-result.layout-backgroundImage .bg-image{display:none} .panClean .searchresults .curated-result.span-one .content,.panClean .searchresults .curated-result.span-two .content,.panClean .searchresults .curated-result.span-three .content{width:100%} } @media(min-width:768px) and (max-width:1599.98px){.panClean .searchresults .curated-result.span-one .content{width:100%} .panClean .searchresults .curated-result.span-two .content,.panClean .searchresults .curated-result.span-three .content{width:50%} .panClean .searchresults .row>.col-12[data-span="2"]:nth-of-type(even),.panClean .searchresults .row>.col-12[data-span="3"]:nth-of-type(even){flex:0 0 50%;max-width:50%} .panClean .searchresults .row>.col-12[data-span="2"]:nth-of-type(even) .curated-result.span-two .content,.panClean .searchresults .row>.col-12[data-span="3"]:nth-of-type(even) .curated-result.span-two .content,.panClean .searchresults .row>.col-12[data-span="2"]:nth-of-type(even) .curated-result.span-three .content,.panClean .searchresults .row>.col-12[data-span="3"]:nth-of-type(even) .curated-result.span-three .content{width:100%} } @media(min-width:1600px){.panClean .searchresults .curated-result.span-one .content{width:100%} .panClean .searchresults .curated-result.span-two .content{width:50%} .panClean .searchresults .curated-result.span-three .content{width:33.333333%} } .panClean .searchresults .curated-result.layout-backgroundImage:before{content:'';z-index:1;position:absolute;top:0;right:0;left:0;bottom:0;background-size:contain;background-repeat:no-repeat;background-position:right bottom;z-index:0} .panClean .searchresults .curated-result.layout-backgroundImage:after{content:'';height:40px;width:120px;background-size:contain;background-repeat:no-repeat;background-position:left center;position:absolute;top:35px;left:30px;z-index:1} .panClean .searchresults .curated-result.layout-backgroundImage[data-type="prisma"]{background-image:linear-gradient(to top,#004f5e,#00bfe7)} .panClean .searchresults .curated-result.layout-backgroundImage[data-type="prisma"]:before{background-image:url('/etc/clientlibs/clean/imgs/resources/logos/bg-prisma.svg')} .panClean .searchresults .curated-result.layout-backgroundImage[data-type="prisma"]:after{background-image:url('/etc/clientlibs/clean/imgs/resources/logos/logo-prisma.svg')} .panClean .searchresults .curated-result.layout-backgroundImage[data-type="prisma"].theme-light:after{background-image:url('/etc/clientlibs/clean/imgs/resources/logos/logo-prisma-black.svg')} .panClean .searchresults .curated-result.layout-backgroundImage[data-type="cortex"]{background-image:linear-gradient(to top,#021,#00b259)} .panClean .searchresults .curated-result.layout-backgroundImage[data-type="cortex"]:before{background-image:url('/etc/clientlibs/clean/imgs/resources/logos/bg-cortex.svg')} .panClean .searchresults .curated-result.layout-backgroundImage[data-type="cortex"]:after{background-image:url('/etc/clientlibs/clean/imgs/resources/logos/logo-cortex.svg')} .panClean .searchresults .curated-result.layout-backgroundImage[data-type="cortex"].theme-light:after{background-image:url('/etc/clientlibs/clean/imgs/resources/logos/logo-cortex-black.svg')} .panClean .searchresults .curated-result.layout-backgroundImage[data-type="default"]{background-image:linear-gradient(to top,#521100,#fa582d)} .panClean .searchresults .curated-result.layout-backgroundImage[data-type="default"]:before{background-image:url('/etc/clientlibs/clean/imgs/resources/logos/bg-default.svg')} .panClean .searchresults .curated-result.layout-backgroundImage[data-type="default"]:after{background-image:url('/etc/clientlibs/clean/imgs/resources/logos/logo-default.svg')} .panClean .searchresults .curated-result.layout-backgroundImage[data-type="default"].theme-light:after{background-image:url('/etc/clientlibs/clean/imgs/resources/logos/logo-default-black.svg')} .panClean .searchresults .curated-result.layout-backgroundImage[data-type="unit42"]{background-image:linear-gradient(to top,#b73f23,#621b09)} .panClean .searchresults .curated-result.layout-backgroundImage[data-type="unit42"]:before{background-image:url('/etc/clientlibs/clean/imgs/resources/logos/bg-unit42.svg')} .panClean .searchresults .curated-result.layout-backgroundImage[data-type="unit42"]:after{background-image:url('/etc/clientlibs/clean/imgs/resources/logos/logo-unit42.svg')} .panClean .searchresults .curated-result.layout-backgroundImage[data-type="unit42"].theme-light:after{background-image:url('/etc/clientlibs/clean/imgs/resources/logos/logo-unit42-black.svg')} .panClean .searchresults .curated-result.layout-backgroundImage[data-type="strata"]{background-image:linear-gradient(to top,#693900,#ffd232)} .panClean .searchresults .curated-result.layout-backgroundImage[data-type="strata"]:before{background-image:url('/etc/clientlibs/clean/imgs/resources/logos/bg-strata.svg')} .panClean .searchresults .curated-result.layout-backgroundImage[data-type="strata"]:after{background-image:url('/etc/clientlibs/clean/imgs/resources/logos/logo-strata.svg')} .panClean .searchresults .curated-result.layout-backgroundImage[data-type="strata"].theme-light:after{background-image:url('/etc/clientlibs/clean/imgs/resources/logos/logo-strata-black.svg')}.panClean .pan-page-alert{width:100%;background-color:#f4f4f2;text-align:center;position:relative;top:0;left:0;right:0;line-height:20px;align-items:center;justify-content:space-between;z-index:999;padding:0;display:none} .panClean .pan-page-alert .pan-page-alert-text{display:flex;align-items:center;justify-content:center;flex-grow:1;color:#fff;font-family:TT Hoves,Decimal,Arial,"Helvetica Neue",Helvetica,sans-serif;font-style:normal;font-weight:600;line-height:20px} .panClean .pan-page-alert .pan-page-alert-text a{color:#fff;text-decoration:none;border:none !important;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;max-height:80px;padding-top:0;padding-bottom:0} .panClean .pan-page-alert .pan-page-alert-text a:hover{border-color:transparent} @media(max-width:991.98px){.panClean .pan-page-alert .pan-page-alert-text{-webkit-line-clamp:1;max-height:60px} } .panClean .pan-page-alert .pan-page-alert-close{margin:0 15px;width:24px;height:24px;border-radius:24px;background-size:contain;background-repeat:no-repeat;background-position:center;background-image:url('/etc/clientlibs/clean/imgs/x-white.svg');border:0;background-color:transparent} .panClean .pan-page-alert.pan-page-alert-light{background-color:#f4f4f2} .panClean .pan-page-alert.pan-page-alert-light .pan-page-alert-text{color:#141414} .panClean .pan-page-alert.pan-page-alert-light .pan-page-alert-text a{color:#141414} .panClean .pan-page-alert.pan-page-alert-light .pan-page-alert-close{background-image:url('/etc/clientlibs/clean/imgs/x-black.svg')} .panClean .pan-page-alert.pan-page-alert-light .pan-page-alert-close svg path{stroke:#000} .panClean .pan-page-alert.pan-page-alert-black{background-color:#141414} .panClean .pan-page-alert.pan-page-alert-black .pan-page-alert-close svg path{stroke:#fff} .panClean .pan-page-alert.pan-page-alert-orange,.panClean .pan-page-alert.pan-page-alert-red{background-color:#fa582d} .panClean .pan-page-alert.pan-page-alert-yellow{background-color:#ffcb06} .panClean .pan-page-alert.pan-page-alert-green{background-color:#0c6} .panClean .pan-page-alert.pan-page-alert-blue{background-color:#00c0e8} .panClean .pan-page-alert.open{display:flex;z-index:997} @media(max-width:991.98px){.panClean .pan-page-alert.open.abs-nav{z-index:99} } @media(max-width:1199.98px){.panClean .pan-page-alert{height:60px} .panClean .pan-page-alert .pan-page-alert-text{font-size:1.02375rem} .panClean .pan-page-alert.open ~ .pan-clean-header.absolute{margin-top:60px} .panClean .pan-page-alert.open ~ .pan-clean-header .pan-nav-search{top:-60px} } @media(max-width:767.98px){.panClean .pan-page-alert .pan-page-alert-text{text-align:left} } @media(min-width:1200px){.panClean .pan-page-alert{height:60px} .panClean .pan-page-alert .pan-page-alert-text{font-size:1.17rem} .panClean .pan-page-alert.open ~ .pan-clean-header.absolute{margin-top:60px} .panClean .pan-page-alert.open ~ .pan-clean-header .bg-overlay{top:160px} } .panClean .pan-page-alert.alert-2023{height:60px;max-height:60px;overflow:hidden} .panClean .pan-page-alert.alert-2023 .container-fluid{position:relative} .panClean .pan-page-alert.alert-2023 .glider-slide{display:flex} .panClean .pan-page-alert.alert-2023 .col-12{width:100%} .panClean .pan-page-alert.alert-2023 .d-none{display:none} .panClean .pan-page-alert.alert-2023 .pan-page-alert-actions{position:absolute;right:0;top:50%;transform:translateY(-50%)} .panClean .pan-page-alert.alert-2023 .pan-page-alert-actions .btn-primary{flex-grow:0;flex-shrink:0;display:inline-block;font-weight:600;vertical-align:middle;text-decoration:none;padding:.25rem .675rem;position:relative;text-align:left;border:0;font-family:TT Hoves,Decimal,Arial,"Helvetica Neue",Helvetica,sans-serif;white-space:nowrap} @media(min-width:768px){.panClean .pan-page-alert.alert-2023 .pan-page-alert-actions .btn{padding:6px 16px;font-size:14px;line-height:18px;font-weight:500} } @media(min-width:1200px){.panClean .pan-page-alert.alert-2023 .d-xl-block{display:block} } .panClean .pan-page-alert.alert-2023 .content{height:60px;display:inline-flex;align-items:center;margin-bottom:0} .panClean .pan-page-alert.alert-2023 [data-truncate-lines="2"]{display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;-webkit-line-clamp:2} @media(min-width:768px){.panClean .pan-page-alert.alert-2023 [data-sm-truncate-lines="1"]{-webkit-line-clamp:1} } .panClean .pan-page-alert.alert-2023 .glider-prev{left:-56px} .panClean .pan-page-alert.alert-2023 .glider-next{right:-56px} .panClean .pan-page-alert.alert-2023 .glider-prev,.panClean .pan-page-alert.alert-2023 .glider-next{border:0;transform:translateY(-50%)} .panClean .pan-page-alert.alert-2023 a .pan-page-alert-text{text-decoration:none} .panClean .pan-page-alert.alert-2023 a .btn-link{color:#fff} .panClean .pan-page-alert.alert-2023 .pan-page-alert-text{flex-grow:0;color:#141414;font-family:TT Hoves,Decimal,Arial,"Helvetica Neue",Helvetica,sans-serif;font-style:normal;font-weight:500;letter-spacing:.44px;line-height:1.25rem;font-size:.875rem} .panClean .pan-page-alert.alert-2023.pan-page-alert-black{background:#000;background-image:linear-gradient(124deg,#000 25%,#1f1f1f 43%);background-size:cover;background-position:center} .panClean .pan-page-alert.alert-2023.pan-page-alert-black .pan-page-alert-text{color:#fff} .panClean .pan-page-alert.alert-2023.pan-page-alert-black .pan-page-alert-text a{color:#fff} .panClean .pan-page-alert.alert-2023.pan-page-alert-black .pan-page-alert-left-arr{background-color:transparent;background-image:url('/etc/clientlibs/clean/imgs/chevron-left-white.svg')} .panClean .pan-page-alert.alert-2023.pan-page-alert-black .pan-page-alert-right-arr{background-color:transparent;background-image:url('/etc/clientlibs/clean/imgs/chevron-right-white.svg')} .panClean .pan-page-alert.alert-2023.open{display:block;z-index:1001} @media(max-width:1599.98px){.panClean .pan-page-alert.alert-2023 .pan-page-alert-text{font-size:16px;line-height:1.5;letter-spacing:.32px} .panClean .pan-page-alert.alert-2023 .pan-page-alert-actions .btn-link{font-size:12px;line-height:16px} .panClean .pan-page-alert.alert-2023.open ~ .pan-clean-header.absolute{margin-top:60px} .panClean .pan-page-alert.alert-2023.open ~ .pan-clean-header .pan-nav-search{top:-60px} } @media(max-width:767.98px){.panClean .pan-page-alert.alert-2023 .container-fluid{margin:0;padding:0 30px} .panClean .pan-page-alert.alert-2023 .pan-page-alert-text{text-align:left;padding-left:15px} .panClean .pan-page-alert.alert-2023 .glider-prev{left:-10px} .panClean .pan-page-alert.alert-2023 .glider-next{right:-10px} } @media(max-width:575.98px){.panClean .pan-page-alert.alert-2023 .container-fluid{padding:0 15px} } @media(min-width:1200px){.panClean .pan-page-alert.alert-2023 .pan-page-alert-text{line-height:1.25rem;font-size:14px} .panClean .pan-page-alert.alert-2023 .pan-page-alert-actions .btn-link{font-size:14px;line-height:16px} } @media(min-width:1400px){.panClean .pan-page-alert.alert-2023.open{display:block;z-index:1001} .panClean .pan-page-alert.alert-2023 .pan-page-alert-text{line-height:1.25rem;font-size:14px} .panClean .pan-page-alert.alert-2023 .pan-page-alert-actions .btn-link{font-size:14px;line-height:16px} .panClean .pan-page-alert.alert-2023.open ~ .pan-clean-header.absolute{margin-top:60px} .panClean .pan-page-alert.alert-2023.open ~ .pan-clean-header .bg-overlay{top:160px} } @media(min-width:1600px){.panClean .pan-page-alert.alert-2023 .pan-page-alert-text{line-height:1.25rem;font-size:16px} .panClean .pan-page-alert.alert-2023 .pan-page-alert-actions .btn-link{font-size:16px;line-height:16px} } .panClean .mainNavigationComp .nav2021Component.init-sticky .pan-2021-nav{background-color:transparent} .panClean .mainNavigationComp .nav2021Component.init-sticky .pan-2021-nav::before{content:'';position:absolute;top:0;left:0;right:0;height:100px;opacity:0;background-color:#fff;box-shadow:0 15px 13px rgba(0,0,0,0.15);transition:transform .5s,opacity .5s;z-index:-1} @media(max-width:991.98px){.panClean .mainNavigationComp .nav2021Component.init-sticky.init-sticky .pan-2021-nav::before{height:75px} } @media(min-width:1200px){.panClean .mainNavigationComp .nav2021Component.init-sticky .pan-2021-nav{transition:none} .panClean .mainNavigationComp .nav2021Component.init-sticky .pan-2021-nav::before{top:49px} } @media(max-width:991.98px){.panClean .mainNavigationComp .nav2021Component.init-sticky .pan-2021-nav::before{height:75px} } @media(min-width:1200px){.panClean .mainNavigationComp .nav2021Component .pan-2021-nav{transition:none} .panClean .mainNavigationComp .nav2021Component .pan-2021-nav::before{top:49px} } @media(max-width:1199.98px){.panClean .mainNavigationComp .nav2021Component .pan-2021-nav.open{z-index:1002} } .panClean .mainNavigationComp.sticky .nav2021Component .pan-2021-nav,.panClean .mainNavigationComp.sticky .nav2021Component.absolute .pan-2021-nav{position:fixed;left:0;right:0;top:0;z-index:1000;background-color:#fff} .panClean .mainNavigationComp.sticky .nav2021Component .pan-2021-nav .dropdown-overlay,.panClean .mainNavigationComp.sticky .nav2021Component.absolute .pan-2021-nav .dropdown-overlay{height:200vh} @media(max-width:1199.98px){.panClean .mainNavigationComp.sticky .nav2021Component:not(.absolute){padding-bottom:100px} .panClean .mainNavigationComp.sticky .nav2021Component .pan-2021-nav-main,.panClean .mainNavigationComp.sticky .nav2021Component.absolute .pan-2021-nav-main{height:100vh} .panClean .mainNavigationComp.sticky .nav2021Component.init-sticky .pan-2021-nav,.panClean .mainNavigationComp.sticky .nav2021Component.absolute.init-sticky .pan-2021-nav{background-color:transparent} .panClean .mainNavigationComp.sticky .nav2021Component.init-sticky .pan-2021-nav::before,.panClean .mainNavigationComp.sticky .nav2021Component.absolute.init-sticky .pan-2021-nav::before{opacity:.95;transform:translateY(0)} } @media(max-width:991.98px){.panClean .mainNavigationComp.sticky .nav2021Component:not(.absolute){padding-bottom:75px} } @media(min-width:1200px){.panClean .mainNavigationComp.sticky .nav2021Component:not(.absolute){padding-bottom:149px} .panClean .mainNavigationComp.sticky .nav2021Component.main-2023-alert:not(.absolute){padding-bottom:209px} .panClean .mainNavigationComp.sticky .nav2021Component.light .pan-2021-nav .pan-2021-nav-toolbar{background-color:#f4f4f2} .panClean .mainNavigationComp.sticky .nav2021Component.light .pan-2021-nav .pan-2021-nav-main{background-color:#fff} .panClean .mainNavigationComp.sticky .nav2021Component .pan-2021-nav .mega-dropdown-menu,.panClean .mainNavigationComp.sticky .nav2021Component.absolute .pan-2021-nav .mega-dropdown-menu{top:149px !important} .panClean .mainNavigationComp.sticky .nav2021Component.init-sticky .pan-2021-nav,.panClean .mainNavigationComp.sticky .nav2021Component.absolute.init-sticky .pan-2021-nav{background-color:transparent;transform:translateY(-49px)} .panClean .mainNavigationComp.sticky .nav2021Component.init-sticky .pan-2021-nav::before,.panClean .mainNavigationComp.sticky .nav2021Component.absolute.init-sticky .pan-2021-nav::before{opacity:.95;transform:translateY(0)} } .panClean .mainNavigationComp.sticky .pan-page-alert.open ~ .nav2021Component.absolute .pan-2021-nav{margin-top:0} .panClean .nav2021Component .pan-2021-nav{font-family:TT Hoves,Decimal,Arial,"Helvetica Neue",Helvetica,sans-serif;font-weight:600;transition:transform .25s linear,visibility .25s linear} .panClean .nav2021Component .pan-2021-nav .dropdown-overlay{visibility:hidden;position:fixed;top:0;left:0;right:0;bottom:0;background-color:#000;opacity:.65} .panClean .nav2021Component .pan-2021-nav .mega-dropdown-menu{display:none} @media(max-width:1199.98px){.panClean .nav2021Component .pan-2021-nav{display:flex;align-items:center;justify-content:space-between;padding:0 7.14285714vw;height:100px;visibility:visible !important;flex-wrap:wrap} .panClean .nav2021Component .pan-2021-nav>.nav-open,.panClean .nav2021Component .pan-2021-nav>.mobile-search,.panClean .nav2021Component .pan-2021-nav>.mobile-header-logo{display:inline-block;background-repeat:no-repeat;background-position:center;flex-grow:0;flex-shrink:0;flex-basis:auto;padding:0;border:0} .panClean .nav2021Component .pan-2021-nav>.nav-open{width:45px;height:45px;background-size:24px 24px} .panClean .nav2021Component .pan-2021-nav>.mobile-search{width:45px;height:45px;background-size:29px 29px} .panClean .nav2021Component .pan-2021-nav>.mobile-header-logo{width:140px;height:26px;background-size:140px 26px} .panClean .nav2021Component .pan-2021-nav .dropdown-overlay{z-index:997} .panClean .nav2021Component .pan-2021-nav.open .pan-2021-nav-main{transform:translateX(100%);transition-timing-function:ease-out} .panClean .nav2021Component .pan-2021-nav.open .dropdown-overlay{visibility:visible} } @media(max-width:991.98px){.panClean .nav2021Component .pan-2021-nav{height:75px} } @media(max-width:767.98px){.panClean .nav2021Component .pan-2021-nav{padding:0} .panClean .nav2021Component .pan-2021-nav>.mobile-search{width:63px;height:63px;background-size:24px 24px} .panClean .nav2021Component .pan-2021-nav>.mobile-header-logo{width:98px;height:18px;background-size:98px 18px} } @media(min-width:1200px){.panClean .nav2021Component .pan-2021-nav{position:relative;z-index:999} .panClean .nav2021Component .pan-2021-nav>.nav-open,.panClean .nav2021Component .pan-2021-nav>.nav-logo,.panClean .nav2021Component .pan-2021-nav>.mobile-header-logo,.panClean .nav2021Component .pan-2021-nav>.mobile-search{display:none} .panClean .nav2021Component .pan-2021-nav .dropdown-overlay{z-index:-1} .panClean .nav2021Component .pan-2021-nav.open .dropdown-overlay{visibility:visible} } @media(min-width:1200px) and (max-width:1399.98px){.panClean .nav2021Component .pan-2021-nav .pan-2021-nav-toolbar>.container-fluid,.panClean .nav2021Component .pan-2021-nav .pan-2021-nav-main>.container-fluid{margin:0} } .panClean .nav2021Component.absolute .pan-2021-nav{position:absolute;top:0;left:0;right:0;z-index:1000} @media(max-width:1199.98px){.panClean .nav2021Component:not(.absolute) .pan-2021-nav{position:relative} } @media(max-width:1199.98px){.panClean .nav2021Component.light:not(.absolute) .pan-2021-nav{background-color:#f4f4f2} .panClean .nav2021Component.light .pan-2021-nav{background:0} .panClean .nav2021Component.light .pan-2021-nav>.nav-open{background-image:url('/etc/clientlibs/clean/imgs/menu-alt-black.svg')} .panClean .nav2021Component.light .pan-2021-nav>.mobile-search{background-image:url('/etc/clientlibs/clean/imgs/search-black.svg')} .panClean .nav2021Component.light .pan-2021-nav>.mobile-header-logo{background-image:url('/etc/clientlibs/clean/imgs/pan-logo-dark.svg')} .panClean .nav2021Component.light .pan-2021-nav>.nav-open:active,.panClean .nav2021Component.light .pan-2021-nav>.mobile-search:active{background-color:rgba(255,255,255,0.15)} .panClean .nav2021Component.light.alt-light .pan-2021-nav>.mobile-header-logo{background-image:url('/etc/clientlibs/clean/imgs/pan-logo-alt-dark.svg')} .panClean .nav2021Component.dark .pan-2021-nav{background:0} .panClean .nav2021Component.dark .pan-2021-nav>.nav-open{background-image:url('/etc/clientlibs/clean/imgs/menu-alt-white.svg')} .panClean .nav2021Component.dark .pan-2021-nav>.mobile-search{background-image:url('/etc/clientlibs/clean/imgs/search-white.svg')} .panClean .nav2021Component.dark .pan-2021-nav>.mobile-header-logo{background-image:url('/etc/clientlibs/clean/imgs/pan-logo-light.svg')} .panClean .nav2021Component.dark .pan-2021-nav>.nav-open:active,.panClean .nav2021Component.dark .pan-2021-nav>.mobile-search:active{background-color:rgba(0,0,0,0.15)} } .panClean .nav2021Component .pan-2021-nav-toolbar{background-color:#f4f4f2} .panClean .nav2021Component .pan-2021-nav-toolbar .dropdown-menu{display:none} .panClean .nav2021Component .pan-2021-nav-toolbar .dropdown-menu.show{display:block} .panClean .nav2021Component .pan-2021-nav-toolbar .open .dropdown-menu{display:block} @media(max-width:1199.98px){.panClean .nav2021Component .pan-2021-nav-toolbar{display:none} } @media(min-width:1200px){.panClean .nav2021Component .pan-2021-nav-toolbar{height:49px} .panClean .nav2021Component .pan-2021-nav-toolbar>.container-fluid{display:flex;align-items:center;justify-content:space-between} .panClean .nav2021Component .pan-2021-nav-toolbar .toolbar-nav{list-style:none;display:flex;align-items:center;flex-grow:0;flex-shrink:0;flex-basis:auto;margin:0 -15px;padding:0;font-family:TT Hoves,Decimal,Arial,"Helvetica Neue",Helvetica,sans-serif;font-weight:500;height:48px} .panClean .nav2021Component .pan-2021-nav-toolbar .toolbar-nav>li{display:inline-flex;height:100%;align-items:center} .panClean .nav2021Component .pan-2021-nav-toolbar .toolbar-nav>li>a,.panClean .nav2021Component .pan-2021-nav-toolbar .toolbar-nav>li>span{color:#141414;font-size:12px;line-height:20px;text-decoration:none;padding:0 12px;margin:0 3px} .panClean .nav2021Component .pan-2021-nav-toolbar .toolbar-nav>li>a.under-attack,.panClean .nav2021Component .pan-2021-nav-toolbar .toolbar-nav>li>span.under-attack{color:#c84727} .panClean .nav2021Component .pan-2021-nav-toolbar .toolbar-nav>li .dropdown>.dropdown-toggle{color:#141414;font-size:12px;line-height:20px;text-decoration:none;padding:0 12px;margin:0 3px;display:flex;align-items:center} .panClean .nav2021Component .pan-2021-nav-toolbar .toolbar-nav>li .dropdown>.dropdown-toggle::after{display:inline-block;border:0;width:18px;height:18px;background-size:18px 18px;background-repeat:no-repeat;background-position:center;background-image:url('/etc/clientlibs/clean/imgs/chevron-down-black.svg')} } @media(min-width:1400px){.panClean .nav2021Component .pan-2021-nav-toolbar .toolbar-nav>li>a,.panClean .nav2021Component .pan-2021-nav-toolbar .toolbar-nav>li>span{font-size:13px} .panClean .nav2021Component .pan-2021-nav-toolbar .toolbar-nav>li .dropdown>.dropdown-toggle{font-size:13px} } @media(min-width:1600px){.panClean .nav2021Component .pan-2021-nav-toolbar .toolbar-nav>li>a,.panClean .nav2021Component .pan-2021-nav-toolbar .toolbar-nav>li>span{font-size:14px} .panClean .nav2021Component .pan-2021-nav-toolbar .toolbar-nav>li .dropdown>.dropdown-toggle{font-size:14px} } @media(max-width:1199.98px){.panClean .nav2021Component .pan-2021-nav-main{background-color:#fff;display:flex;flex-direction:column;position:fixed;top:0;left:-768px;width:768px;bottom:0;z-index:998;will-change:transform,visibility;transition:visibility .25s,transform .25s;transition-timing-function:ease-out;padding:0;overflow:auto;border-top:1px solid #d8d8d8} .panClean .nav2021Component .pan-2021-nav-main .container-fluid{margin:0;padding:0} .panClean .nav2021Component .pan-2021-nav-main .mobile-header{display:flex;height:75px;align-items:center;justify-content:space-between;border-bottom:1px solid #d8d8d8;flex-shrink:0;padding:0 30px} .panClean .nav2021Component .pan-2021-nav-main .mobile-header .nav-close,.panClean .nav2021Component .pan-2021-nav-main .mobile-header .mobile-search{padding:15px;border:0} .panClean .nav2021Component .pan-2021-nav-main .mobile-header .nav-close:active,.panClean .nav2021Component .pan-2021-nav-main .mobile-header .mobile-search:active{background-color:#f4f4f2} .panClean .nav2021Component .pan-2021-nav-main .mobile-header .nav-close{margin-left:-15px} .panClean .nav2021Component .pan-2021-nav-main .mobile-header .mobile-search{margin-right:-15px} } @media(max-width:767.98px){.panClean .nav2021Component .pan-2021-nav-main{left:-100%;width:100%} } @media(max-width:374.98px){.panClean .nav2021Component .pan-2021-nav-main .mobile-header{padding:0 15px} } @media(min-width:1200px){.panClean .nav2021Component .pan-2021-nav-main .mobile-header,.panClean .nav2021Component .pan-2021-nav-main .nav-mobile-toolbar{display:none} .panClean .nav2021Component .pan-2021-nav-main>.container-fluid{display:flex;align-items:center;justify-content:space-between} .panClean .nav2021Component .pan-2021-nav-main .nav-left,.panClean .nav2021Component .pan-2021-nav-main .nav-right{list-style:none;margin:0;padding:0;display:flex;align-items:center;flex-grow:0;flex-basis:auto;font-family:TT Hoves,Decimal,Arial,"Helvetica Neue",Helvetica,sans-serif;font-weight:600;font-size:12px;line-height:18px;height:100px} .panClean .nav2021Component .pan-2021-nav-main .nav-left>li,.panClean .nav2021Component .pan-2021-nav-main .nav-right>li{display:flex;align-items:center;height:100px} .panClean .nav2021Component .pan-2021-nav-main .nav-left>li>a,.panClean .nav2021Component .pan-2021-nav-main .nav-right>li>a{text-align:center;font-weight:500} .panClean .nav2021Component .pan-2021-nav-main .nav-left>li>a::focus,.panClean .nav2021Component .pan-2021-nav-main .nav-right>li>a::focus,.panClean .nav2021Component .pan-2021-nav-main .nav-left>li>a::-moz-focus-inner,.panClean .nav2021Component .pan-2021-nav-main .nav-right>li>a::-moz-focus-inner{outline:0;box-shadow:0 0 0 3px rgba(250,88,45,0.5)} .panClean .nav2021Component .pan-2021-nav-main .nav-left>li:not(.link)>a:hover,.panClean .nav2021Component .pan-2021-nav-main .nav-right>li:not(.link)>a:hover{text-decoration:none} .panClean .nav2021Component .pan-2021-nav-main .nav-left{flex-shrink:1} .panClean .nav2021Component .pan-2021-nav-main .nav-left>li>a{display:flex;align-items:center;height:100px;padding:0 15px} .panClean .nav2021Component .pan-2021-nav-main .nav-left>li.logo{padding-right:30px} .panClean .nav2021Component .pan-2021-nav-main .nav-left>li.logo>a{display:inline-block;padding:0;width:117px;height:22px;background-repeat:no-repeat;background-size:contain} .panClean .nav2021Component .pan-2021-nav-main .nav-left>li.logo>a::after{content:none} .panClean .nav2021Component .pan-2021-nav-main .nav-right{flex-shrink:0;margin-left:15px} .panClean .nav2021Component .pan-2021-nav-main .nav-right>li .btn{font-size:12px;padding:8px 15px} } @media(min-width:1600px){.panClean .nav2021Component .pan-2021-nav-main .nav-left>li>a,.panClean .nav2021Component .pan-2021-nav-main .nav-right>li>a{font-size:13px} .panClean .nav2021Component .pan-2021-nav-main .nav-left>li>a{padding:0 20px} .panClean .nav2021Component .pan-2021-nav-main .nav-left>li.logo>a{padding:0;width:140px;height:26px} .panClean .nav2021Component .pan-2021-nav-main .nav-right>li .btn{font-size:14px;padding:10px 20px} .panClean .nav2021Component .pan-2021-nav-main .nav-right{margin-left:20px} } @media(min-width:1920px){.panClean .nav2021Component .pan-2021-nav-main .nav-left>li.logo{padding-right:40px} } @media(min-width:1200px){.panClean .nav2021Component.dark .pan-2021-nav:not(.open) .pan-2021-nav-main{background:0} .panClean .nav2021Component.dark .pan-2021-nav:not(.open) .pan-2021-nav-main .logo>a{background-image:url('/etc/clientlibs/clean/imgs/pan-logo-light.svg')} .panClean .nav2021Component.dark .pan-2021-nav:not(.open) .pan-2021-nav-main .nav-left>li>a{color:#fff} .panClean .nav2021Component.dark .pan-2021-nav:not(.open) .pan-2021-nav-main .nav-right>li.search>a{background-image:url('/etc/clientlibs/clean/imgs/search-white.svg')} .panClean .nav2021Component.light:not(.absolute) .pan-2021-nav .pan-2021-nav-main,.panClean .nav2021Component.light .pan-2021-nav.open .pan-2021-nav-main,.panClean .nav2021Component.dark .pan-2021-nav.open .pan-2021-nav-main{background-color:#fff} .panClean .nav2021Component.light .pan-2021-nav-main .logo>a,.panClean .nav2021Component.dark .pan-2021-nav.open .pan-2021-nav-main .logo>a{background-image:url('/etc/clientlibs/clean/imgs/pan-logo-dark.svg')} .panClean .nav2021Component.light .pan-2021-nav-main .nav-left>li>a,.panClean .nav2021Component.dark .pan-2021-nav.open .pan-2021-nav-main .nav-left>li>a{color:#141414} .panClean .nav2021Component.light .pan-2021-nav-main .nav-right>li.search>a,.panClean .nav2021Component.dark .pan-2021-nav.open .pan-2021-nav-main .nav-right>li.search>a{background-image:url('/etc/clientlibs/clean/imgs/search-black.svg')} .panClean .nav2021Component.light.alt-light .pan-2021-nav:not(.open) .pan-2021-nav-main .logo>a{background-image:url('/etc/clientlibs/clean/imgs/pan-logo-alt-dark.svg')} .panClean .nav2021Component.light.alt-light .pan-2021-nav:not(.open) .pan-2021-nav-main .nav-right>li.cta .btn.btn-primary{background-color:#fff;border-color:#fff;color:#141414} .panClean .nav2021Component.light.alt-light .pan-2021-nav:not(.open) .pan-2021-nav-main .nav-right>li.cta .btn.btn-primary:hover{background-color:#f4f4f2;border-color:#f4f4f2;color:#141414} } @media(max-width:1199.98px){.panClean .pan-page-alert.open ~ .nav2021Component .pan-2021-nav.open .pan-nav-search{top:-59px !important} .panClean .pan-page-alert.open ~ .nav2021Component .pan-nav-search{top:0 !important} .panClean .pan-page-alert.open ~ .nav2021Component.absolute .pan-2021-nav{margin-top:60px} } @media(min-width:1200px){.panClean .pan-page-alert.open ~ .nav2021Component .pan-2021-nav .dropdown-overlay{top:60px} .panClean .pan-page-alert.open ~ .nav2021Component .pan-nav-search{top:0 !important} .panClean .pan-page-alert.open ~ .nav2021Component.absolute .pan-2021-nav{margin-top:60px} } .panClean .mainNavigationComp .productNav2021Component.init-sticky .product-2021-nav{background-color:transparent} .panClean .mainNavigationComp .productNav2021Component.init-sticky .product-2021-nav::before{content:'';position:absolute;top:0;left:0;right:0;height:100px;opacity:0;transform:translateY(-100%);background-color:#fff;box-shadow:0 15px 13px rgba(0,0,0,0.15);transition:transform .5s,opacity .5s;z-index:-1} @media(max-width:1199.98px){.panClean .mainNavigationComp .productNav2021Component.init-sticky.init-sticky .product-2021-nav::before{height:75px} } @media(min-width:1200px){.panClean .mainNavigationComp .productNav2021Component.init-sticky .product-2021-nav{transition:none} } .panClean .mainNavigationComp.sticky .productNav2021Component .product-2021-nav,.panClean .mainNavigationComp.sticky .productNav2021Component.absolute .product-2021-nav{position:fixed;left:0;right:0;top:0;z-index:1000;background-color:#fff} .panClean .mainNavigationComp.sticky .productNav2021Component .product-2021-nav .dropdown-overlay,.panClean .mainNavigationComp.sticky .productNav2021Component.absolute .product-2021-nav .dropdown-overlay{height:200vh} @media(max-width:1199.98px){.panClean .mainNavigationComp.sticky .productNav2021Component:not(.absolute){padding-bottom:75px} .panClean .mainNavigationComp.sticky .productNav2021Component .product-2021-nav-main,.panClean .mainNavigationComp.sticky .productNav2021Component.absolute .product-2021-nav-main{height:100vh} .panClean .mainNavigationComp.sticky .productNav2021Component.init-sticky .product-2021-nav,.panClean .mainNavigationComp.sticky .productNav2021Component.absolute.init-sticky .product-2021-nav{background-color:transparent} .panClean .mainNavigationComp.sticky .productNav2021Component.init-sticky .product-2021-nav::before,.panClean .mainNavigationComp.sticky .productNav2021Component.absolute.init-sticky .product-2021-nav::before{opacity:.95;transform:translateY(0)} } @media(min-width:1200px){.panClean .mainNavigationComp.sticky .productNav2021Component:not(.absolute){padding-bottom:100px} .panClean .mainNavigationComp.sticky .productNav2021Component .product-2021-nav .mega-dropdown-menu,.panClean .mainNavigationComp.sticky .productNav2021Component.absolute .product-2021-nav .mega-dropdown-menu{top:100px !important} .panClean .mainNavigationComp.sticky .productNav2021Component.init-sticky .product-2021-nav,.panClean .mainNavigationComp.sticky .productNav2021Component.absolute.init-sticky .product-2021-nav{background-color:transparent} .panClean .mainNavigationComp.sticky .productNav2021Component.init-sticky .product-2021-nav::before,.panClean .mainNavigationComp.sticky .productNav2021Component.absolute.init-sticky .product-2021-nav::before{opacity:.95;transform:translateY(0)} } .panClean .mainNavigationComp.sticky .pan-page-alert.open ~ .productNav2021Component.absolute .product-2021-nav{margin-top:0} .panClean .productNav2021Component .product-2021-nav{font-family:TT Hoves,Decimal,Arial,"Helvetica Neue",Helvetica,sans-serif;font-weight:600;transition:transform .25s linear,visibility .25s linear} .panClean .productNav2021Component .product-2021-nav .dropdown-overlay{visibility:hidden;position:fixed;top:0;left:0;right:0;bottom:0;background-color:#000;opacity:.7} .panClean .productNav2021Component .product-2021-nav .mega-dropdown-menu{display:none} @media(max-width:1199.98px){.panClean .productNav2021Component .product-2021-nav{display:flex;align-items:center;justify-content:space-between;padding:0 25px;height:75px} .panClean .productNav2021Component .product-2021-nav>.nav-open,.panClean .productNav2021Component .product-2021-nav>.mobile-search,.panClean .productNav2021Component .product-2021-nav>.mobile-header-logo{display:inline-block;background-repeat:no-repeat;background-position:center;flex-grow:0;flex-shrink:0;flex-basis:auto;padding:0;border:0} .panClean .productNav2021Component .product-2021-nav>.nav-open{width:44px;height:44px;background-size:24px 24px} .panClean .productNav2021Component .product-2021-nav>.mobile-search{width:44px;height:44px;background-size:29px 29px} .panClean .productNav2021Component .product-2021-nav .dropdown-overlay{z-index:997} .panClean .productNav2021Component .product-2021-nav .pan-nav-search{position:absolute} .panClean .productNav2021Component .product-2021-nav.open .product-2021-nav-main{transform:translateX(100%);transition-timing-function:ease-in} .panClean .productNav2021Component .product-2021-nav.open .dropdown-overlay{visibility:visible} } @media(max-width:575.98px){.panClean .productNav2021Component .product-2021-nav{padding:0 5px} } @media(min-width:1200px){.panClean .productNav2021Component .product-2021-nav{position:relative;z-index:999} .panClean .productNav2021Component .product-2021-nav>.nav-open,.panClean .productNav2021Component .product-2021-nav>.nav-logo,.panClean .productNav2021Component .product-2021-nav>.mobile-header-logo,.panClean .productNav2021Component .product-2021-nav>.mobile-search{display:none} .panClean .productNav2021Component .product-2021-nav .dropdown-overlay{z-index:-1} .panClean .productNav2021Component .product-2021-nav.open .dropdown-overlay{visibility:visible} } .panClean .productNav2021Component.absolute .product-2021-nav{position:absolute;top:0;left:0;right:0;z-index:1000} @media(max-width:1199.98px){.panClean .productNav2021Component:not(.absolute) .product-2021-nav{position:relative} } @media(max-width:1199.98px){.panClean .productNav2021Component.light .product-2021-nav{background:0} .panClean .productNav2021Component.light .product-2021-nav>.nav-open{background-image:url('/etc/clientlibs/clean/imgs/menu-alt-black.svg')} .panClean .productNav2021Component.light .product-2021-nav>.mobile-search{background-image:url('/etc/clientlibs/clean/imgs/search-black.svg')} .panClean .productNav2021Component.light .product-2021-nav>.nav-open:hover,.panClean .productNav2021Component.light .product-2021-nav>.mobile-search:hover,.panClean .productNav2021Component.light .product-2021-nav>.nav-open:active,.panClean .productNav2021Component.light .product-2021-nav>.mobile-search:active{background-color:rgba(0,0,0,0.1)} .panClean .productNav2021Component.light:not(.absolute) .product-2021-nav{background-color:#f4f4f2} .panClean .productNav2021Component.dark .product-2021-nav{background:0} .panClean .productNav2021Component.dark .product-2021-nav>.nav-open{background-image:url('/etc/clientlibs/clean/imgs/menu-alt-white.svg')} .panClean .productNav2021Component.dark .product-2021-nav>.mobile-search{background-image:url('/etc/clientlibs/clean/imgs/search-white.svg')} .panClean .productNav2021Component.dark .product-2021-nav>.nav-open:hover,.panClean .productNav2021Component.dark .product-2021-nav>.mobile-search:hover,.panClean .productNav2021Component.dark .product-2021-nav>.nav-open:active,.panClean .productNav2021Component.dark .product-2021-nav>.mobile-search:active{background-color:rgba(255,255,255,0.1)} } .panClean .productNav2021Component .product-2021-nav-main .pan-home{display:flex;flex-direction:column;justify-content:center;align-items:center;width:50px;height:56px;background-color:#fa582d} .panClean .productNav2021Component .product-2021-nav-main .pan-home .back-arrow{transform:rotate(180deg) translateY(-2px)} @media(max-width:1199.98px){.panClean .productNav2021Component .product-2021-nav-main{background-color:#fff;display:flex;flex-direction:column;position:fixed;top:0;left:-100%;width:100%;bottom:0;z-index:998;will-change:transform;transition:visibility .25s,transform .25s;transition-timing-function:ease-out;padding:0;overflow:auto;border-top:1px solid #d8d8d8} .panClean .productNav2021Component .product-2021-nav-main .container-fluid{padding:0 15px} .panClean .productNav2021Component .product-2021-nav-main .mobile-header{display:flex;height:75px;align-items:center;justify-content:space-between;border-bottom:1px solid #d8d8d8;flex-shrink:0;padding:0 25px} .panClean .productNav2021Component .product-2021-nav-main .mobile-header .nav-close,.panClean .productNav2021Component .product-2021-nav-main .mobile-header .mobile-search{padding:10px;border:0} .panClean .productNav2021Component .product-2021-nav-main .mobile-header .nav-close:active,.panClean .productNav2021Component .product-2021-nav-main .mobile-header .mobile-search:active{background-color:#f4f4f2} .panClean .productNav2021Component .product-2021-nav-main .mobile-header .nav-close{margin-left:-10px} .panClean .productNav2021Component .product-2021-nav-main .mobile-header .mobile-search{margin-right:-10px} } @media(max-width:575.98px){.panClean .productNav2021Component .product-2021-nav-main>.container-fluid{padding:0 30px} } @media(max-width:374.98px){.panClean .productNav2021Component .product-2021-nav-main>.container-fluid{padding:0 15px} .panClean .productNav2021Component .product-2021-nav-main .mobile-header{padding:0 10px} } @media(min-width:1200px) and (max-width:1399.98px){.panClean .productNav2021Component .product-2021-nav-main>.container-fluid{margin-right:15px} } @media(min-width:1200px){.panClean .productNav2021Component .product-2021-nav-main .mobile-header,.panClean .productNav2021Component .product-2021-nav-main .nav-mobile-toolbar,.panClean .productNav2021Component .product-2021-nav-main .mobile-language-selector{display:none} .panClean .productNav2021Component .product-2021-nav-main>.container-fluid{display:flex;align-items:center;justify-content:space-between} .panClean .productNav2021Component .product-2021-nav-main .pan-home{position:absolute;z-index:999;top:50%;left:0;transform:translateY(-50%)} .panClean .productNav2021Component .product-2021-nav-main .nav-left,.panClean .productNav2021Component .product-2021-nav-main .nav-right{list-style:none;margin:0;padding:0;display:flex;align-items:center;flex-grow:0;flex-shrink:0;flex-basis:auto;font-family:TT Hoves,Decimal,Arial,"Helvetica Neue",Helvetica,sans-serif;font-weight:500;font-size:.8775rem;line-height:150%;height:100px} .panClean .productNav2021Component .product-2021-nav-main .nav-left>li,.panClean .productNav2021Component .product-2021-nav-main .nav-right>li{display:flex;align-items:center;height:100px} .panClean .productNav2021Component .product-2021-nav-main .nav-left>li>a::focus,.panClean .productNav2021Component .product-2021-nav-main .nav-right>li>a::focus,.panClean .productNav2021Component .product-2021-nav-main .nav-left>li>span::focus,.panClean .productNav2021Component .product-2021-nav-main .nav-right>li>span::focus,.panClean .productNav2021Component .product-2021-nav-main .nav-left>li>a::-moz-focus-inner,.panClean .productNav2021Component .product-2021-nav-main .nav-right>li>a::-moz-focus-inner,.panClean .productNav2021Component .product-2021-nav-main .nav-left>li>span::-moz-focus-inner,.panClean .productNav2021Component .product-2021-nav-main .nav-right>li>span::-moz-focus-inner{outline:0;box-shadow:0 0 0 3px rgba(0,192,232,0.5)} .panClean .productNav2021Component .product-2021-nav-main .nav-left>li .dropdown>.dropdown-toggle,.panClean .productNav2021Component .product-2021-nav-main .nav-right>li .dropdown>.dropdown-toggle{text-decoration:none;padding:0 15px;display:flex;align-items:center;color:#141414} .panClean .productNav2021Component .product-2021-nav-main .nav-left>li .dropdown>.dropdown-toggle::after,.panClean .productNav2021Component .product-2021-nav-main .nav-right>li .dropdown>.dropdown-toggle::after{display:none} .panClean .productNav2021Component .product-2021-nav-main .nav-left>li .dropdown>.dropdown-toggle:focus,.panClean .productNav2021Component .product-2021-nav-main .nav-right>li .dropdown>.dropdown-toggle:focus{outline:0} .panClean .productNav2021Component .product-2021-nav-main .nav-left>li .dropdown>.dropdown-menu,.panClean .productNav2021Component .product-2021-nav-main .nav-right>li .dropdown>.dropdown-menu{background-color:#f4f4f2;border-radius:0;border:0;margin-top:30px;padding:30px 0} .panClean .productNav2021Component .product-2021-nav-main .nav-left>li .dropdown>.dropdown-menu .dropdown-item,.panClean .productNav2021Component .product-2021-nav-main .nav-right>li .dropdown>.dropdown-menu .dropdown-item{padding:7.5px 30px} .panClean .productNav2021Component .product-2021-nav-main .nav-left>li .dropdown>.dropdown-menu .dropdown-item>a,.panClean .productNav2021Component .product-2021-nav-main .nav-right>li .dropdown>.dropdown-menu .dropdown-item>a{font-size:14px;line-height:18px;font-weight:600;text-decoration:none;color:#141414} .panClean .productNav2021Component .product-2021-nav-main .nav-left>li .dropdown>.dropdown-menu .dropdown-item>a:focus,.panClean .productNav2021Component .product-2021-nav-main .nav-right>li .dropdown>.dropdown-menu .dropdown-item>a:focus{outline:0} .panClean .productNav2021Component .product-2021-nav-main .nav-left>li .dropdown>.dropdown-menu .dropdown-item:hover,.panClean .productNav2021Component .product-2021-nav-main .nav-right>li .dropdown>.dropdown-menu .dropdown-item:hover{background-color:#f4f4f2} .panClean .productNav2021Component .product-2021-nav-main .nav-left>li .dropdown>.dropdown-menu .dropdown-item:active,.panClean .productNav2021Component .product-2021-nav-main .nav-right>li .dropdown>.dropdown-menu .dropdown-item:active{background-color:#e8e8e4} .panClean .productNav2021Component .product-2021-nav-main .nav-left>li .dropdown.show>.dropdown-toggle::after,.panClean .productNav2021Component .product-2021-nav-main .nav-right>li .dropdown.show>.dropdown-toggle::after{transform:rotate(-180deg)} .panClean .productNav2021Component .product-2021-nav-main .nav-left>li.avatar .dropdown>a,.panClean .productNav2021Component .product-2021-nav-main .nav-right>li.avatar .dropdown>a{display:flex;align-items:center} .panClean .productNav2021Component .product-2021-nav-main .nav-left>li.avatar .dropdown>a .image,.panClean .productNav2021Component .product-2021-nav-main .nav-right>li.avatar .dropdown>a .image{display:inline-block;width:24px;height:24px;background-size:24px 24px;background-repeat:no-repeat;background-position:center} .panClean .productNav2021Component .product-2021-nav-main .nav-left>li.avatar .dropdown>a .user,.panClean .productNav2021Component .product-2021-nav-main .nav-right>li.avatar .dropdown>a .user{display:inline-block;margin-left:5px} .panClean .productNav2021Component .product-2021-nav-main .nav-left>li.avatar .dropdown>a:after,.panClean .productNav2021Component .product-2021-nav-main .nav-right>li.avatar .dropdown>a:after{content:none;display:none} .panClean .productNav2021Component .product-2021-nav-main .nav-left>li>a{display:flex;align-items:center;height:100px;padding:0 15px} .panClean .productNav2021Component .product-2021-nav-main .nav-left>li.logo>a{display:inline-block;padding:0;background-repeat:no-repeat;background-size:contain} .panClean .productNav2021Component .product-2021-nav-main .nav-left>li.logo>a::after{content:none} .panClean .productNav2021Component .product-2021-nav-main .nav-right>li.search{padding-right:15px} .panClean .productNav2021Component .product-2021-nav-main .nav-right>li.search>a{width:24px;height:24px;background-size:24px 24px;display:inline-block;background-image:url('/etc/clientlibs/clean/imgs/search-black.svg')} .panClean .productNav2021Component .product-2021-nav-main .nav-right>li.cta{padding-left:15px} .panClean .productNav2021Component .product-2021-nav-main .nav-right>li.cta .btn{font-size:12px;padding:8px 15px} } @media(min-width:1400px){.panClean .productNav2021Component .product-2021-nav-main .nav-left>li>a,.panClean .productNav2021Component .product-2021-nav-main .nav-right>li>a{font-size:13px} .panClean .productNav2021Component .product-2021-nav-main .nav-left>li .dropdown>.dropdown-toggle,.panClean .productNav2021Component .product-2021-nav-main .nav-right>li .dropdown>.dropdown-toggle{font-size:13px;padding:0 20px} .panClean .productNav2021Component .product-2021-nav-main .nav-left>li>a{padding:0 20px} .panClean .productNav2021Component .product-2021-nav-main .nav-left>li.logo{padding-right:18px} .panClean .productNav2021Component .product-2021-nav-main .nav-right>li.search{padding-right:20px} .panClean .productNav2021Component .product-2021-nav-main .nav-right>li.cta{padding-left:20px} .panClean .productNav2021Component .product-2021-nav-main .nav-right>li.cta .btn{font-size:13px} } @media(min-width:1600px){.panClean .productNav2021Component .product-2021-nav-main .nav-left>li>a,.panClean .productNav2021Component .product-2021-nav-main .nav-right>li>a{font-size:14px} .panClean .productNav2021Component .product-2021-nav-main .nav-left>li .dropdown>.dropdown-toggle,.panClean .productNav2021Component .product-2021-nav-main .nav-right>li .dropdown>.dropdown-toggle{font-size:14px;padding:0 25px} .panClean .productNav2021Component .product-2021-nav-main .nav-left>li>a{padding:0 25px} .panClean .productNav2021Component .product-2021-nav-main .nav-left>li.logo{padding-right:20px} .panClean .productNav2021Component .product-2021-nav-main .nav-left>li.logo>a{padding:0} .panClean .productNav2021Component .product-2021-nav-main .nav-right>li.search{padding-right:25px} .panClean .productNav2021Component .product-2021-nav-main .nav-right>li.search>a{width:29px;height:29px;background-size:29px 29px} .panClean .productNav2021Component .product-2021-nav-main .nav-right>li.cta .btn{padding-left:25px;font-size:14px;padding:10px 20px} } @media(min-width:1200px){.panClean .productNav2021Component.dark .product-2021-nav:not(.open) .product-2021-nav-main .nav-left>li .dropdown>.dropdown-toggle,.panClean .productNav2021Component.dark .product-2021-nav:not(.open) .product-2021-nav-main .nav-right>li .dropdown>.dropdown-toggle{color:#fff} .panClean .productNav2021Component.dark .product-2021-nav:not(.open) .product-2021-nav-main .nav-left>li>a:not(.btn-primary),.panClean .productNav2021Component.dark .product-2021-nav:not(.open) .product-2021-nav-main .nav-right>li>a:not(.btn-primary){color:#fff} .panClean .productNav2021Component.dark .product-2021-nav:not(.open) .product-2021-nav-main .nav-right>li.search>a{background-image:url('/etc/clientlibs/clean/imgs/search-white.svg')} .panClean .productNav2021Component.light.alt-light .product-2021-nav:not(.open) .nav-right>li.cta .btn.btn-primary{background-color:#fff;border-color:#fff;color:#141414} .panClean .productNav2021Component.light.alt-light .product-2021-nav:not(.open) .nav-right>li.cta .btn.btn-primary:hover{background-color:#f4f4f2;border-color:#f4f4f2;color:#141414} .panClean .productNav2021Component.light:not(.absolute) .product-2021-nav-main,.panClean .productNav2021Component.light .product-2021-nav.open .product-2021-nav-main,.panClean .productNav2021Component.dark .product-2021-nav.open .product-2021-nav-main{background-color:#fff} .panClean .productNav2021Component.light .product-2021-nav-main .nav-left>li>a,.panClean .productNav2021Component.dark .product-2021-nav.open .product-2021-nav-main .nav-left>li>a{color:#141414} .panClean .productNav2021Component.light .product-2021-nav-main .nav-right>li.search>a,.panClean .productNav2021Component.dark .product-2021-nav.open .product-2021-nav-main .nav-right>li.search>a{background-image:url('/etc/clientlibs/clean/imgs/search-black.svg')} } @media(max-width:1199.98px){.panClean .pan-page-alert.open ~ .productNav2021Component .product-2021-nav.open .pan-nav-search{top:-59px !important} .panClean .pan-page-alert.open ~ .productNav2021Component .pan-nav-search{top:0 !important} .panClean .pan-page-alert.open ~ .productNav2021Component.absolute .product-2021-nav{margin-top:60px} } @media(min-width:1200px){.panClean .pan-page-alert.open ~ .productNav2021Component .product-2021-nav .dropdown-overlay{top:60px} .panClean .pan-page-alert.open ~ .productNav2021Component .pan-nav-search{top:0 !important} .panClean .pan-page-alert.open ~ .productNav2021Component.absolute .product-2021-nav{margin-top:60px} } @media(min-width:1200px) and (max-width:1599.98px){.panClean .productNav2021Component[data-type="prisma"] .product-2021-nav .container-fluid{margin-left:50px !important;margin-right:0 !important} } @media(max-width:1199.98px){.panClean .productNav2021Component[data-type="prisma"] .product-2021-nav>.mobile-header-logo{width:192px;height:25px;background-size:192px 25px} } @media(max-width:767.98px){.panClean .productNav2021Component[data-type="prisma"] .product-2021-nav>.mobile-header-logo{width:175px;height:23px;background-size:175px 23px} } @media(max-width:1199.98px){.panClean .productNav2021Component.light[data-type="prisma"] .product-2021-nav>.mobile-header-logo{background-image:url('/etc/clientlibs/clean/imgs/prisma-logo-dark.svg')} .panClean .productNav2021Component.light.alt-light[data-type="prisma"] .product-2021-nav>.mobile-header-logo{background-image:url('/etc/clientlibs/clean/imgs/prisma-logo-alt-dark.svg')} .panClean .productNav2021Component.dark[data-type="prisma"] .product-2021-nav>.mobile-header-logo{background-image:url('/etc/clientlibs/clean/imgs/prisma-logo-light.svg')} } .panClean .productNav2021Component[data-type="prisma"] .product-2021-nav-main .btn.btn-primary,.panClean .productNav2021Component[data-type="sase"] .product-2021-nav-main .btn.btn-primary{background-color:#00c0e8} .panClean .productNav2021Component[data-type="prisma"] .product-2021-nav-main .btn.btn-primary:hover,.panClean .productNav2021Component[data-type="sase"] .product-2021-nav-main .btn.btn-primary:hover{background-color:#0fd6ff} .panClean .productNav2021Component[data-type="prisma"] .product-2021-nav-main .btn.btn-primary:active,.panClean .productNav2021Component[data-type="sase"] .product-2021-nav-main .btn.btn-primary:active{background-color:#00abcf} .panClean .productNav2021Component[data-type="prisma"] .product-2021-nav-main .btn.btn-primary:focus,.panClean .productNav2021Component[data-type="sase"] .product-2021-nav-main .btn.btn-primary:focus{box-shadow:0 0 0 3px rgba(0,192,232,0.5)} @media(min-width:1200px){.panClean .productNav2021Component[data-type="prisma"] .product-2021-nav-main .nav-left>li.logo,.panClean .productNav2021Component[data-type="sase"] .product-2021-nav-main .nav-left>li.logo{padding-right:10px} } @media(min-width:1200px){.panClean .productNav2021Component[data-type="prisma"] .product-2021-nav-main .nav-left>li.logo>a{width:193px;height:25px} } @media(min-width:1200px){.panClean .productNav2021Component.dark[data-type="prisma"] .product-2021-nav:not(.open) .product-2021-nav-main .logo>a{background-image:url('/etc/clientlibs/clean/imgs/prisma-logo-light.svg')} .panClean .productNav2021Component.light[data-type="prisma"] .product-2021-nav-main .logo>a,.panClean .productNav2021Component.dark[data-type="prisma"] .product-2021-nav.open .product-2021-nav-main .logo>a{background-image:url('/etc/clientlibs/clean/imgs/prisma-logo-dark.svg')} .panClean .productNav2021Component.light.alt-light[data-type="prisma"] .product-2021-nav:not(.open) .product-2021-nav-main .logo>a{background-image:url('/etc/clientlibs/clean/imgs/prisma-logo-alt-dark.svg')} } @media(max-width:1199.98px){.panClean .productNav2021Component[data-type="sase"] .product-2021-nav>.mobile-header-logo{width:124px;height:25px;background-size:124px 25px} } @media(max-width:767.98px){.panClean .productNav2021Component[data-type="sase"] .product-2021-nav>.mobile-header-logo{width:114px;height:23px;background-size:114px 23px} } @media(max-width:1199.98px){.panClean .productNav2021Component.light[data-type="sase"] .product-2021-nav>.mobile-header-logo{background-image:url('/etc/clientlibs/clean/imgs/sase-logo-dark.svg')} .panClean .productNav2021Component.light.alt-light[data-type="sase"] .product-2021-nav>.mobile-header-logo{background-image:url('/etc/clientlibs/clean/imgs/sase-logo-alt-dark.svg')} .panClean .productNav2021Component.dark[data-type="sase"] .product-2021-nav>.mobile-header-logo{background-image:url('/etc/clientlibs/clean/imgs/sase-logo-light.svg')} } .panClean .productNav2021Component[data-type="prisma"] .product-2021-nav-main .btn.btn-primary,.panClean .productNav2021Component[data-type="sase"] .product-2021-nav-main .btn.btn-primary{background-color:#00c0e8} .panClean .productNav2021Component[data-type="prisma"] .product-2021-nav-main .btn.btn-primary:hover,.panClean .productNav2021Component[data-type="sase"] .product-2021-nav-main .btn.btn-primary:hover{background-color:#0fd6ff} .panClean .productNav2021Component[data-type="prisma"] .product-2021-nav-main .btn.btn-primary:active,.panClean .productNav2021Component[data-type="sase"] .product-2021-nav-main .btn.btn-primary:active{background-color:#00abcf} .panClean .productNav2021Component[data-type="prisma"] .product-2021-nav-main .btn.btn-primary:focus,.panClean .productNav2021Component[data-type="sase"] .product-2021-nav-main .btn.btn-primary:focus{box-shadow:0 0 0 3px rgba(0,192,232,0.5)} @media(min-width:1200px){.panClean .productNav2021Component[data-type="prisma"] .product-2021-nav-main .nav-left>li.logo,.panClean .productNav2021Component[data-type="sase"] .product-2021-nav-main .nav-left>li.logo{padding-right:10px} } @media(min-width:1200px){.panClean .productNav2021Component[data-type="sase"] .product-2021-nav-main .nav-left>li.logo>a{width:124px;height:25px} } @media(min-width:1200px){.panClean .productNav2021Component.dark[data-type="sase"] .product-2021-nav:not(.open) .product-2021-nav-main .logo>a{background-image:url('/etc/clientlibs/clean/imgs/sase-logo-light.svg')} .panClean .productNav2021Component.light[data-type="sase"] .product-2021-nav-main .logo>a,.panClean .productNav2021Component.dark[data-type="sase"] .product-2021-nav.open .product-2021-nav-main .logo>a{background-image:url('/etc/clientlibs/clean/imgs/sase-logo-dark.svg')} .panClean .productNav2021Component.light.alt-light[data-type="sase"] .product-2021-nav:not(.open) .product-2021-nav-main .logo>a{background-image:url('/etc/clientlibs/clean/imgs/sase-logo-alt-dark.svg')} } @media(max-width:1199.98px){.panClean .productNav2021Component[data-type="cortex"] .product-2021-nav>.mobile-header-logo{width:144px;height:25px;background-size:144px 25px} } @media(max-width:767.98px){.panClean .productNav2021Component[data-type="cortex"] .product-2021-nav>.mobile-header-logo{width:132px;height:23px;background-size:132px 23px} } @media(max-width:1199.98px){.panClean .productNav2021Component.light[data-type="cortex"] .product-2021-nav.pt-br-nav-logo>.mobile-header-logo{background-image:url('/etc/clientlibs/clean/imgs/cortex/cortex-logo-by-line-positive.svg');width:200px;height:60px;background-size:200px 70px} .panClean .productNav2021Component.light[data-type="cortex"] .product-2021-nav>.mobile-header-logo{background-image:url('/etc/clientlibs/clean/imgs/cortex-logo-dark.svg')} .panClean .productNav2021Component.light.alt-light[data-type="cortex"] .product-2021-nav.pt-br-nav-logo>.mobile-header-logo{background-image:url('/etc/clientlibs/clean/imgs/cortex/cortex-logo-by-line-positive.svg');width:200px;height:60px;background-size:200px 70px} .panClean .productNav2021Component.light.alt-light[data-type="cortex"] .product-2021-nav>.mobile-header-logo{background-image:url('/etc/clientlibs/clean/imgs/cortex-logo-alt-dark.svg')} .panClean .productNav2021Component.dark[data-type="cortex"] .product-2021-nav.pt-br-nav-logo>.mobile-header-logo{background-image:url('/etc/clientlibs/clean/imgs/cortex/cortex-logo-by-line-negative.svg');width:200px;height:60px;background-size:200px 70px} .panClean .productNav2021Component.dark[data-type="cortex"] .product-2021-nav>.mobile-header-logo{background-image:url('/etc/clientlibs/clean/imgs/cortex-logo-light.svg')} } .panClean .productNav2021Component[data-type="cortex"] .product-2021-nav-main .btn.btn-primary{background-color:#0c6} .panClean .productNav2021Component[data-type="cortex"] .product-2021-nav-main .btn.btn-primary:hover{background-color:#00f279} .panClean .productNav2021Component[data-type="cortex"] .product-2021-nav-main .btn.btn-primary:active{background-color:#00b359} .panClean .productNav2021Component[data-type="cortex"] .product-2021-nav-main .btn.btn-primary:focus{box-shadow:0 0 0 3px rgba(0,204,102,0.5)} @media(min-width:1200px){.panClean .productNav2021Component[data-type="cortex"] .product-2021-nav-main .nav-left>li.logo{padding-right:20px} .panClean .productNav2021Component[data-type="cortex"] .product-2021-nav-main .nav-left>li.logo>a{width:144px;height:25px} } @media(min-width:1200px){.panClean .productNav2021Component.dark[data-type="cortex"] .product-2021-nav:not(.open) .product-2021-nav-main.pt-br-nav-logo .logo>a{background-image:url('/etc/clientlibs/clean/imgs/cortex/cortex-logo-by-line-negative.svg');width:200px;height:60px;background-size:200px 70px} .panClean .productNav2021Component.dark[data-type="cortex"] .product-2021-nav:not(.open) .product-2021-nav-main .logo>a{background-image:url('/etc/clientlibs/clean/imgs/cortex-logo-light.svg')} .panClean .productNav2021Component.light[data-type="cortex"] .product-2021-nav-main.pt-br-nav-logo .logo>a,.panClean .productNav2021Component.dark[data-type="cortex"] .product-2021-nav.open .product-2021-nav-main.pt-br-nav-logo .logo>a{background-image:url('/etc/clientlibs/clean/imgs/cortex/cortex-logo-by-line-positive.svg');width:200px;height:60px;background-size:200px 70px} .panClean .productNav2021Component.light[data-type="cortex"] .product-2021-nav-main .logo>a,.panClean .productNav2021Component.dark[data-type="cortex"] .product-2021-nav.open .product-2021-nav-main .logo>a{background-image:url('/etc/clientlibs/clean/imgs/cortex-logo-dark.svg')} .panClean .productNav2021Component.light.alt-light[data-type="cortex"] .product-2021-nav:not(.open) .product-2021-nav-main.pt-br-nav-logo .logo>a{background-image:url('/etc/clientlibs/clean/imgs/cortex/cortex-logo-by-line-positive.svg');width:200px;height:60px;background-size:200px 70px} .panClean .productNav2021Component.light.alt-light[data-type="cortex"] .product-2021-nav:not(.open) .product-2021-nav-main .logo>a{background-image:url('/etc/clientlibs/clean/imgs/cortex-logo-alt-dark.svg')} } @media(max-width:1199.98px){.panClean .productNav2021Component[data-type="cloudcortex"] .product-2021-nav>.mobile-header-logo{width:175px;height:23px;background-size:175px 23px} } @media(max-width:1199.98px){.panClean .productNav2021Component.light[data-type="cloudcortex"] .product-2021-nav.pt-br-nav-logo>.mobile-header-logo{background-image:url('/etc/clientlibs/clean/imgs/cortex/cortex-logo-by-line-positive.svg');width:200px;height:60px;background-size:200px 70px} .panClean .productNav2021Component.light[data-type="cloudcortex"] .product-2021-nav>.mobile-header-logo{background-image:url('/etc/clientlibs/clean/imgs/cortexcloud-logo-dark.svg')} .panClean .productNav2021Component.light.alt-light[data-type="cloudcortex"] .product-2021-nav.pt-br-nav-logo>.mobile-header-logo{background-image:url('/etc/clientlibs/clean/imgs/cortex/cortex-logo-by-line-positive.svg');width:200px;height:60px;background-size:200px 70px} .panClean .productNav2021Component.light.alt-light[data-type="cloudcortex"] .product-2021-nav>.mobile-header-logo{background-image:url('/etc/clientlibs/clean/imgs/cortex-logo-alt-dark.svg')} .panClean .productNav2021Component.dark[data-type="cloudcortex"] .product-2021-nav.pt-br-nav-logo>.mobile-header-logo{background-image:url('/etc/clientlibs/clean/imgs/cortex/cortex-logo-by-line-negative.svg');width:200px;height:60px;background-size:200px 70px} .panClean .productNav2021Component.dark[data-type="cloudcortex"] .product-2021-nav>.mobile-header-logo{background-image:url('/etc/clientlibs/clean/imgs/cortexcloud-logo-light.svg')} .panClean .productNav2021Component[data-type="cloudcortex"] .product-2021-nav-main .nav-left .mega-dropdown-menu[data-type="platform"] .col.col-list .list-unstyled>li>a{color:#141414} } .panClean .productNav2021Component[data-type="cloudcortex"] .product-2021-nav-main .btn.btn-primary{background-color:#0c6} .panClean .productNav2021Component[data-type="cloudcortex"] .product-2021-nav-main .btn.btn-primary:hover{background-color:#00f279} .panClean .productNav2021Component[data-type="cloudcortex"] .product-2021-nav-main .btn.btn-primary:active{background-color:#00b359} .panClean .productNav2021Component[data-type="cloudcortex"] .product-2021-nav-main .btn.btn-primary:focus{box-shadow:0 0 0 3px rgba(0,204,102,0.5)} @media(min-width:1200px){.panClean .productNav2021Component[data-type="cloudcortex"] .product-2021-nav-main .nav-left>li.logo{padding-right:20px} .panClean .productNav2021Component[data-type="cloudcortex"] .product-2021-nav-main .nav-left>li.logo>a{width:193px;height:27px} } @media(min-width:1200px){.panClean .productNav2021Component.dark[data-type="cloudcortex"] .product-2021-nav:not(.open) .product-2021-nav-main.pt-br-nav-logo .logo>a{background-image:url('/etc/clientlibs/clean/imgs/cortex/cortex-logo-by-line-negative.svg');width:200px;height:60px;background-size:200px 70px} .panClean .productNav2021Component.dark[data-type="cloudcortex"] .product-2021-nav:not(.open) .product-2021-nav-main .logo>a{background-image:url('/etc/clientlibs/clean/imgs/cortexcloud-logo-light.svg')} .panClean .productNav2021Component.light[data-type="cloudcortex"] .product-2021-nav-main.pt-br-nav-logo .logo>a,.panClean .productNav2021Component.dark[data-type="cloudcortex"] .product-2021-nav.open .product-2021-nav-main.pt-br-nav-logo .logo>a{background-image:url('/etc/clientlibs/clean/imgs/cortex/cortex-logo-by-line-positive.svg');width:200px;height:60px;background-size:200px 70px} .panClean .productNav2021Component.light[data-type="cloudcortex"] .product-2021-nav-main .logo>a,.panClean .productNav2021Component.dark[data-type="cloudcortex"] .product-2021-nav.open .product-2021-nav-main .logo>a{background-image:url('/etc/clientlibs/clean/imgs/cortexcloud-logo-dark.svg')} .panClean .productNav2021Component.light.alt-light[data-type="cloudcortex"] .product-2021-nav:not(.open) .product-2021-nav-main.pt-br-nav-logo .logo>a{background-image:url('/etc/clientlibs/clean/imgs/cortex/cortex-logo-by-line-positive.svg');width:200px;height:60px;background-size:200px 70px} .panClean .productNav2021Component.light.alt-light[data-type="cloudcortex"] .product-2021-nav:not(.open) .product-2021-nav-main .logo>a{background-image:url('/etc/clientlibs/clean/imgs/cortex-logo-alt-dark.svg')} } @media(max-width:1199.98px){.panClean .productNav2021Component[data-type="unit"] .product-2021-nav>.mobile-header-logo{width:131px;height:25px;background-size:131px 25px} } @media(max-width:767.98px){.panClean .productNav2021Component[data-type="unit"] .product-2021-nav>.mobile-header-logo{width:120px;height:23px;background-size:120px 23px} } @media(max-width:1199.98px){.panClean .productNav2021Component.light[data-type="unit"] .product-2021-nav>.mobile-header-logo{background-image:url('/etc/clientlibs/clean/imgs/unit42-logo-dark.svg')} .panClean .productNav2021Component.light.alt-light[data-type="unit"] .product-2021-nav>.mobile-header-logo{background-image:url('/etc/clientlibs/clean/imgs/unit42-logo-alt-dark.svg')} .panClean .productNav2021Component.dark[data-type="unit"] .product-2021-nav>.mobile-header-logo{background-image:url('/etc/clientlibs/clean/imgs/unit42-logo-light.svg')} } .panClean .productNav2021Component[data-type="unit"] .product-2021-nav-main .btn.btn-primary{color:#141414;background-color:#d9551d;background-image:linear-gradient(to right,#d9551d 25%,#d64420 75%)} .panClean .productNav2021Component[data-type="unit"] .product-2021-nav-main .btn.btn-primary:hover{background-image:linear-gradient(to right,#e25c24 25%,#df4b27 75%)} .panClean .productNav2021Component[data-type="unit"] .product-2021-nav-main .btn.btn-primary:active{background-image:linear-gradient(to right,#e46b38 25%,#e25c3b 75%)} .panClean .productNav2021Component[data-type="unit"] .product-2021-nav-main .btn.btn-primary:focus{box-shadow:0 0 0 3px rgba(217,85,29,0.5)} .panClean .productNav2021Component[data-type="unit"] .product-2021-nav-main .nav-left .link:last-child{display:none} @media(min-width:1200px){.panClean .productNav2021Component[data-type="unit"] .product-2021-nav-main .nav-left .link:last-child{display:flex} .panClean .productNav2021Component[data-type="unit"] .product-2021-nav-main .nav-left>li.logo{padding-right:20px} .panClean .productNav2021Component[data-type="unit"] .product-2021-nav-main .nav-left>li.logo>a{width:131px;height:25px} } @media(min-width:1200px){.panClean .productNav2021Component.dark[data-type="unit"] .product-2021-nav:not(.open) .product-2021-nav-main .logo>a{background-image:url('/etc/clientlibs/clean/imgs/unit42-logo-light.svg')} .panClean .productNav2021Component.light[data-type="unit"] .product-2021-nav-main .logo>a,.panClean .productNav2021Component.dark[data-type="unit"] .product-2021-nav.open .product-2021-nav-main .logo>a{background-image:url('/etc/clientlibs/clean/imgs/unit42-logo-dark.svg')} .panClean .productNav2021Component.light.alt-light[data-type="unit"] .product-2021-nav:not(.open) .product-2021-nav-main .logo>a{background-image:url('/etc/clientlibs/clean/imgs/unit42-logo-alt-dark.svg')} } @media(max-width:1199.98px){.panClean .productNav2021Component[data-type="ngfw"] .product-2021-nav>.mobile-header-logo{width:260px;height:24px;background-size:260px 24px} .panClean .productNav2021Component[data-type="ngfw"] .product-2021-nav .mobile-header .nav-logo img{width:260px;height:24px} } @media(max-width:575.98px){.panClean .productNav2021Component[data-type="ngfw"] .product-2021-nav>.mobile-header-logo{width:220px;height:20px;background-size:220px 20px} .panClean .productNav2021Component[data-type="ngfw"] .product-2021-nav .mobile-header .nav-logo img{width:220px;height:20px} } @media(max-width:374.98px){.panClean .productNav2021Component[data-type="ngfw"] .product-2021-nav>.mobile-header-logo{width:181px;height:17px;background-size:181px 17px} .panClean .productNav2021Component[data-type="ngfw"] .product-2021-nav .mobile-header .nav-logo img{width:181px;height:17px} } @media(max-width:1199.98px){.panClean .productNav2021Component.light[data-type="ngfw"] .product-2021-nav>.mobile-header-logo{background-image:url('/etc/clientlibs/clean/imgs/ngfw-logo-dark.svg')} .panClean .productNav2021Component.light.alt-light[data-type="ngfw"] .product-2021-nav>.mobile-header-logo{background-image:url('/etc/clientlibs/clean/imgs/ngfw-logo-alt-dark.svg')} .panClean .productNav2021Component.dark[data-type="ngfw"] .product-2021-nav>.mobile-header-logo{background-image:url('/etc/clientlibs/clean/imgs/ngfw-logo-light.svg')} } .panClean .productNav2021Component[data-type="ngfw"] .product-2021-nav-main .btn.btn-primary{background-color:#ffcb06} .panClean .productNav2021Component[data-type="ngfw"] .product-2021-nav-main .btn.btn-primary:hover{background-color:#ffd32c} .panClean .productNav2021Component[data-type="ngfw"] .product-2021-nav-main .btn.btn-primary:active{background-color:#ebba00} .panClean .productNav2021Component[data-type="ngfw"] .product-2021-nav-main .btn.btn-primary:focus{box-shadow:0 0 0 3px rgba(255,203,6,0.5)} @media(min-width:1200px){.panClean .productNav2021Component[data-type="ngfw"] .product-2021-nav-main .nav-left>li.logo{padding-right:20px} .panClean .productNav2021Component[data-type="ngfw"] .product-2021-nav-main .nav-left>li.logo>a{width:260px;height:24px} } @media(min-width:1200px){.panClean .productNav2021Component.dark[data-type="ngfw"] .product-2021-nav:not(.open) .product-2021-nav-main .logo>a{background-image:url('/etc/clientlibs/clean/imgs/ngfw-logo-light.svg')} .panClean .productNav2021Component.light[data-type="ngfw"] .product-2021-nav-main .logo>a,.panClean .productNav2021Component.dark[data-type="ngfw"] .product-2021-nav.open .product-2021-nav-main .logo>a{background-image:url('/etc/clientlibs/clean/imgs/ngfw-logo-dark.svg')} .panClean .productNav2021Component.light.alt-light[data-type="ngfw"] .product-2021-nav:not(.open) .product-2021-nav-main .logo>a{background-image:url('/etc/clientlibs/clean/imgs/ngfw-logo-alt-dark.svg')} }</style><script>/* * ADOBE CONFIDENTIAL * * Copyright 2012 Adobe Systems Incorporated * All Rights Reserved. * * NOTICE: All information contained herein is, and remains * the property of Adobe Systems Incorporated and its suppliers, * if any. The intellectual and technical concepts contained * herein are proprietary to Adobe Systems Incorporated and its * suppliers and may be covered by U.S. and Foreign Patents, * patents in process, and are protected by trade secret or copyright law. * Dissemination of this information or reproduction of this material * is strictly forbidden unless prior written permission is obtained * from Adobe Systems Incorporated. * */ window.Granite = window.Granite || {}; /* * ADOBE CONFIDENTIAL * * Copyright 2012 Adobe Systems Incorporated * All Rights Reserved. * * NOTICE: All information contained herein is, and remains * the property of Adobe Systems Incorporated and its suppliers, * if any. The intellectual and technical concepts contained * herein are proprietary to Adobe Systems Incorporated and its * suppliers and may be covered by U.S. and Foreign Patents, * patents in process, and are protected by trade secret or copyright law. * Dissemination of this information or reproduction of this material * is strictly forbidden unless prior written permission is obtained * from Adobe Systems Incorporated. * */ /** * A helper class providing a set of Sling-related utilities. * @static * @singleton * @class Granite.Sling */ Granite.Sling = { /** * The selector for infinite hierarchy depth when retrieving * repository content. * @static * @final * @type String */ SELECTOR_INFINITY: ".infinity", /** * The parameter name for the used character set. * @static * @final * @type String */ CHARSET: "_charset_", /** * The parameter name for the status. * @static * @final * @type String */ STATUS: ":status", /** * The parameter value for the status type "browser". * @static * @final * @type String */ STATUS_BROWSER: "browser", /** * The parameter name for the operation. * @static * @final * @type String */ OPERATION: ":operation", /** * The parameter value for the delete operation. * @static * @final * @type String */ OPERATION_DELETE: "delete", /** * The parameter value for the move operation. * @static * @final * @type String */ OPERATION_MOVE: "move", /** * The parameter name suffix for deleting. * @static * @final * @type String */ DELETE_SUFFIX: "@Delete", /** * The parameter name suffix for setting a type hint. * @static * @final * @type String */ TYPEHINT_SUFFIX: "@TypeHint", /** * The parameter name suffix for copying. * @static * @final * @type String */ COPY_SUFFIX: "@CopyFrom", /** * The parameter name suffix for moving. * @static * @final * @type String */ MOVE_SUFFIX: "@MoveFrom", /** * The parameter name for the ordering. * @static * @final * @type String */ ORDER: ":order", /** * The parameter name for the replace flag. * @static * @final * @type String */ REPLACE: ":replace", /** * The parameter name for the destination flag. * @static * @final * @type String */ DESTINATION: ":dest", /** * The parameter name for the save parameter prefix. * @static * @final * @type String */ SAVE_PARAM_PREFIX: ":saveParamPrefix", /** * The parameter name for input fields that should * be ignored by Sling. * @static * @final * @type String */ IGNORE_PARAM: ":ignore", /** * The parameter name for login requests. * @static * @final * @type String */ REQUEST_LOGIN_PARAM: "sling:authRequestLogin", /** * Login URL * @static * @final * @type String */ LOGIN_URL: "/system/sling/login.html", /** * Logout URL * @static * @final * @type String */ LOGOUT_URL: "/system/sling/logout.html" }; /* * ADOBE CONFIDENTIAL * * Copyright 2012 Adobe Systems Incorporated * All Rights Reserved. * * NOTICE: All information contained herein is, and remains * the property of Adobe Systems Incorporated and its suppliers, * if any. The intellectual and technical concepts contained * herein are proprietary to Adobe Systems Incorporated and its * suppliers and may be covered by U.S. and Foreign Patents, * patents in process, and are protected by trade secret or copyright law. * Dissemination of this information or reproduction of this material * is strictly forbidden unless prior written permission is obtained * from Adobe Systems Incorporated. * */ (function (Granite, $) { /** * A helper class providing a set of general utilities. * @static * @singleton * @class Granite.Util */ Granite.Util = (function() { var self = { /** * Replaces occurrences of <code>{n}</code> in the specified text with * the texts from the snippets. * <p>Example 1 (single snippet):<pre><code> var text = Granite.Util.patchText("{0} has signed in.", "Jack"); </code></pre>Result 1:<pre><code> Jack has signed in. </code></pre></p> * <p>Example 2 (multiple snippets):<pre><code> var text = "{0} {1} has signed in from {2}."; text = Granite.Util.patchText(text, ["Jack", "McFarland", "10.0.0.99"]); </code></pre>Result 2:<pre><code> Jack McFarland has signed in from 10.0.0.99. </code></pre></p> * @static * @param {String} text The text * @param {String/String[]} snippets The text(s) replacing * <code>{n}</code> * @return {String} The patched text */ patchText: function(text, snippets) { if (snippets) { if (!$.isArray(snippets)) { text = text.replace("{0}", snippets); } else { for (var i=0; i < snippets.length; i++) { text = text.replace(("{" + i + "}"), snippets[i]); } } } return text; }, /** * Returns the top most accessible window. Check {@link setIFrameMode} to avoid security exception message * on WebKit browsers if this method is called in an iFrame included in a window from different domain. * @static * @return {Window} The top window */ getTopWindow: function() { var win = window; if( this.iFrameTopWindow ) { return this.iFrameTopWindow; } try { // try to access parent // win.parent.location.href throws an exception if not authorized (e.g. different location in a portlet) while(win.parent && win !== win.parent && win.parent.location.href) { win = win.parent; } } catch( error) {} return win; }, /** * Allows to define if Granite.Util is running in an iFrame and parent window is in another domain * (and optionally define what would be the top window in that case. * This is necessary to use {@link getTopWindow} in a iFrame on WebKit based browsers because * {@link getTopWindow} iterates on parent windows to find the top one which triggers a security exception * if one parent window is in a different domain. Exception cannot be caught but is not breaking the JS * execution. * @param {Object} topWindow (optional) The iFrame top window. Must be running on the same host to avoid * security exception. Defaults to window. */ setIFrameMode: function(topWindow) { this.iFrameTopWindow = topWindow || window; }, /** * Applies default properties if inexistent inzo the base object. * Child objects are merged recursively. * REMARK: * - objects are recursively merged * - simple type obejct properties are copied over the base * - arrays are cloned and override the base (no value merging) * * @static * @param {Object} base object * @param {Object} pass objects to be copied onto the base * @return {Object} The base object with defaults */ applyDefaults: function() { var override, base = arguments[0] || {}; for (var i=1; i < arguments.length; i++) { override = arguments[i]; for (var name in override) { var value = override[name]; if (override.hasOwnProperty(name) && value) { if (typeof value === "object" && !(value instanceof Array)) { // nested object base[name] = self.applyDefaults(base[name], value); } else if (value instanceof Array) { //override array base[name] = value.slice(0); } else { // simple type base[name] = value; } } } } return base; }, /** * Get keycode from event * @param event Event * @returns {Number} Keycode */ getKeyCode: function(event) { return event.keyCode ? event.keyCode : event.which; } }; return self; }()); }(Granite, jQuery)); /* * ADOBE CONFIDENTIAL * * Copyright 2012 Adobe Systems Incorporated * All Rights Reserved. * * NOTICE: All information contained herein is, and remains * the property of Adobe Systems Incorporated and its suppliers, * if any. The intellectual and technical concepts contained * herein are proprietary to Adobe Systems Incorporated and its * suppliers and may be covered by U.S. and Foreign Patents, * patents in process, and are protected by trade secret or copyright law. * Dissemination of this information or reproduction of this material * is strictly forbidden unless prior written permission is obtained * from Adobe Systems Incorporated. * */ (function (Granite, util, sling, $) { /** * A helper class providing a set of HTTP-related utilities. * @static * @singleton * @class Granite.HTTP */ Granite.HTTP = (function() { /** * The context path used on the server. * May only be set by {@link #detectContextPath}. * @private * @type String */ var contextPath = null, /** * The regular expression to detect the context path used * on the server using the URL of this script. * @private * @final * @type RegExp */ SCRIPT_URL_REGEXP = /^(?:http|https):\/\/[^\/]+(\/.*)\/(?:etc(\/.*)*\/clientlibs|libs(\/.*)*\/clientlibs|apps(\/.*)*\/clientlibs).*\.js(\?.*)?$/, /** * The regular expression to detect unescaped special characters in a path. * @private * @final * @type RegExp */ ENCODE_PATH_REGEXP = /[^1\w-\.!~\*''\(\)\/%;:@&=\$,]/, /** * Indicates after a session timeout if a refresh has already been triggered * in order to avoid multiple alerts. * @private * @type String */ loginRedirected = false, self = {}; /** * Returns the scheme and authority (user, hostname, port) part of * the specified URL or an empty string if the URL does not include * that part. * @static * @param {String} url The URL * @return {String} The scheme and authority part */ self.getSchemeAndAuthority = function (url) { var end; try { if (url.indexOf("://") == -1) return ""; // e.g. url was /en.html end = url.indexOf("/", url.indexOf("://") + 3); return (end == -1) ? url : // e.g. url was http://www.day.com url.substring(0, end); // e.g. url was http://www.day.com/en.html } catch (e) { return ""; } }; /** * Returns the context path used on the server. * @static * @return {String} The context path */ self.getContextPath = function () { return contextPath; }; /** * Detects the context path used on the server. * @private * @static */ self.detectContextPath = function () { try { if (window.CQURLInfo) { contextPath = CQURLInfo.contextPath || ""; } else { var scripts = document.getElementsByTagName("script"); for (var i = 0; i < scripts.length; i++) { // in IE the first script is not the expected widgets js: loop // until it is found var result = SCRIPT_URL_REGEXP.exec(scripts[i].src); if (result) { contextPath = result[1]; return; } } contextPath = ""; } } catch (e) { } }; /** * Makes sure the specified relative URL starts with the context path * used on the server. If an absolute URL is passed, it will be returned * as-is. * @static * @param {String} url The URL * @return {String} The externalized URL */ self.externalize = function (url) { try { if (url.indexOf("/") == 0 && contextPath && url.indexOf(contextPath + "/") != 0) { url = contextPath + url; } } catch (e) { } return url; }; /** * Removes scheme, authority and context path from the specified * absolute URL if it has the same scheme and authority as the * specified document (or the current one). If a relative URL is passed, * the context path will be stripped if present. * @static * @param {String} url The URL * @param {String} doc (optional) The document * @return {String} The internalized URL */ self.internalize = function (url, doc) { if (url.charAt(0) == '/') { if (contextPath === url) { return ''; } else if (contextPath && url.indexOf(contextPath + "/") == 0) { return url.substring(contextPath.length); } else { return url; } } if (!doc) doc = document; var docHost = self.getSchemeAndAuthority(doc.location.href); var urlHost = self.getSchemeAndAuthority(url); if (docHost == urlHost) { return url.substring(urlHost.length + (contextPath ? contextPath.length : 0)); } else { return url; } }; /** * Removes all parts but the path from the specified URL. * <p>Examples:<pre><code> /x/y.sel.html?param=abc => /x/y </code></pre> * <pre><code> http://www.day.com/foo/bar.html => /foo/bar </code></pre><p> * @static * @param {String} url The URL, may be empty. If empty <code>window.location.href</code> is taken. * @return {String} The path */ self.getPath = function (url) { if (!url) { if (window.CQURLInfo && CQURLInfo.requestPath) { return CQURLInfo.requestPath; } else { url = window.location.pathname; } } else { url = self.removeParameters(url); url = self.removeAnchor(url); } url = self.internalize(url); var i = url.indexOf(".", url.lastIndexOf("/")); if (i != -1) { url = url.substring(0, i); } return url; }; /** * Removes the anchor from the specified URL. * @static * @param {String} url The URL * @return {String} The URL without anchor */ self.removeAnchor = function (url) { if (url.indexOf("#") != -1) { return url.substring(0, url.indexOf("#")); } return url; }; /** * Removes all parameter from the specified URL. * @static * @param {String} url The URL * @return {String} The URL without parameters */ self.removeParameters = function (url) { if (url.indexOf("?") != -1) { return url.substring(0, url.indexOf("?")); } return url; }; /** * Encodes the path of the specified URL if it is not already encoded. * Path means the part of the URL before the first question mark or * hash sign.<br> * See {@link #encodePath} for details about the encoding.<br> * Sample:<br> * <code>/x/y+z.png?path=/x/y+z >> /x/y%2Bz.png?path=x/y+z</code><br> * Note that the sample would not work because the "+" in the request * parameter would be interpreted as a space. Parameters must be encoded * separately. * @param {String} url The URL to encoded * @return {String} The encoded URL */ self.encodePathOfURI = function (url) { var parts, delim; if (url.indexOf("?") != -1) { parts = url.split("?"); delim = "?"; } else if (url.indexOf("#") != -1) { parts = url.split("#"); delim = "#"; } else { parts = [url]; } if (ENCODE_PATH_REGEXP.test(parts[0])) { parts[0] = self.encodePath(parts[0]); } return parts.join(delim); }; /** * Encodes the specified path using encodeURI. Additionally <code>+</code>, * <code>#</code> and <code>?</code> are encoded.<br> * The following characters are not encoded:<br> * <code>0-9 a-z A-Z</code><br> * <code>- _ . ! ~ * ( )</code><br> * <code>/ : @ & =</code><br> * @param {String} path The path to encode * @return {String} The encoded path */ self.encodePath = function (path) { // ensure IPV6 address square brackets are not encoded - see bug #34844 path = encodeURI(path).replace(/%5B/g, '[').replace(/%5D/g, ']'); path = path.replace(/\+/g, "%2B"); path = path.replace(/\?/g, "%3F"); path = path.replace(/;/g, "%3B"); path = path.replace(/#/g, "%23"); path = path.replace(/=/g, "%3D"); path = path.replace(/\$/g, "%24"); path = path.replace(/,/g, "%2C"); path = path.replace(/['']/g, "%27"); path = path.replace(/[""]/g, "%22"); return path; }; /** * Returns if the redirect to the login page has already been triggered. * @return {Boolean} */ self.handleLoginRedirect = function () { if (!loginRedirected) { loginRedirected = true; alert(Granite.I18n.get("Your request could not be completed because you have been signed out.")); var l = util.getTopWindow().document.location; l.href = self.externalize(sling.LOGIN_URL) + "?resource=" + encodeURIComponent(l.pathname + l.search + l.hash); } }; /** * Gets the XHR hooked URL if called in a portlet context * @param {String} url The URL to get * @param {String} method The method to use to retrieve the XHR hooked URL * @param {Object} params The parameters * @return {String} The XHR hooked URL if available, the provided URL otherwise */ self.getXhrHook = function (url, method, params) { method = method || "GET"; if (window.G_XHR_HOOK && $.isFunction(G_XHR_HOOK)) { var p = { "url": url, "method": method }; if (params) { p["params"] = params; } return G_XHR_HOOK(p); } return null; }; /** * Evaluates and returns the body of the specified response object. * Alternatively, a URL can be specified, in which case it will be * requested using a synchornous {@link #get} in order to acquire * the response object. * @static * @param {Object/String} response The response object or URL * @return {Object} The evaluated response body * @since 5.3 */ self.eval = function(response) { if (typeof response != "object") { response = $.ajax({ url: response, type: 'get', async: false }); } try { // support responseText for backward compatibility (pre 5.3) return eval("(" + (response.body ? response.body : response.responseText) + ")"); } catch (e) { } return null; }; return self; }()); }(Granite, Granite.Util, Granite.Sling, jQuery)); /* * ADOBE CONFIDENTIAL * * Copyright 2012 Adobe Systems Incorporated * All Rights Reserved. * * NOTICE: All information contained herein is, and remains * the property of Adobe Systems Incorporated and its suppliers, * if any. The intellectual and technical concepts contained * herein are proprietary to Adobe Systems Incorporated and its * suppliers and may be covered by U.S. and Foreign Patents, * patents in process, and are protected by trade secret or copyright law. * Dissemination of this information or reproduction of this material * is strictly forbidden unless prior written permission is obtained * from Adobe Systems Incorporated. * */ (function (document, Granite, util, http, $) { /** * A helper class providing a set of utilities related to internationalization (i18n). * * <h3>Locale Priorities</h3> * <p>The locale is read based on the following priorities:</p> * <ol> * <li>manually specified locale</li> * <li><code>document.documentElement.lang</code></li> * <li><code>Granite.I18n.LOCALE_DEFAULT</code></li> * </ol> * * <h3>Dictionary Priorities</h3> * <p>The dictionary URL is read based on the following priorities:</p> * <ol> * <li>manually specified URL (<code>urlPrefix</code, <code>urlSuffix</code>)</li> * <li><code>data-i18n-dictionary-src</code> attribute at <html> element, which has the type of <a href="http://tools.ietf.org/html/rfc6570" data-page-track="true" data-page-track-value="resources:::dictionary priorities">URI Template</a> string</li> * <li>The URL resolved from default <code>urlPrefix</code> and <code>urlSuffix</code></li> * </ol> * * <h3>URI Template of data-i18n-dictionary-src</h3> * <p>It expects the variable named <code>locale</code>, which will be fetched from the locale (based on priorities above). * E.g. <code><html lang="en" data-i18n-dictionary-src="/libs/cq/i18n/dict.{+locale}.json"></code>.</p> * * @static * @singleton * @class Granite.I18n */ Granite.I18n = (function() { /** * The map where the dictionaries are stored under their locale. * @private * @type Object */ var dicts = {}, /** * The prefix for the URL used to request dictionaries from the server. * @private * @type String */ urlPrefix = "/libs/cq/i18n/dict.", /** * The suffix for the URL used to request dictionaries from the server. * @private * @type String */ urlSuffix = ".json", /** * The manually specified locale as a String or a function that returns the locale as a string. * @private * @static * @type String */ manualLocale = undefined, /** * If the current locale represents pseudo translations. * In that case the dictionary is expected to provide just a special * translation pattern to automatically convert all original strings. */ pseudoTranslations = false, languages = null, self = {}, /** * Indicates if the dictionary parameters are specified manually. */ manualDictionary = false, getDictionaryUrl = function(locale) { if (manualDictionary) { return urlPrefix + locale + urlSuffix; } var dictionarySrc = $("html").attr("data-i18n-dictionary-src"); if (!dictionarySrc) { return urlPrefix + locale + urlSuffix; } // dictionarySrc is a URITemplate // Use simple string replacement for now; for more complicated scenario, please use Granite.URITemplate return dictionarySrc.replace("{locale}", encodeURIComponent(locale)).replace("{+locale}", locale); }; /** * The default locale (en). * @static * @final * @type String */ self.LOCALE_DEFAULT = "en"; /** * Language code for pseudo translations. * @static * @final * @type String */ self.PSEUDO_LANGUAGE = "zz"; /** * Dictionary key for pseudo translation pattern. * @static * @final * @type String */ self.PSEUDO_PATTERN_KEY = "_pseudoPattern_"; /** * Initializes I18n with the given config options: * <ul> * <li>locale: the current locale (defaults to "en")</li> * <li>urlPrefix: the prefix for the URL used to request dictionaries from * the server (defaults to "/libs/cq/i18n/dict.")</li> * <li>urlSuffix: the suffix for the URL used to request dictionaries from * the server (defaults to ".json")</li> * </ul> * Sample config. The dictioniary would be requested from * "/apps/i18n/dict.fr.json": <code><pre>{ "locale": "fr", "urlPrefix": "/apps/i18n/dict.", "urlSuffix": ".json" }</pre></code> * @param {Object} config The config */ self.init = function (config) { config = config || {}; this.setLocale(config.locale); this.setUrlPrefix(config.urlPrefix); this.setUrlSuffix(config.urlSuffix); }; /** * Sets the current locale. * @static * @param {String/Function} locale The locale or a function that returns the locale as a string */ self.setLocale = function (locale) { if (!locale) return; manualLocale = locale; }; /** * Returns the current locale based on the priorities. * @static * @return {String} The locale */ self.getLocale = function () { if (typeof manualLocale === "function") { // execute function first time only and store result in currentLocale manualLocale = manualLocale(); } return manualLocale || document.documentElement.lang || self.LOCALE_DEFAULT; }; /** * Sets the prefix for the URL used to request dictionaries from * the server. The locale and URL suffix will be appended. * @static * @param {String} prefix The URL prefix */ self.setUrlPrefix = function (prefix) { if (!prefix) return; urlPrefix = prefix; manualDictionary = true; }; /** * Sets the suffix for the URL used to request dictionaries from * the server. It will be appended to the URL prefix and locale. * @static * @param {String} suffix The URL suffix */ self.setUrlSuffix = function (suffix) { if (!suffix) return; urlSuffix = suffix; manualDictionary = true; }; /** * Returns the dictionary for the specified locale. This method * will request the dictionary using the URL prefix, the locale, * and the URL suffix. If no locale is specified, the current * locale is used. * @static * @param {String} locale (optional) The locale * @return {Object} The dictionary */ self.getDictionary = function (locale) { locale = locale || self.getLocale(); if (!dicts[locale]) { pseudoTranslations = (locale.indexOf(self.PSEUDO_LANGUAGE) == 0); try { var response = $.ajax(getDictionaryUrl(locale), { async: false, dataType: "json" }); dicts[locale] = JSON.parse(response.responseText); } catch (e) {} if (!dicts[locale]) { dicts[locale] = {}; } } return dicts[locale]; }; /** * Translates the specified text into the current language. * @static * @param {String} text The text to translate * @param {String[]} snippets The snippets replacing <code>{n}</code> (optional) * @param {String} note A hint for translators (optional) * @return {String} The translated text */ self.get = function (text, snippets, note) { var dict, newText, lookupText; dict = self.getDictionary(); // note that pseudoTranslations is initialized in the getDictionary() call above lookupText = pseudoTranslations ? self.PSEUDO_PATTERN_KEY : note ? text + " ((" + note + "))" : text; if (dict) { newText = dict[lookupText]; } if (!newText) { newText = text; } if (pseudoTranslations) { newText = newText.replace("{string}", text).replace("{comment}", note ? note : ""); } return util.patchText(newText, snippets); }; /** * Translates the specified text into the current language. Use this * method to translate String variables, e.g. data from the server. * @static * @param {String} text The text to translate * @param {String} note A hint for translators (optional) * @return {String} The translated text */ self.getVar = function (text, note) { if (!text) { return null; } return self.get(text, null, note); }; /** * Returns the available languages, including a "title" property with a display name: * for instance "German" for "de" or "German (Switzerland)" for "de_ch". * @static * @return {Object} An object with language codes as keys and an object with "title", * "language", "country" and "defaultCountry" members. */ self.getLanguages = function () { if (!languages) { try { // use overlay servlet so customers can define /apps/wcm/core/resources/languages var json = http.eval("/libs/wcm/core/resources/languages.overlay.infinity.json"); // TODO: broken!!! $.each(json, function(name, lang) { lang.title = self.getVar(lang.language); if (lang.title && lang.country && lang.country != "*") { lang.title += " ("+self.getVar(lang.country)+")"; } }); languages = json; } catch (e) { languages = {}; } } return languages; }; /** * Parses a language code string such as "de_CH" and returns an object with * language and country extracted. The delimiter can be "_" or "-". * @static * @param {String} langCode a language code such as "de" or "de_CH" or "de-ch" * @return {Object} an object with "code" ("de_CH"), "language" ("de") and "country" ("CH") * (or null if langCode was null) */ self.parseLocale = function (langCode) { if (!langCode) { return null; } var pos = langCode.indexOf("_"); if (pos < 0) { pos = langCode.indexOf("-"); } var language, country; if (pos < 0) { language = langCode; country = null; } else { language = langCode.substring(0, pos); country = langCode.substring(pos + 1); } return { code: langCode, language: language, country: country }; }; return self; }()); }(document, Granite, Granite.Util, Granite.HTTP, jQuery)); /* * * ADOBE CONFIDENTIAL * __________________ * * Copyright 2012 Adobe Systems Incorporated * All Rights Reserved. * * NOTICE: All information contained herein is, and remains * the property of Adobe Systems Incorporated and its suppliers, * if any. The intellectual and technical concepts contained * herein are proprietary to Adobe Systems Incorporated and its * suppliers and are protected by trade secret or copyright law. * Dissemination of this information or reproduction of this material * is strictly forbidden unless prior written permission is obtained * from Adobe Systems Incorporated. * */ /** * Implements the "Adobe Dynamic Touch Indicator" that tracks touch events and displays a visual indicator for * screen sharing and presentation purposes. * * To enable it call <code>Granite.TouchIndicator.init()</code> e.g. on document ready: * <pre><code> Granite.$(document).ready(function() { Granite.TouchIndicator.init(); }); </code></pre> * * AdobePatentID="2631US01" */ (function (Granite, $) { var touchIndicator = function() { var CSS = { "visibility": "hidden", "position": "absolute", // fixed would be better, but flickers on ipad while scrolling "width": "30px", "height": "30px", "-webkit-border-radius": "20px", "border-radius": "20px", "border": "5px solid orange", "-webkit-user-select": "none", "user-select": "none", "opacity": "0.5", "z-index": "2000", "pointer-events": "none" }; var used = {}; var unused = []; return { debugWithMouse: false, init: function() { var self = this; $(document).on("touchstart.touchindicator touchmove.touchindicator touchend.touchindicator", function(e) { var touches = e.originalEvent.touches; self.update(touches); return true; }); if (this.debugWithMouse) { $(document).on("mousemove.touchindicator", function(e){ e.identifer = "fake"; self.update([e]); return true; }); } }, update: function(touches) { // go over all touch events present in the array var retained = {}; for (var i = 0; i<touches.length; i++) { var touch = touches[i]; var id = touch.identifier; // check if we already have a indicator with the correct id var indicator = used[id]; if (!indicator) { // if not, check if we have an unused one indicator = unused.pop(); // if not, create a new one and append it to the dom if (!indicator) { indicator = $("<div></div>").css(CSS); $("body").append(indicator); } } retained[id] = indicator; indicator.offset({ left: touch.pageX - 20, top: touch.pageY - 20 }); indicator.css("visibility", "visible"); } // now hide all unused ones and stuff them in the unused array for (id in used) { if (used.hasOwnProperty(id) && !retained[id]) { indicator = used[id]; indicator.css("visibility", "hidden"); unused.push(indicator); } } used = retained; } } }; Granite.TouchIndicator = new touchIndicator(); }(Granite, jQuery)); /* * ADOBE CONFIDENTIAL * * Copyright 2012 Adobe Systems Incorporated * All Rights Reserved. * * NOTICE: All information contained herein is, and remains * the property of Adobe Systems Incorporated and its suppliers, * if any. The intellectual and technical concepts contained * herein are proprietary to Adobe Systems Incorporated and its * suppliers and may be covered by U.S. and Foreign Patents, * patents in process, and are protected by trade secret or copyright law. * Dissemination of this information or reproduction of this material * is strictly forbidden unless prior written permission is obtained * from Adobe Systems Incorporated. * */ (function (Granite, util, http, $) { /** * A tool to determine whether any opt-out cookie is set and whether a given cookie name * is white-listed. The opt-out and white-list cookie names are determined by a server * side configuration (com.adobe.granite.security.commons.OptOutService) and provided to * this tool by an optionally included component (/libs/granite/security/components/optout) * which provides a global JSON object named <code>GraniteOptOutConfig</code>. * * @static * @singleton * @class Granite.OptOutUtil */ Granite.OptOutUtil = (function () { var self = {}; /** * Contains the names of cookies the presence of which indicates the user has opted out. * @private * @type Array */ var optOutCookieNames = []; /** * Contains the names of cookies which may still be set in spite of the user having opted out. * @private * @type Array */ var whitelistedCookieNames = []; /** * Initializes this tool with an opt-out configuration. The following options are supported: * <ul> * <li>cookieNames: an array of cookie names representing opt-out cookies. Defaults to empty.</li> * <li>whitelistCookieNames: an array of cookies representing white-listed cookies. Defaults to empty.</li> * </ul> * Sample config: * <code> * <pre> * { * "cookieNames":["omniture_optout","cq-opt-out"], * "whitelistCookieNames":["someAppCookie", "anotherImportantAppCookie"] * } * </pre> * </code> * @param config The opt-out configuration */ self.init = function (config) { if (config) { optOutCookieNames = config.cookieNames ? config.cookieNames : optOutCookieNames; whitelistedCookieNames = config.whitelistCookieNames ? config.whitelistCookieNames : whitelistedCookieNames; } }; /** * Returns the array of configured cookie names representing opt-out cookies. * @static * @return {Array} The cookie names */ self.getCookieNames = function () { return optOutCookieNames; }; /** * Returns the array of configured cookie names representing white-listed cookies. * @static * @return {Array} The cookie names */ self.getWhitelistCookieNames = function () { return whitelistedCookieNames; }; /** * Determines whether the user (browser) has elected to opt-out. This is indicated by the presence of * one of the cookies retrieved through #getCookieNames(). * @return {Boolean} True if an opt-cookie was found in the browser's cookies. */ self.isOptedOut = function () { var browserCookies = document.cookie.split(";"); for (var i = 0; i < browserCookies.length; i++) { var cookie = browserCookies[i]; var cookieName = cookie.split("=")[0].trim(); if ($.inArray(cookieName, self.getCookieNames()) > -1) { return true; } } return false; }; /** * Determines whether the given <code>cookieName</code> may be used to set a cookie. This is the case * if either opt-out is inactive (#isOptedOut() == false) or it is active and the give cookie name was * found in the white-list (#getWhitelistCookieNames()). * @param cookieName The name of the cookie to check. * @return {Boolean} True if a cookie of this name may be used with respect to the opt-out status. */ self.maySetCookie = function (cookieName) { return !(self.isOptedOut() && $.inArray(cookieName, self.getWhitelistCookieNames()) === -1); }; return self; }()); }(Granite, Granite.Util, Granite.HTTP, jQuery)); /* * ADOBE CONFIDENTIAL * * Copyright 2012 Adobe Systems Incorporated * All Rights Reserved. * * NOTICE: All information contained herein is, and remains * the property of Adobe Systems Incorporated and its suppliers, * if any. The intellectual and technical concepts contained * herein are proprietary to Adobe Systems Incorporated and its * suppliers and may be covered by U.S. and Foreign Patents, * patents in process, and are protected by trade secret or copyright law. * Dissemination of this information or reproduction of this material * is strictly forbidden unless prior written permission is obtained * from Adobe Systems Incorporated. * */ //------------------------------------------------------------------------------ // Initialize the Granite utils library Granite.OptOutUtil.init(window.GraniteOptOutConfig); Granite.HTTP.detectContextPath(); /*! * JavaScript Cookie v2.2.1 * https://github.com/js-cookie/js-cookie * * Copyright 2006, 2015 Klaus Hartl & Fagner Brack * Released under the MIT license */ ;(function (factory) { var registeredInModuleLoader; if (typeof define === 'function' && define.amd) { define(factory); registeredInModuleLoader = true; } if (typeof exports === 'object') { module.exports = factory(); registeredInModuleLoader = true; } if (!registeredInModuleLoader) { var OldCookies = window.Cookies; var api = window.Cookies = factory(); api.noConflict = function () { window.Cookies = OldCookies; return api; }; } }(function () { function extend () { var i = 0; var result = {}; for (; i < arguments.length; i++) { var attributes = arguments[ i ]; for (var key in attributes) { result[key] = attributes[key]; } } return result; } function decode (s) { return s.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent); } function init (converter) { function api() {} function set (key, value, attributes) { if (typeof document === 'undefined') { return; } attributes = extend({ path: '/' }, api.defaults, attributes); if (typeof attributes.expires === 'number') { attributes.expires = new Date(new Date() * 1 + attributes.expires * 864e+5); } // We're using "expires" because "max-age" is not supported by IE attributes.expires = attributes.expires ? attributes.expires.toUTCString() : ''; try { var result = JSON.stringify(value); if (/^[\{\[]/.test(result)) { value = result; } } catch (e) {} value = converter.write ? converter.write(value, key) : encodeURIComponent(String(value)) .replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent); key = encodeURIComponent(String(key)) .replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent) .replace(/[\(\)]/g, escape); var stringifiedAttributes = ''; for (var attributeName in attributes) { if (!attributes[attributeName]) { continue; } stringifiedAttributes += '; ' + attributeName; if (attributes[attributeName] === true) { continue; } // Considers RFC 6265 section 5.2: // ... // 3. If the remaining unparsed-attributes contains a %x3B (";") // character: // Consume the characters of the unparsed-attributes up to, // not including, the first %x3B (";") character. // ... stringifiedAttributes += '=' + attributes[attributeName].split(';')[0]; } return (document.cookie = key + '=' + value + stringifiedAttributes); } function get (key, json) { if (typeof document === 'undefined') { return; } var jar = {}; // To prevent the for loop in the first place assign an empty array // in case there are no cookies at all. var cookies = document.cookie ? document.cookie.split('; ') : []; var i = 0; for (; i < cookies.length; i++) { var parts = cookies[i].split('='); var cookie = parts.slice(1).join('='); if (!json && cookie.charAt(0) === '"') { cookie = cookie.slice(1, -1); } try { var name = decode(parts[0]); cookie = (converter.read || converter)(cookie, name) || decode(cookie); if (json) { try { cookie = JSON.parse(cookie); } catch (e) {} } jar[name] = cookie; if (key === name) { break; } } catch (e) {} } return key ? jar[key] : jar; } api.set = set; api.get = function (key) { return get(key, false /* read as raw */); }; api.getJSON = function (key) { return get(key, true /* read as json */); }; api.remove = function (key, attributes) { set(key, '', extend(attributes, { expires: -1 })); }; api.defaults = {}; api.withConverter = init; return api; } return init(function () {}); })); (function () { // Returns a function, that, as long as it continues to be invoked, will not // be triggered. The function will be called after it stops being called for // N milliseconds. If `immediate` is passed, trigger the function on the // leading edge, instead of the trailing. function debounce(func, wait, immediate) { var timeout; return function() { var context = this, args = arguments; var later = function() { timeout = null; if (!immediate) func.apply(context, args); } var callNow = immediate && !timeout; clearTimeout(timeout); timeout = setTimeout(later, wait); if (callNow) func.apply(context, args); } } window.PAN_Clean_Util.debounce = debounce })(); /* ----------------------------------------------- * @fileOverview Kickass library to create and place poppers near their reference elements. * @version 1.16.1 * @license * Copyright (c) 2016 Federico Zivolo and contributors * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global.Popper = factory()); }(this, (function () { 'use strict'; var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined'; var timeoutDuration = function () { var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox']; for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) { if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) { return 1; } } return 0; }(); function microtaskDebounce(fn) { var called = false; return function () { if (called) { return; } called = true; window.Promise.resolve().then(function () { called = false; fn(); }); }; } function taskDebounce(fn) { var scheduled = false; return function () { if (!scheduled) { scheduled = true; setTimeout(function () { scheduled = false; fn(); }, timeoutDuration); } }; } var supportsMicroTasks = isBrowser && window.Promise; /** * Create a debounced version of a method, that's asynchronously deferred * but called in the minimum time possible. * * @method * @memberof Popper.Utils * @argument {Function} fn * @returns {Function} */ var debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce; /** * Check if the given variable is a function * @method * @memberof Popper.Utils * @argument {Any} functionToCheck - variable to check * @returns {Boolean} answer to: is a function? */ function isFunction(functionToCheck) { var getType = {}; return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]'; } /** * Get CSS computed property of the given element * @method * @memberof Popper.Utils * @argument {Eement} element * @argument {String} property */ function getStyleComputedProperty(element, property) { if (element.nodeType !== 1) { return []; } // NOTE: 1 DOM access here var window = element.ownerDocument.defaultView; var css = window.getComputedStyle(element, null); return property ? css[property] : css; } /** * Returns the parentNode or the host of the element * @method * @memberof Popper.Utils * @argument {Element} element * @returns {Element} parent */ function getParentNode(element) { if (element.nodeName === 'HTML') { return element; } return element.parentNode || element.host; } /** * Returns the scrolling parent of the given element * @method * @memberof Popper.Utils * @argument {Element} element * @returns {Element} scroll parent */ function getScrollParent(element) { // Return body, `getScroll` will take care to get the correct `scrollTop` from it if (!element) { return document.body; } switch (element.nodeName) { case 'HTML': case 'BODY': return element.ownerDocument.body; case '#document': return element.body; } // Firefox want us to check `-x` and `-y` variations as well var _getStyleComputedProp = getStyleComputedProperty(element), overflow = _getStyleComputedProp.overflow, overflowX = _getStyleComputedProp.overflowX, overflowY = _getStyleComputedProp.overflowY; if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) { return element; } return getScrollParent(getParentNode(element)); } /** * Returns the reference node of the reference object, or the reference object itself. * @method * @memberof Popper.Utils * @param {Element|Object} reference - the reference element (the popper will be relative to this) * @returns {Element} parent */ function getReferenceNode(reference) { return reference && reference.referenceNode ? reference.referenceNode : reference; } var isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode); var isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent); /** * Determines if the browser is Internet Explorer * @method * @memberof Popper.Utils * @param {Number} version to check * @returns {Boolean} isIE */ function isIE(version) { if (version === 11) { return isIE11; } if (version === 10) { return isIE10; } return isIE11 || isIE10; } /** * Returns the offset parent of the given element * @method * @memberof Popper.Utils * @argument {Element} element * @returns {Element} offset parent */ function getOffsetParent(element) { if (!element) { return document.documentElement; } var noOffsetParent = isIE(10) ? document.body : null; // NOTE: 1 DOM access here var offsetParent = element.offsetParent || null; // Skip hidden elements which don't have an offsetParent while (offsetParent === noOffsetParent && element.nextElementSibling) { offsetParent = (element = element.nextElementSibling).offsetParent; } var nodeName = offsetParent && offsetParent.nodeName; if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') { return element ? element.ownerDocument.documentElement : document.documentElement; } // .offsetParent will return the closest TH, TD or TABLE in case // no offsetParent is present, I hate this job... if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') { return getOffsetParent(offsetParent); } return offsetParent; } function isOffsetContainer(element) { var nodeName = element.nodeName; if (nodeName === 'BODY') { return false; } return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element; } /** * Finds the root node (document, shadowDOM root) of the given element * @method * @memberof Popper.Utils * @argument {Element} node * @returns {Element} root node */ function getRoot(node) { if (node.parentNode !== null) { return getRoot(node.parentNode); } return node; } /** * Finds the offset parent common to the two provided nodes * @method * @memberof Popper.Utils * @argument {Element} element1 * @argument {Element} element2 * @returns {Element} common offset parent */ function findCommonOffsetParent(element1, element2) { // This check is needed to avoid errors in case one of the elements isn't defined for any reason if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) { return document.documentElement; } // Here we make sure to give as "start" the element that comes first in the DOM var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING; var start = order ? element1 : element2; var end = order ? element2 : element1; // Get common ancestor container var range = document.createRange(); range.setStart(start, 0); range.setEnd(end, 0); var commonAncestorContainer = range.commonAncestorContainer; // Both nodes are inside #document if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) { if (isOffsetContainer(commonAncestorContainer)) { return commonAncestorContainer; } return getOffsetParent(commonAncestorContainer); } // one of the nodes is inside shadowDOM, find which one var element1root = getRoot(element1); if (element1root.host) { return findCommonOffsetParent(element1root.host, element2); } else { return findCommonOffsetParent(element1, getRoot(element2).host); } } /** * Gets the scroll value of the given element in the given side (top and left) * @method * @memberof Popper.Utils * @argument {Element} element * @argument {String} side `top` or `left` * @returns {number} amount of scrolled pixels */ function getScroll(element) { var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top'; var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft'; var nodeName = element.nodeName; if (nodeName === 'BODY' || nodeName === 'HTML') { var html = element.ownerDocument.documentElement; var scrollingElement = element.ownerDocument.scrollingElement || html; return scrollingElement[upperSide]; } return element[upperSide]; } /* * Sum or subtract the element scroll values (left and top) from a given rect object * @method * @memberof Popper.Utils * @param {Object} rect - Rect object you want to change * @param {HTMLElement} element - The element from the function reads the scroll values * @param {Boolean} subtract - set to true if you want to subtract the scroll values * @return {Object} rect - The modifier rect object */ function includeScroll(rect, element) { var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var scrollTop = getScroll(element, 'top'); var scrollLeft = getScroll(element, 'left'); var modifier = subtract ? -1 : 1; rect.top += scrollTop * modifier; rect.bottom += scrollTop * modifier; rect.left += scrollLeft * modifier; rect.right += scrollLeft * modifier; return rect; } /* * Helper to detect borders of a given element * @method * @memberof Popper.Utils * @param {CSSStyleDeclaration} styles * Result of `getStyleComputedProperty` on the given element * @param {String} axis - `x` or `y` * @return {number} borders - The borders size of the given axis */ function getBordersSize(styles, axis) { var sideA = axis === 'x' ? 'Left' : 'Top'; var sideB = sideA === 'Left' ? 'Right' : 'Bottom'; return parseFloat(styles['border' + sideA + 'Width']) + parseFloat(styles['border' + sideB + 'Width']); } function getSize(axis, body, html, computedStyle) { return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0); } function getWindowSizes(document) { var body = document.body; var html = document.documentElement; var computedStyle = isIE(10) && getComputedStyle(html); return { height: getSize('Height', body, html, computedStyle), width: getSize('Width', body, html, computedStyle) }; } var classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }; var createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var defineProperty = function (obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; /** * Given element offsets, generate an output similar to getBoundingClientRect * @method * @memberof Popper.Utils * @argument {Object} offsets * @returns {Object} ClientRect like output */ function getClientRect(offsets) { return _extends({}, offsets, { right: offsets.left + offsets.width, bottom: offsets.top + offsets.height }); } /** * Get bounding client rect of given element * @method * @memberof Popper.Utils * @param {HTMLElement} element * @return {Object} client rect */ function getBoundingClientRect(element) { var rect = {}; // IE10 10 FIX: Please, don't ask, the element isn't // considered in DOM in some circumstances... // This isn't reproducible in IE10 compatibility mode of IE11 try { if (isIE(10)) { rect = element.getBoundingClientRect(); var scrollTop = getScroll(element, 'top'); var scrollLeft = getScroll(element, 'left'); rect.top += scrollTop; rect.left += scrollLeft; rect.bottom += scrollTop; rect.right += scrollLeft; } else { rect = element.getBoundingClientRect(); } } catch (e) {} var result = { left: rect.left, top: rect.top, width: rect.right - rect.left, height: rect.bottom - rect.top }; // subtract scrollbar size from sizes var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {}; var width = sizes.width || element.clientWidth || result.width; var height = sizes.height || element.clientHeight || result.height; var horizScrollbar = element.offsetWidth - width; var vertScrollbar = element.offsetHeight - height; // if an hypothetical scrollbar is detected, we must be sure it's not a `border` // we make this check conditional for performance reasons if (horizScrollbar || vertScrollbar) { var styles = getStyleComputedProperty(element); horizScrollbar -= getBordersSize(styles, 'x'); vertScrollbar -= getBordersSize(styles, 'y'); result.width -= horizScrollbar; result.height -= vertScrollbar; } return getClientRect(result); } function getOffsetRectRelativeToArbitraryNode(children, parent) { var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var isIE10 = isIE(10); var isHTML = parent.nodeName === 'HTML'; var childrenRect = getBoundingClientRect(children); var parentRect = getBoundingClientRect(parent); var scrollParent = getScrollParent(children); var styles = getStyleComputedProperty(parent); var borderTopWidth = parseFloat(styles.borderTopWidth); var borderLeftWidth = parseFloat(styles.borderLeftWidth); // In cases where the parent is fixed, we must ignore negative scroll in offset calc if (fixedPosition && isHTML) { parentRect.top = Math.max(parentRect.top, 0); parentRect.left = Math.max(parentRect.left, 0); } var offsets = getClientRect({ top: childrenRect.top - parentRect.top - borderTopWidth, left: childrenRect.left - parentRect.left - borderLeftWidth, width: childrenRect.width, height: childrenRect.height }); offsets.marginTop = 0; offsets.marginLeft = 0; // Subtract margins of documentElement in case it's being used as parent // we do this only on HTML because it's the only element that behaves // differently when margins are applied to it. The margins are included in // the box of the documentElement, in the other cases not. if (!isIE10 && isHTML) { var marginTop = parseFloat(styles.marginTop); var marginLeft = parseFloat(styles.marginLeft); offsets.top -= borderTopWidth - marginTop; offsets.bottom -= borderTopWidth - marginTop; offsets.left -= borderLeftWidth - marginLeft; offsets.right -= borderLeftWidth - marginLeft; // Attach marginTop and marginLeft because in some circumstances we may need them offsets.marginTop = marginTop; offsets.marginLeft = marginLeft; } if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') { offsets = includeScroll(offsets, parent); } return offsets; } function getViewportOffsetRectRelativeToArtbitraryNode(element) { var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var html = element.ownerDocument.documentElement; var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html); var width = Math.max(html.clientWidth, window.innerWidth || 0); var height = Math.max(html.clientHeight, window.innerHeight || 0); var scrollTop = !excludeScroll ? getScroll(html) : 0; var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0; var offset = { top: scrollTop - relativeOffset.top + relativeOffset.marginTop, left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft, width: width, height: height }; return getClientRect(offset); } /** * Check if the given element is fixed or is inside a fixed parent * @method * @memberof Popper.Utils * @argument {Element} element * @argument {Element} customContainer * @returns {Boolean} answer to "isFixed?" */ function isFixed(element) { var nodeName = element.nodeName; if (nodeName === 'BODY' || nodeName === 'HTML') { return false; } if (getStyleComputedProperty(element, 'position') === 'fixed') { return true; } var parentNode = getParentNode(element); if (!parentNode) { return false; } return isFixed(parentNode); } /** * Finds the first parent of an element that has a transformed property defined * @method * @memberof Popper.Utils * @argument {Element} element * @returns {Element} first transformed parent or documentElement */ function getFixedPositionOffsetParent(element) { // This check is needed to avoid errors in case one of the elements isn't defined for any reason if (!element || !element.parentElement || isIE()) { return document.documentElement; } var el = element.parentElement; while (el && getStyleComputedProperty(el, 'transform') === 'none') { el = el.parentElement; } return el || document.documentElement; } /** * Computed the boundaries limits and return them * @method * @memberof Popper.Utils * @param {HTMLElement} popper * @param {HTMLElement} reference * @param {number} padding * @param {HTMLElement} boundariesElement - Element used to define the boundaries * @param {Boolean} fixedPosition - Is in fixed position mode * @returns {Object} Coordinates of the boundaries */ function getBoundaries(popper, reference, padding, boundariesElement) { var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; // NOTE: 1 DOM access here var boundaries = { top: 0, left: 0 }; var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference)); // Handle viewport case if (boundariesElement === 'viewport') { boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition); } else { // Handle other cases based on DOM element used as boundaries var boundariesNode = void 0; if (boundariesElement === 'scrollParent') { boundariesNode = getScrollParent(getParentNode(reference)); if (boundariesNode.nodeName === 'BODY') { boundariesNode = popper.ownerDocument.documentElement; } } else if (boundariesElement === 'window') { boundariesNode = popper.ownerDocument.documentElement; } else { boundariesNode = boundariesElement; } var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition); // In case of HTML, we need a different computation if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) { var _getWindowSizes = getWindowSizes(popper.ownerDocument), height = _getWindowSizes.height, width = _getWindowSizes.width; boundaries.top += offsets.top - offsets.marginTop; boundaries.bottom = height + offsets.top; boundaries.left += offsets.left - offsets.marginLeft; boundaries.right = width + offsets.left; } else { // for all the other DOM elements, this one is good boundaries = offsets; } } // Add paddings padding = padding || 0; var isPaddingNumber = typeof padding === 'number'; boundaries.left += isPaddingNumber ? padding : padding.left || 0; boundaries.top += isPaddingNumber ? padding : padding.top || 0; boundaries.right -= isPaddingNumber ? padding : padding.right || 0; boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0; return boundaries; } function getArea(_ref) { var width = _ref.width, height = _ref.height; return width * height; } /** * Utility used to transform the `auto` placement to the placement with more * available space. * @method * @memberof Popper.Utils * @argument {Object} data - The data object generated by update method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */ function computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) { var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0; if (placement.indexOf('auto') === -1) { return placement; } var boundaries = getBoundaries(popper, reference, padding, boundariesElement); var rects = { top: { width: boundaries.width, height: refRect.top - boundaries.top }, right: { width: boundaries.right - refRect.right, height: boundaries.height }, bottom: { width: boundaries.width, height: boundaries.bottom - refRect.bottom }, left: { width: refRect.left - boundaries.left, height: boundaries.height } }; var sortedAreas = Object.keys(rects).map(function (key) { return _extends({ key: key }, rects[key], { area: getArea(rects[key]) }); }).sort(function (a, b) { return b.area - a.area; }); var filteredAreas = sortedAreas.filter(function (_ref2) { var width = _ref2.width, height = _ref2.height; return width >= popper.clientWidth && height >= popper.clientHeight; }); var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key; var variation = placement.split('-')[1]; return computedPlacement + (variation ? '-' + variation : ''); } /** * Get offsets to the reference element * @method * @memberof Popper.Utils * @param {Object} state * @param {Element} popper - the popper element * @param {Element} reference - the reference element (the popper will be relative to this) * @param {Element} fixedPosition - is in fixed position mode * @returns {Object} An object containing the offsets which will be applied to the popper */ function getReferenceOffsets(state, popper, reference) { var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference)); return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition); } /** * Get the outer sizes of the given element (offset size + margins) * @method * @memberof Popper.Utils * @argument {Element} element * @returns {Object} object containing width and height properties */ function getOuterSizes(element) { var window = element.ownerDocument.defaultView; var styles = window.getComputedStyle(element); var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0); var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0); var result = { width: element.offsetWidth + y, height: element.offsetHeight + x }; return result; } /** * Get the opposite placement of the given one * @method * @memberof Popper.Utils * @argument {String} placement * @returns {String} flipped placement */ function getOppositePlacement(placement) { var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' }; return placement.replace(/left|right|bottom|top/g, function (matched) { return hash[matched]; }); } /** * Get offsets to the popper * @method * @memberof Popper.Utils * @param {Object} position - CSS position the Popper will get applied * @param {HTMLElement} popper - the popper element * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this) * @param {String} placement - one of the valid placement options * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper */ function getPopperOffsets(popper, referenceOffsets, placement) { placement = placement.split('-')[0]; // Get popper node sizes var popperRect = getOuterSizes(popper); // Add position, width and height to our offsets object var popperOffsets = { width: popperRect.width, height: popperRect.height }; // depending by the popper placement we have to compute its offsets slightly differently var isHoriz = ['right', 'left'].indexOf(placement) !== -1; var mainSide = isHoriz ? 'top' : 'left'; var secondarySide = isHoriz ? 'left' : 'top'; var measurement = isHoriz ? 'height' : 'width'; var secondaryMeasurement = !isHoriz ? 'height' : 'width'; popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2; if (placement === secondarySide) { popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement]; } else { popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)]; } return popperOffsets; } /** * Mimics the `find` method of Array * @method * @memberof Popper.Utils * @argument {Array} arr * @argument prop * @argument value * @returns index or -1 */ function find(arr, check) { // use native find if supported if (Array.prototype.find) { return arr.find(check); } // use `filter` to obtain the same behavior of `find` return arr.filter(check)[0]; } /** * Return the index of the matching object * @method * @memberof Popper.Utils * @argument {Array} arr * @argument prop * @argument value * @returns index or -1 */ function findIndex(arr, prop, value) { // use native findIndex if supported if (Array.prototype.findIndex) { return arr.findIndex(function (cur) { return cur[prop] === value; }); } // use `find` + `indexOf` if `findIndex` isn't supported var match = find(arr, function (obj) { return obj[prop] === value; }); return arr.indexOf(match); } /** * Loop trough the list of modifiers and run them in order, * each of them will then edit the data object. * @method * @memberof Popper.Utils * @param {dataObject} data * @param {Array} modifiers * @param {String} ends - Optional modifier name used as stopper * @returns {dataObject} */ function runModifiers(modifiers, data, ends) { var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends)); modifiersToRun.forEach(function (modifier) { if (modifier['function']) { // eslint-disable-line dot-notation console.warn('`modifier.function` is deprecated, use `modifier.fn`!'); } var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation if (modifier.enabled && isFunction(fn)) { // Add properties to offsets to make them a complete clientRect object // we do this before each modifier to make sure the previous one doesn't // mess with these values data.offsets.popper = getClientRect(data.offsets.popper); data.offsets.reference = getClientRect(data.offsets.reference); data = fn(data, modifier); } }); return data; } /** * Updates the position of the popper, computing the new offsets and applying * the new style.<br /> * Prefer `scheduleUpdate` over `update` because of performance reasons. * @method * @memberof Popper */ function update() { // if popper is destroyed, don't perform any further update if (this.state.isDestroyed) { return; } var data = { instance: this, styles: {}, arrowStyles: {}, attributes: {}, flipped: false, offsets: {} }; // compute reference element offsets data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed); // compute auto placement, store placement inside the data object, // modifiers will be able to edit `placement` if needed // and refer to originalPlacement to know the original value data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding); // store the computed placement inside `originalPlacement` data.originalPlacement = data.placement; data.positionFixed = this.options.positionFixed; // compute the popper offsets data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement); data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute'; // run the modifiers data = runModifiers(this.modifiers, data); // the first `update` will call `onCreate` callback // the other ones will call `onUpdate` callback if (!this.state.isCreated) { this.state.isCreated = true; this.options.onCreate(data); } else { this.options.onUpdate(data); } } /** * Helper used to know if the given modifier is enabled. * @method * @memberof Popper.Utils * @returns {Boolean} */ function isModifierEnabled(modifiers, modifierName) { return modifiers.some(function (_ref) { var name = _ref.name, enabled = _ref.enabled; return enabled && name === modifierName; }); } /** * Get the prefixed supported property name * @method * @memberof Popper.Utils * @argument {String} property (camelCase) * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix) */ function getSupportedPropertyName(property) { var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O']; var upperProp = property.charAt(0).toUpperCase() + property.slice(1); for (var i = 0; i < prefixes.length; i++) { var prefix = prefixes[i]; var toCheck = prefix ? '' + prefix + upperProp : property; if (typeof document.body.style[toCheck] !== 'undefined') { return toCheck; } } return null; } /** * Destroys the popper. * @method * @memberof Popper */ function destroy() { this.state.isDestroyed = true; // touch DOM only if `applyStyle` modifier is enabled if (isModifierEnabled(this.modifiers, 'applyStyle')) { this.popper.removeAttribute('x-placement'); this.popper.style.position = ''; this.popper.style.top = ''; this.popper.style.left = ''; this.popper.style.right = ''; this.popper.style.bottom = ''; this.popper.style.willChange = ''; this.popper.style[getSupportedPropertyName('transform')] = ''; } this.disableEventListeners(); // remove the popper if user explicitly asked for the deletion on destroy // do not use `remove` because IE11 doesn't support it if (this.options.removeOnDestroy) { this.popper.parentNode.removeChild(this.popper); } return this; } /** * Get the window associated with the element * @argument {Element} element * @returns {Window} */ function getWindow(element) { var ownerDocument = element.ownerDocument; return ownerDocument ? ownerDocument.defaultView : window; } function attachToScrollParents(scrollParent, event, callback, scrollParents) { var isBody = scrollParent.nodeName === 'BODY'; var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent; target.addEventListener(event, callback, { passive: true }); if (!isBody) { attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents); } scrollParents.push(target); } /** * Setup needed event listeners used to update the popper position * @method * @memberof Popper.Utils * @private */ function setupEventListeners(reference, options, state, updateBound) { // Resize event listener on window state.updateBound = updateBound; getWindow(reference).addEventListener('resize', state.updateBound, { passive: true }); // Scroll event listener on scroll parents var scrollElement = getScrollParent(reference); attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents); state.scrollElement = scrollElement; state.eventsEnabled = true; return state; } /** * It will add resize/scroll events and start recalculating * position of the popper element when they are triggered. * @method * @memberof Popper */ function enableEventListeners() { if (!this.state.eventsEnabled) { this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate); } } /** * Remove event listeners used to update the popper position * @method * @memberof Popper.Utils * @private */ function removeEventListeners(reference, state) { // Remove resize event listener on window getWindow(reference).removeEventListener('resize', state.updateBound); // Remove scroll event listener on scroll parents state.scrollParents.forEach(function (target) { target.removeEventListener('scroll', state.updateBound); }); // Reset state state.updateBound = null; state.scrollParents = []; state.scrollElement = null; state.eventsEnabled = false; return state; } /** * It will remove resize/scroll events and won't recalculate popper position * when they are triggered. It also won't trigger `onUpdate` callback anymore, * unless you call `update` method manually. * @method * @memberof Popper */ function disableEventListeners() { if (this.state.eventsEnabled) { cancelAnimationFrame(this.scheduleUpdate); this.state = removeEventListeners(this.reference, this.state); } } /** * Tells if a given input is a number * @method * @memberof Popper.Utils * @param {*} input to check * @return {Boolean} */ function isNumeric(n) { return n !== '' && !isNaN(parseFloat(n)) && isFinite(n); } /** * Set the style to the given popper * @method * @memberof Popper.Utils * @argument {Element} element - Element to apply the style to * @argument {Object} styles * Object with a list of properties and values which will be applied to the element */ function setStyles(element, styles) { Object.keys(styles).forEach(function (prop) { var unit = ''; // add unit if the value is numeric and is one of the following if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) { unit = 'px'; } element.style[prop] = styles[prop] + unit; }); } /** * Set the attributes to the given popper * @method * @memberof Popper.Utils * @argument {Element} element - Element to apply the attributes to * @argument {Object} styles * Object with a list of properties and values which will be applied to the element */ function setAttributes(element, attributes) { Object.keys(attributes).forEach(function (prop) { var value = attributes[prop]; if (value !== false) { element.setAttribute(prop, attributes[prop]); } else { element.removeAttribute(prop); } }); } /** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by `update` method * @argument {Object} data.styles - List of style properties - values to apply to popper element * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element * @argument {Object} options - Modifiers configuration and options * @returns {Object} The same data object */ function applyStyle(data) { // any property present in `data.styles` will be applied to the popper, // in this way we can make the 3rd party modifiers add custom styles to it // Be aware, modifiers could override the properties defined in the previous // lines of this modifier! setStyles(data.instance.popper, data.styles); // any property present in `data.attributes` will be applied to the popper, // they will be set as HTML attributes of the element setAttributes(data.instance.popper, data.attributes); // if arrowElement is defined and arrowStyles has some properties if (data.arrowElement && Object.keys(data.arrowStyles).length) { setStyles(data.arrowElement, data.arrowStyles); } return data; } /** * Set the x-placement attribute before everything else because it could be used * to add margins to the popper margins needs to be calculated to get the * correct popper offsets. * @method * @memberof Popper.modifiers * @param {HTMLElement} reference - The reference element used to position the popper * @param {HTMLElement} popper - The HTML element used as popper * @param {Object} options - Popper.js options */ function applyStyleOnLoad(reference, popper, options, modifierOptions, state) { // compute reference element offsets var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed); // compute auto placement, store placement inside the data object, // modifiers will be able to edit `placement` if needed // and refer to originalPlacement to know the original value var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding); popper.setAttribute('x-placement', placement); // Apply `position` to popper before anything else because // without the position applied we can't guarantee correct computations setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' }); return options; } /** * @function * @memberof Popper.Utils * @argument {Object} data - The data object generated by `update` method * @argument {Boolean} shouldRound - If the offsets should be rounded at all * @returns {Object} The popper's position offsets rounded * * The tale of pixel-perfect positioning. It's still not 100% perfect, but as * good as it can be within reason. * Discussion here: https://github.com/FezVrasta/popper.js/pull/715 * * Low DPI screens cause a popper to be blurry if not using full pixels (Safari * as well on High DPI screens). * * Firefox prefers no rounding for positioning and does not have blurriness on * high DPI screens. * * Only horizontal placement and left/right values need to be considered. */ function getRoundedOffsets(data, shouldRound) { var _data$offsets = data.offsets, popper = _data$offsets.popper, reference = _data$offsets.reference; var round = Math.round, floor = Math.floor; var noRound = function noRound(v) { return v; }; var referenceWidth = round(reference.width); var popperWidth = round(popper.width); var isVertical = ['left', 'right'].indexOf(data.placement) !== -1; var isVariation = data.placement.indexOf('-') !== -1; var sameWidthParity = referenceWidth % 2 === popperWidth % 2; var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1; var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor; var verticalToInteger = !shouldRound ? noRound : round; return { left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left), top: verticalToInteger(popper.top), bottom: verticalToInteger(popper.bottom), right: horizontalToInteger(popper.right) }; } var isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent); /** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by `update` method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */ function computeStyle(data, options) { var x = options.x, y = options.y; var popper = data.offsets.popper; // Remove this legacy support in Popper.js v2 var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) { return modifier.name === 'applyStyle'; }).gpuAcceleration; if (legacyGpuAccelerationOption !== undefined) { console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!'); } var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration; var offsetParent = getOffsetParent(data.instance.popper); var offsetParentRect = getBoundingClientRect(offsetParent); // Styles var styles = { position: popper.position }; var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox); var sideA = x === 'bottom' ? 'top' : 'bottom'; var sideB = y === 'right' ? 'left' : 'right'; // if gpuAcceleration is set to `true` and transform is supported, // we use `translate3d` to apply the position to the popper we // automatically use the supported prefixed version if needed var prefixedProperty = getSupportedPropertyName('transform'); // now, let's make a step back and look at this code closely (wtf?) // If the content of the popper grows once it's been positioned, it // may happen that the popper gets misplaced because of the new content // overflowing its reference element // To avoid this problem, we provide two options (x and y), which allow // the consumer to define the offset origin. // If we position a popper on top of a reference element, we can set // `x` to `top` to make the popper grow towards its top instead of // its bottom. var left = void 0, top = void 0; if (sideA === 'bottom') { // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar) // and not the bottom of the html element if (offsetParent.nodeName === 'HTML') { top = -offsetParent.clientHeight + offsets.bottom; } else { top = -offsetParentRect.height + offsets.bottom; } } else { top = offsets.top; } if (sideB === 'right') { if (offsetParent.nodeName === 'HTML') { left = -offsetParent.clientWidth + offsets.right; } else { left = -offsetParentRect.width + offsets.right; } } else { left = offsets.left; } if (gpuAcceleration && prefixedProperty) { styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)'; styles[sideA] = 0; styles[sideB] = 0; styles.willChange = 'transform'; } else { // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties var invertTop = sideA === 'bottom' ? -1 : 1; var invertLeft = sideB === 'right' ? -1 : 1; styles[sideA] = top * invertTop; styles[sideB] = left * invertLeft; styles.willChange = sideA + ', ' + sideB; } // Attributes var attributes = { 'x-placement': data.placement }; // Update `data` attributes, styles and arrowStyles data.attributes = _extends({}, attributes, data.attributes); data.styles = _extends({}, styles, data.styles); data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles); return data; } /** * Helper used to know if the given modifier depends from another one.<br /> * It checks if the needed modifier is listed and enabled. * @method * @memberof Popper.Utils * @param {Array} modifiers - list of modifiers * @param {String} requestingName - name of requesting modifier * @param {String} requestedName - name of requested modifier * @returns {Boolean} */ function isModifierRequired(modifiers, requestingName, requestedName) { var requesting = find(modifiers, function (_ref) { var name = _ref.name; return name === requestingName; }); var isRequired = !!requesting && modifiers.some(function (modifier) { return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order; }); if (!isRequired) { var _requesting = '`' + requestingName + '`'; var requested = '`' + requestedName + '`'; console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!'); } return isRequired; } /** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by update method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */ function arrow(data, options) { var _data$offsets$arrow; // arrow depends on keepTogether in order to work if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) { return data; } var arrowElement = options.element; // if arrowElement is a string, suppose it's a CSS selector if (typeof arrowElement === 'string') { arrowElement = data.instance.popper.querySelector(arrowElement); // if arrowElement is not found, don't run the modifier if (!arrowElement) { return data; } } else { // if the arrowElement isn't a query selector we must check that the // provided DOM node is child of its popper node if (!data.instance.popper.contains(arrowElement)) { console.warn('WARNING: `arrow.element` must be child of its popper element!'); return data; } } var placement = data.placement.split('-')[0]; var _data$offsets = data.offsets, popper = _data$offsets.popper, reference = _data$offsets.reference; var isVertical = ['left', 'right'].indexOf(placement) !== -1; var len = isVertical ? 'height' : 'width'; var sideCapitalized = isVertical ? 'Top' : 'Left'; var side = sideCapitalized.toLowerCase(); var altSide = isVertical ? 'left' : 'top'; var opSide = isVertical ? 'bottom' : 'right'; var arrowElementSize = getOuterSizes(arrowElement)[len]; // // extends keepTogether behavior making sure the popper and its // reference have enough pixels in conjunction // // top/left side if (reference[opSide] - arrowElementSize < popper[side]) { data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize); } // bottom/right side if (reference[side] + arrowElementSize > popper[opSide]) { data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide]; } data.offsets.popper = getClientRect(data.offsets.popper); // compute center of the popper var center = reference[side] + reference[len] / 2 - arrowElementSize / 2; // Compute the sideValue using the updated popper offsets // take popper margin in account because we don't have this info available var css = getStyleComputedProperty(data.instance.popper); var popperMarginSide = parseFloat(css['margin' + sideCapitalized]); var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width']); var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide; // prevent arrowElement from being placed not contiguously to its popper sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0); data.arrowElement = arrowElement; data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow); return data; } /** * Get the opposite placement variation of the given one * @method * @memberof Popper.Utils * @argument {String} placement variation * @returns {String} flipped placement variation */ function getOppositeVariation(variation) { if (variation === 'end') { return 'start'; } else if (variation === 'start') { return 'end'; } return variation; } /** * List of accepted placements to use as values of the `placement` option.<br /> * Valid placements are: * - `auto` * - `top` * - `right` * - `bottom` * - `left` * * Each placement can have a variation from this list: * - `-start` * - `-end` * * Variations are interpreted easily if you think of them as the left to right * written languages. Horizontally (`top` and `bottom`), `start` is left and `end` * is right.<br /> * Vertically (`left` and `right`), `start` is top and `end` is bottom. * * Some valid examples are: * - `top-end` (on top of reference, right aligned) * - `right-start` (on right of reference, top aligned) * - `bottom` (on bottom, centered) * - `auto-end` (on the side with more space available, alignment depends by placement) * * @static * @type {Array} * @enum {String} * @readonly * @method placements * @memberof Popper */ var placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start']; // Get rid of `auto` `auto-start` and `auto-end` var validPlacements = placements.slice(3); /** * Given an initial placement, returns all the subsequent placements * clockwise (or counter-clockwise). * * @method * @memberof Popper.Utils * @argument {String} placement - A valid placement (it accepts variations) * @argument {Boolean} counter - Set to true to walk the placements counterclockwise * @returns {Array} placements including their variations */ function clockwise(placement) { var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var index = validPlacements.indexOf(placement); var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index)); return counter ? arr.reverse() : arr; } var BEHAVIORS = { FLIP: 'flip', CLOCKWISE: 'clockwise', COUNTERCLOCKWISE: 'counterclockwise' }; /** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by update method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */ function flip(data, options) { // if `inner` modifier is enabled, we can't use the `flip` modifier if (isModifierEnabled(data.instance.modifiers, 'inner')) { return data; } if (data.flipped && data.placement === data.originalPlacement) { // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides return data; } var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed); var placement = data.placement.split('-')[0]; var placementOpposite = getOppositePlacement(placement); var variation = data.placement.split('-')[1] || ''; var flipOrder = []; switch (options.behavior) { case BEHAVIORS.FLIP: flipOrder = [placement, placementOpposite]; break; case BEHAVIORS.CLOCKWISE: flipOrder = clockwise(placement); break; case BEHAVIORS.COUNTERCLOCKWISE: flipOrder = clockwise(placement, true); break; default: flipOrder = options.behavior; } flipOrder.forEach(function (step, index) { if (placement !== step || flipOrder.length === index + 1) { return data; } placement = data.placement.split('-')[0]; placementOpposite = getOppositePlacement(placement); var popperOffsets = data.offsets.popper; var refOffsets = data.offsets.reference; // using floor because the reference offsets may contain decimals we are not going to consider here var floor = Math.floor; var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom); var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left); var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right); var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top); var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom); var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom; // flip the variation if required var isVertical = ['top', 'bottom'].indexOf(placement) !== -1; // flips variation if reference element overflows boundaries var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom); // flips variation if popper content overflows boundaries var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop); var flippedVariation = flippedVariationByRef || flippedVariationByContent; if (overlapsRef || overflowsBoundaries || flippedVariation) { // this boolean to detect any flip loop data.flipped = true; if (overlapsRef || overflowsBoundaries) { placement = flipOrder[index + 1]; } if (flippedVariation) { variation = getOppositeVariation(variation); } data.placement = placement + (variation ? '-' + variation : ''); // this object contains `position`, we want to preserve it along with // any additional property we may add in the future data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement)); data = runModifiers(data.instance.modifiers, data, 'flip'); } }); return data; } /** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by update method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */ function keepTogether(data) { var _data$offsets = data.offsets, popper = _data$offsets.popper, reference = _data$offsets.reference; var placement = data.placement.split('-')[0]; var floor = Math.floor; var isVertical = ['top', 'bottom'].indexOf(placement) !== -1; var side = isVertical ? 'right' : 'bottom'; var opSide = isVertical ? 'left' : 'top'; var measurement = isVertical ? 'width' : 'height'; if (popper[side] < floor(reference[opSide])) { data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement]; } if (popper[opSide] > floor(reference[side])) { data.offsets.popper[opSide] = floor(reference[side]); } return data; } /** * Converts a string containing value + unit into a px value number * @function * @memberof {modifiers~offset} * @private * @argument {String} str - Value + unit string * @argument {String} measurement - `height` or `width` * @argument {Object} popperOffsets * @argument {Object} referenceOffsets * @returns {Number|String} * Value in pixels, or original string if no values were extracted */ function toValue(str, measurement, popperOffsets, referenceOffsets) { // separate value from unit var split = str.match(/((?:\-|\+)?\d*\.?\d*)(.*)/); var value = +split[1]; var unit = split[2]; // If it's not a number it's an operator, I guess if (!value) { return str; } if (unit.indexOf('%') === 0) { var element = void 0; switch (unit) { case '%p': element = popperOffsets; break; case '%': case '%r': default: element = referenceOffsets; } var rect = getClientRect(element); return rect[measurement] / 100 * value; } else if (unit === 'vh' || unit === 'vw') { // if is a vh or vw, we calculate the size based on the viewport var size = void 0; if (unit === 'vh') { size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0); } else { size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0); } return size / 100 * value; } else { // if is an explicit pixel unit, we get rid of the unit and keep the value // if is an implicit unit, it's px, and we return just the value return value; } } /** * Parse an `offset` string to extrapolate `x` and `y` numeric offsets. * @function * @memberof {modifiers~offset} * @private * @argument {String} offset * @argument {Object} popperOffsets * @argument {Object} referenceOffsets * @argument {String} basePlacement * @returns {Array} a two cells array with x and y offsets in numbers */ function parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) { var offsets = [0, 0]; // Use height if placement is left or right and index is 0 otherwise use width // in this way the first offset will use an axis and the second one // will use the other one var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1; // Split the offset string to obtain a list of values and operands // The regex addresses values with the plus or minus sign in front (+10, -20, etc) var fragments = offset.split(/(\+|\-)/).map(function (frag) { return frag.trim(); }); // Detect if the offset string contains a pair of values or a single one // they could be separated by comma or space var divider = fragments.indexOf(find(fragments, function (frag) { return frag.search(/,|\s/) !== -1; })); if (fragments[divider] && fragments[divider].indexOf(',') === -1) { console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.'); } // If divider is found, we divide the list of values and operands to divide // them by ofset X and Y. var splitRegex = /\s*,\s*|\s+/; var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments]; // Convert the values with units to absolute pixels to allow our computations ops = ops.map(function (op, index) { // Most of the units rely on the orientation of the popper var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width'; var mergeWithPrevious = false; return op // This aggregates any `+` or `-` sign that aren't considered operators // e.g.: 10 + +5 => [10, +, +5] .reduce(function (a, b) { if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) { a[a.length - 1] = b; mergeWithPrevious = true; return a; } else if (mergeWithPrevious) { a[a.length - 1] += b; mergeWithPrevious = false; return a; } else { return a.concat(b); } }, []) // Here we convert the string values into number values (in px) .map(function (str) { return toValue(str, measurement, popperOffsets, referenceOffsets); }); }); // Loop trough the offsets arrays and execute the operations ops.forEach(function (op, index) { op.forEach(function (frag, index2) { if (isNumeric(frag)) { offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1); } }); }); return offsets; } /** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by update method * @argument {Object} options - Modifiers configuration and options * @argument {Number|String} options.offset=0 * The offset value as described in the modifier description * @returns {Object} The data object, properly modified */ function offset(data, _ref) { var offset = _ref.offset; var placement = data.placement, _data$offsets = data.offsets, popper = _data$offsets.popper, reference = _data$offsets.reference; var basePlacement = placement.split('-')[0]; var offsets = void 0; if (isNumeric(+offset)) { offsets = [+offset, 0]; } else { offsets = parseOffset(offset, popper, reference, basePlacement); } if (basePlacement === 'left') { popper.top += offsets[0]; popper.left -= offsets[1]; } else if (basePlacement === 'right') { popper.top += offsets[0]; popper.left += offsets[1]; } else if (basePlacement === 'top') { popper.left += offsets[0]; popper.top -= offsets[1]; } else if (basePlacement === 'bottom') { popper.left += offsets[0]; popper.top += offsets[1]; } data.popper = popper; return data; } /** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by `update` method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */ function preventOverflow(data, options) { var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper); // If offsetParent is the reference element, we really want to // go one step up and use the next offsetParent as reference to // avoid to make this modifier completely useless and look like broken if (data.instance.reference === boundariesElement) { boundariesElement = getOffsetParent(boundariesElement); } // NOTE: DOM access here // resets the popper's position so that the document size can be calculated excluding // the size of the popper element itself var transformProp = getSupportedPropertyName('transform'); var popperStyles = data.instance.popper.style; // assignment to help minification var top = popperStyles.top, left = popperStyles.left, transform = popperStyles[transformProp]; popperStyles.top = ''; popperStyles.left = ''; popperStyles[transformProp] = ''; var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed); // NOTE: DOM access here // restores the original style properties after the offsets have been computed popperStyles.top = top; popperStyles.left = left; popperStyles[transformProp] = transform; options.boundaries = boundaries; var order = options.priority; var popper = data.offsets.popper; var check = { primary: function primary(placement) { var value = popper[placement]; if (popper[placement] < boundaries[placement] && !options.escapeWithReference) { value = Math.max(popper[placement], boundaries[placement]); } return defineProperty({}, placement, value); }, secondary: function secondary(placement) { var mainSide = placement === 'right' ? 'left' : 'top'; var value = popper[mainSide]; if (popper[placement] > boundaries[placement] && !options.escapeWithReference) { value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height)); } return defineProperty({}, mainSide, value); } }; order.forEach(function (placement) { var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary'; popper = _extends({}, popper, check[side](placement)); }); data.offsets.popper = popper; return data; } /** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by `update` method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */ function shift(data) { var placement = data.placement; var basePlacement = placement.split('-')[0]; var shiftvariation = placement.split('-')[1]; // if shift shiftvariation is specified, run the modifier if (shiftvariation) { var _data$offsets = data.offsets, reference = _data$offsets.reference, popper = _data$offsets.popper; var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1; var side = isVertical ? 'left' : 'top'; var measurement = isVertical ? 'width' : 'height'; var shiftOffsets = { start: defineProperty({}, side, reference[side]), end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement]) }; data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]); } return data; } /** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by update method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */ function hide(data) { if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) { return data; } var refRect = data.offsets.reference; var bound = find(data.instance.modifiers, function (modifier) { return modifier.name === 'preventOverflow'; }).boundaries; if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) { // Avoid unnecessary DOM access if visibility hasn't changed if (data.hide === true) { return data; } data.hide = true; data.attributes['x-out-of-boundaries'] = ''; } else { // Avoid unnecessary DOM access if visibility hasn't changed if (data.hide === false) { return data; } data.hide = false; data.attributes['x-out-of-boundaries'] = false; } return data; } /** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by `update` method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */ function inner(data) { var placement = data.placement; var basePlacement = placement.split('-')[0]; var _data$offsets = data.offsets, popper = _data$offsets.popper, reference = _data$offsets.reference; var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1; var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1; popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0); data.placement = getOppositePlacement(placement); data.offsets.popper = getClientRect(popper); return data; } /** * Modifier function, each modifier can have a function of this type assigned * to its `fn` property.<br /> * These functions will be called on each update, this means that you must * make sure they are performant enough to avoid performance bottlenecks. * * @function ModifierFn * @argument {dataObject} data - The data object generated by `update` method * @argument {Object} options - Modifiers configuration and options * @returns {dataObject} The data object, properly modified */ /** * Modifiers are plugins used to alter the behavior of your poppers.<br /> * Popper.js uses a set of 9 modifiers to provide all the basic functionalities * needed by the library. * * Usually you don't want to override the `order`, `fn` and `onLoad` props. * All the other properties are configurations that could be tweaked. * @namespace modifiers */ var modifiers = { /** * Modifier used to shift the popper on the start or end of its reference * element.<br /> * It will read the variation of the `placement` property.<br /> * It can be one either `-end` or `-start`. * @memberof modifiers * @inner */ shift: { /** @prop {number} order=100 - Index used to define the order of execution */ order: 100, /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true, /** @prop {ModifierFn} */ fn: shift }, /** * The `offset` modifier can shift your popper on both its axis. * * It accepts the following units: * - `px` or unit-less, interpreted as pixels * - `%` or `%r`, percentage relative to the length of the reference element * - `%p`, percentage relative to the length of the popper element * - `vw`, CSS viewport width unit * - `vh`, CSS viewport height unit * * For length is intended the main axis relative to the placement of the popper.<br /> * This means that if the placement is `top` or `bottom`, the length will be the * `width`. In case of `left` or `right`, it will be the `height`. * * You can provide a single value (as `Number` or `String`), or a pair of values * as `String` divided by a comma or one (or more) white spaces.<br /> * The latter is a deprecated method because it leads to confusion and will be * removed in v2.<br /> * Additionally, it accepts additions and subtractions between different units. * Note that multiplications and divisions aren't supported. * * Valid examples are: * ``` * 10 * '10%' * '10, 10' * '10%, 10' * '10 + 10%' * '10 - 5vh + 3%' * '-10px + 5vh, 5px - 6%' * ``` * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap * > with their reference element, unfortunately, you will have to disable the `flip` modifier. * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373). * * @memberof modifiers * @inner */ offset: { /** @prop {number} order=200 - Index used to define the order of execution */ order: 200, /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true, /** @prop {ModifierFn} */ fn: offset, /** @prop {Number|String} offset=0 * The offset value as described in the modifier description */ offset: 0 }, /** * Modifier used to prevent the popper from being positioned outside the boundary. * * A scenario exists where the reference itself is not within the boundaries.<br /> * We can say it has "escaped the boundaries" — or just "escaped".<br /> * In this case we need to decide whether the popper should either: * * - detach from the reference and remain "trapped" in the boundaries, or * - if it should ignore the boundary and "escape with its reference" * * When `escapeWithReference` is set to`true` and reference is completely * outside its boundaries, the popper will overflow (or completely leave) * the boundaries in order to remain attached to the edge of the reference. * * @memberof modifiers * @inner */ preventOverflow: { /** @prop {number} order=300 - Index used to define the order of execution */ order: 300, /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true, /** @prop {ModifierFn} */ fn: preventOverflow, /** * @prop {Array} [priority=['left','right','top','bottom']] * Popper will try to prevent overflow following these priorities by default, * then, it could overflow on the left and on top of the `boundariesElement` */ priority: ['left', 'right', 'top', 'bottom'], /** * @prop {number} padding=5 * Amount of pixel used to define a minimum distance between the boundaries * and the popper. This makes sure the popper always has a little padding * between the edges of its container */ padding: 5, /** * @prop {String|HTMLElement} boundariesElement='scrollParent' * Boundaries used by the modifier. Can be `scrollParent`, `window`, * `viewport` or any DOM element. */ boundariesElement: 'scrollParent' }, /** * Modifier used to make sure the reference and its popper stay near each other * without leaving any gap between the two. Especially useful when the arrow is * enabled and you want to ensure that it points to its reference element. * It cares only about the first axis. You can still have poppers with margin * between the popper and its reference element. * @memberof modifiers * @inner */ keepTogether: { /** @prop {number} order=400 - Index used to define the order of execution */ order: 400, /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true, /** @prop {ModifierFn} */ fn: keepTogether }, /** * This modifier is used to move the `arrowElement` of the popper to make * sure it is positioned between the reference element and its popper element. * It will read the outer size of the `arrowElement` node to detect how many * pixels of conjunction are needed. * * It has no effect if no `arrowElement` is provided. * @memberof modifiers * @inner */ arrow: { /** @prop {number} order=500 - Index used to define the order of execution */ order: 500, /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true, /** @prop {ModifierFn} */ fn: arrow, /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */ element: '[x-arrow]' }, /** * Modifier used to flip the popper's placement when it starts to overlap its * reference element. * * Requires the `preventOverflow` modifier before it in order to work. * * **NOTE:** this modifier will interrupt the current update cycle and will * restart it if it detects the need to flip the placement. * @memberof modifiers * @inner */ flip: { /** @prop {number} order=600 - Index used to define the order of execution */ order: 600, /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true, /** @prop {ModifierFn} */ fn: flip, /** * @prop {String|Array} behavior='flip' * The behavior used to change the popper's placement. It can be one of * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid * placements (with optional variations) */ behavior: 'flip', /** * @prop {number} padding=5 * The popper will flip if it hits the edges of the `boundariesElement` */ padding: 5, /** * @prop {String|HTMLElement} boundariesElement='viewport' * The element which will define the boundaries of the popper position. * The popper will never be placed outside of the defined boundaries * (except if `keepTogether` is enabled) */ boundariesElement: 'viewport', /** * @prop {Boolean} flipVariations=false * The popper will switch placement variation between `-start` and `-end` when * the reference element overlaps its boundaries. * * The original placement should have a set variation. */ flipVariations: false, /** * @prop {Boolean} flipVariationsByContent=false * The popper will switch placement variation between `-start` and `-end` when * the popper element overlaps its reference boundaries. * * The original placement should have a set variation. */ flipVariationsByContent: false }, /** * Modifier used to make the popper flow toward the inner of the reference element. * By default, when this modifier is disabled, the popper will be placed outside * the reference element. * @memberof modifiers * @inner */ inner: { /** @prop {number} order=700 - Index used to define the order of execution */ order: 700, /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */ enabled: false, /** @prop {ModifierFn} */ fn: inner }, /** * Modifier used to hide the popper when its reference element is outside of the * popper boundaries. It will set a `x-out-of-boundaries` attribute which can * be used to hide with a CSS selector the popper when its reference is * out of boundaries. * * Requires the `preventOverflow` modifier before it in order to work. * @memberof modifiers * @inner */ hide: { /** @prop {number} order=800 - Index used to define the order of execution */ order: 800, /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true, /** @prop {ModifierFn} */ fn: hide }, /** * Computes the style that will be applied to the popper element to gets * properly positioned. * * Note that this modifier will not touch the DOM, it just prepares the styles * so that `applyStyle` modifier can apply it. This separation is useful * in case you need to replace `applyStyle` with a custom implementation. * * This modifier has `850` as `order` value to maintain backward compatibility * with previous versions of Popper.js. Expect the modifiers ordering method * to change in future major versions of the library. * * @memberof modifiers * @inner */ computeStyle: { /** @prop {number} order=850 - Index used to define the order of execution */ order: 850, /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true, /** @prop {ModifierFn} */ fn: computeStyle, /** * @prop {Boolean} gpuAcceleration=true * If true, it uses the CSS 3D transformation to position the popper. * Otherwise, it will use the `top` and `left` properties */ gpuAcceleration: true, /** * @prop {string} [x='bottom'] * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin. * Change this if your popper should grow in a direction different from `bottom` */ x: 'bottom', /** * @prop {string} [x='left'] * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin. * Change this if your popper should grow in a direction different from `right` */ y: 'right' }, /** * Applies the computed styles to the popper element. * * All the DOM manipulations are limited to this modifier. This is useful in case * you want to integrate Popper.js inside a framework or view library and you * want to delegate all the DOM manipulations to it. * * Note that if you disable this modifier, you must make sure the popper element * has its position set to `absolute` before Popper.js can do its work! * * Just disable this modifier and define your own to achieve the desired effect. * * @memberof modifiers * @inner */ applyStyle: { /** @prop {number} order=900 - Index used to define the order of execution */ order: 900, /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true, /** @prop {ModifierFn} */ fn: applyStyle, /** @prop {Function} */ onLoad: applyStyleOnLoad, /** * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier * @prop {Boolean} gpuAcceleration=true * If true, it uses the CSS 3D transformation to position the popper. * Otherwise, it will use the `top` and `left` properties */ gpuAcceleration: undefined } }; /** * The `dataObject` is an object containing all the information used by Popper.js. * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks. * @name dataObject * @property {Object} data.instance The Popper.js instance * @property {String} data.placement Placement applied to popper * @property {String} data.originalPlacement Placement originally defined on init * @property {Boolean} data.flipped True if popper has been flipped by flip modifier * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`) * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`) * @property {Object} data.boundaries Offsets of the popper boundaries * @property {Object} data.offsets The measurements of popper, reference and arrow elements * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0 */ /** * Default options provided to Popper.js constructor.<br /> * These can be overridden using the `options` argument of Popper.js.<br /> * To override an option, simply pass an object with the same * structure of the `options` object, as the 3rd argument. For example: * ``` * new Popper(ref, pop, { * modifiers: { * preventOverflow: { enabled: false } * } * }) * ``` * @type {Object} * @static * @memberof Popper */ var Defaults = { /** * Popper's placement. * @prop {Popper.placements} placement='bottom' */ placement: 'bottom', /** * Set this to true if you want popper to position it self in 'fixed' mode * @prop {Boolean} positionFixed=false */ positionFixed: false, /** * Whether events (resize, scroll) are initially enabled. * @prop {Boolean} eventsEnabled=true */ eventsEnabled: true, /** * Set to true if you want to automatically remove the popper when * you call the `destroy` method. * @prop {Boolean} removeOnDestroy=false */ removeOnDestroy: false, /** * Callback called when the popper is created.<br /> * By default, it is set to no-op.<br /> * Access Popper.js instance with `data.instance`. * @prop {onCreate} */ onCreate: function onCreate() {}, /** * Callback called when the popper is updated. This callback is not called * on the initialization/creation of the popper, but only on subsequent * updates.<br /> * By default, it is set to no-op.<br /> * Access Popper.js instance with `data.instance`. * @prop {onUpdate} */ onUpdate: function onUpdate() {}, /** * List of modifiers used to modify the offsets before they are applied to the popper. * They provide most of the functionalities of Popper.js. * @prop {modifiers} */ modifiers: modifiers }; /** * @callback onCreate * @param {dataObject} data */ /** * @callback onUpdate * @param {dataObject} data */ // Utils // Methods var Popper = function () { /** * Creates a new Popper.js instance. * @class Popper * @param {Element|referenceObject} reference - The reference element used to position the popper * @param {Element} popper - The HTML / XML element used as the popper * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults) * @return {Object} instance - The generated Popper.js instance */ function Popper(reference, popper) { var _this = this; var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; classCallCheck(this, Popper); this.scheduleUpdate = function () { return requestAnimationFrame(_this.update); }; // make update() debounced, so that it only runs at most once-per-tick this.update = debounce(this.update.bind(this)); // with {} we create a new object with the options inside it this.options = _extends({}, Popper.Defaults, options); // init state this.state = { isDestroyed: false, isCreated: false, scrollParents: [] }; // get reference and popper elements (allow jQuery wrappers) this.reference = reference && reference.jquery ? reference[0] : reference; this.popper = popper && popper.jquery ? popper[0] : popper; // Deep merge modifiers options this.options.modifiers = {}; Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) { _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {}); }); // Refactoring modifiers' list (Object => Array) this.modifiers = Object.keys(this.options.modifiers).map(function (name) { return _extends({ name: name }, _this.options.modifiers[name]); }) // sort the modifiers by order .sort(function (a, b) { return a.order - b.order; }); // modifiers have the ability to execute arbitrary code when Popper.js get inited // such code is executed in the same order of its modifier // they could add new properties to their options configuration // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`! this.modifiers.forEach(function (modifierOptions) { if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) { modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state); } }); // fire the first update to position the popper in the right place this.update(); var eventsEnabled = this.options.eventsEnabled; if (eventsEnabled) { // setup event listeners, they will take care of update the position in specific situations this.enableEventListeners(); } this.state.eventsEnabled = eventsEnabled; } // We can't use class properties because they don't get listed in the // class prototype and break stuff like Sinon stubs createClass(Popper, [{ key: 'update', value: function update$$1() { return update.call(this); } }, { key: 'destroy', value: function destroy$$1() { return destroy.call(this); } }, { key: 'enableEventListeners', value: function enableEventListeners$$1() { return enableEventListeners.call(this); } }, { key: 'disableEventListeners', value: function disableEventListeners$$1() { return disableEventListeners.call(this); } /** * Schedules an update. It will run on the next UI update available. * @method scheduleUpdate * @memberof Popper */ /** * Collection of utilities useful when writing custom modifiers. * Starting from version 1.7, this method is available only if you * include `popper-utils.js` before `popper.js`. * * **DEPRECATION**: This way to access PopperUtils is deprecated * and will be removed in v2! Use the PopperUtils module directly instead. * Due to the high instability of the methods contained in Utils, we can't * guarantee them to follow semver. Use them at your own risk! * @static * @private * @type {Object} * @deprecated since version 1.8 * @member Utils * @memberof Popper */ }]); return Popper; }(); /** * The `referenceObject` is an object that provides an interface compatible with Popper.js * and lets you use it as replacement of a real DOM node.<br /> * You can use this method to position a popper relatively to a set of coordinates * in case you don't have a DOM node to use as reference. * * ``` * new Popper(referenceObject, popperNode); * ``` * * NB: This feature isn't supported in Internet Explorer 10. * @name referenceObject * @property {Function} data.getBoundingClientRect * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method. * @property {number} data.clientWidth * An ES6 getter that will return the width of the virtual reference element. * @property {number} data.clientHeight * An ES6 getter that will return the height of the virtual reference element. */ Popper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils; Popper.placements = placements; Popper.Defaults = Defaults; return Popper; }))); //# sourceMappingURL=popper.js.map /** * -------------------------------------------------------------------------- * Bootstrap (v4.4.0): index.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * -------------------------------------------------------------------------- */ (function ($) { if (typeof $ === 'undefined') { throw new TypeError('Bootstrap\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\'s JavaScript.'); } var version = $.fn.jquery.split(' ')[0].split('.'); var minMajor = 1; var ltMajor = 2; var minMinor = 9; var minPatch = 1; var maxMajor = 4; if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) { throw new Error('Bootstrap\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0'); } })($); //# sourceMappingURL=index.js.map /*! * Bootstrap util.js v4.5.2 (https://getbootstrap.com/) * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery')) : typeof define === 'function' && define.amd ? define(['jquery'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Util = factory(global.jQuery)); }(this, (function ($) { 'use strict'; $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $; /** * -------------------------------------------------------------------------- * Bootstrap (v4.5.2): util.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ /** * ------------------------------------------------------------------------ * Private TransitionEnd Helpers * ------------------------------------------------------------------------ */ var TRANSITION_END = 'transitionend'; var MAX_UID = 1000000; var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp) function toType(obj) { if (obj === null || typeof obj === 'undefined') { return "" + obj; } return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase(); } function getSpecialTransitionEndEvent() { return { bindType: TRANSITION_END, delegateType: TRANSITION_END, handle: function handle(event) { if ($(event.target).is(this)) { return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params } return undefined; } }; } function transitionEndEmulator(duration) { var _this = this; var called = false; $(this).one(Util.TRANSITION_END, function () { called = true; }); setTimeout(function () { if (!called) { Util.triggerTransitionEnd(_this); } }, duration); return this; } function setTransitionEndSupport() { $.fn.emulateTransitionEnd = transitionEndEmulator; $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent(); } /** * -------------------------------------------------------------------------- * Public Util Api * -------------------------------------------------------------------------- */ var Util = { TRANSITION_END: 'bsTransitionEnd', getUID: function getUID(prefix) { do { // eslint-disable-next-line no-bitwise prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here } while (document.getElementById(prefix)); return prefix; }, getSelectorFromElement: function getSelectorFromElement(element) { var selector = element.getAttribute('data-target'); if (!selector || selector === '#') { var hrefAttr = element.getAttribute('href'); selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''; } try { return document.querySelector(selector) ? selector : null; } catch (err) { return null; } }, getTransitionDurationFromElement: function getTransitionDurationFromElement(element) { if (!element) { return 0; } // Get transition-duration of the element var transitionDuration = $(element).css('transition-duration'); var transitionDelay = $(element).css('transition-delay'); var floatTransitionDuration = parseFloat(transitionDuration); var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found if (!floatTransitionDuration && !floatTransitionDelay) { return 0; } // If multiple durations are defined, take the first transitionDuration = transitionDuration.split(',')[0]; transitionDelay = transitionDelay.split(',')[0]; return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER; }, reflow: function reflow(element) { return element.offsetHeight; }, triggerTransitionEnd: function triggerTransitionEnd(element) { $(element).trigger(TRANSITION_END); }, // TODO: Remove in v5 supportsTransitionEnd: function supportsTransitionEnd() { return Boolean(TRANSITION_END); }, isElement: function isElement(obj) { return (obj[0] || obj).nodeType; }, typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) { for (var property in configTypes) { if (Object.prototype.hasOwnProperty.call(configTypes, property)) { var expectedTypes = configTypes[property]; var value = config[property]; var valueType = value && Util.isElement(value) ? 'element' : toType(value); if (!new RegExp(expectedTypes).test(valueType)) { throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\".")); } } } }, findShadowRoot: function findShadowRoot(element) { if (!document.documentElement.attachShadow) { return null; } // Can find the shadow root otherwise it'll return the document if (typeof element.getRootNode === 'function') { var root = element.getRootNode(); return root instanceof ShadowRoot ? root : null; } if (element instanceof ShadowRoot) { return element; } // when we don't find a shadow root if (!element.parentNode) { return null; } return Util.findShadowRoot(element.parentNode); }, jQueryDetection: function jQueryDetection() { if (typeof $ === 'undefined') { throw new TypeError('Bootstrap\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\'s JavaScript.'); } var version = $.fn.jquery.split(' ')[0].split('.'); var minMajor = 1; var ltMajor = 2; var minMinor = 9; var minPatch = 1; var maxMajor = 4; if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) { throw new Error('Bootstrap\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0'); } } }; Util.jQueryDetection(); setTransitionEndSupport(); return Util; }))); //# sourceMappingURL=util.js.map /*! * Bootstrap tab.js v4.5.2 (https://getbootstrap.com/) * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) : typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Tab = factory(global.jQuery, global.Util)); }(this, (function ($, Util) { 'use strict'; $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $; Util = Util && Object.prototype.hasOwnProperty.call(Util, 'default') ? Util['default'] : Util; function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } /** * ------------------------------------------------------------------------ * Constants * ------------------------------------------------------------------------ */ var NAME = 'tab'; var VERSION = '4.5.2'; var DATA_KEY = 'bs.tab'; var EVENT_KEY = "." + DATA_KEY; var DATA_API_KEY = '.data-api'; var JQUERY_NO_CONFLICT = $.fn[NAME]; var EVENT_HIDE = "hide" + EVENT_KEY; var EVENT_HIDDEN = "hidden" + EVENT_KEY; var EVENT_SHOW = "show" + EVENT_KEY; var EVENT_SHOWN = "shown" + EVENT_KEY; var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY; var CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu'; var CLASS_NAME_ACTIVE = 'active'; var CLASS_NAME_DISABLED = 'disabled'; var CLASS_NAME_FADE = 'fade'; var CLASS_NAME_SHOW = 'show'; var SELECTOR_DROPDOWN = '.dropdown'; var SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'; var SELECTOR_ACTIVE = '.active'; var SELECTOR_ACTIVE_UL = '> li > .active'; var SELECTOR_DATA_TOGGLE = '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]'; var SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'; var SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active'; /** * ------------------------------------------------------------------------ * Class Definition * ------------------------------------------------------------------------ */ var Tab = /*#__PURE__*/function () { function Tab(element) { this._element = element; } // Getters var _proto = Tab.prototype; // Public _proto.show = function show() { var _this = this; if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(CLASS_NAME_ACTIVE) || $(this._element).hasClass(CLASS_NAME_DISABLED)) { return; } var target; var previous; var listElement = $(this._element).closest(SELECTOR_NAV_LIST_GROUP)[0]; var selector = Util.getSelectorFromElement(this._element); if (listElement) { var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE; previous = $.makeArray($(listElement).find(itemSelector)); previous = previous[previous.length - 1]; } var hideEvent = $.Event(EVENT_HIDE, { relatedTarget: this._element }); var showEvent = $.Event(EVENT_SHOW, { relatedTarget: previous }); if (previous) { $(previous).trigger(hideEvent); } $(this._element).trigger(showEvent); if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) { return; } if (selector) { target = document.querySelector(selector); } this._activate(this._element, listElement); var complete = function complete() { var hiddenEvent = $.Event(EVENT_HIDDEN, { relatedTarget: _this._element }); var shownEvent = $.Event(EVENT_SHOWN, { relatedTarget: previous }); $(previous).trigger(hiddenEvent); $(_this._element).trigger(shownEvent); }; if (target) { this._activate(target, target.parentNode, complete); } else { complete(); } }; _proto.dispose = function dispose() { $.removeData(this._element, DATA_KEY); this._element = null; } // Private ; _proto._activate = function _activate(element, container, callback) { var _this2 = this; var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $(container).find(SELECTOR_ACTIVE_UL) : $(container).children(SELECTOR_ACTIVE); var active = activeElements[0]; var isTransitioning = callback && active && $(active).hasClass(CLASS_NAME_FADE); var complete = function complete() { return _this2._transitionComplete(element, active, callback); }; if (active && isTransitioning) { var transitionDuration = Util.getTransitionDurationFromElement(active); $(active).removeClass(CLASS_NAME_SHOW).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); } else { complete(); } }; _proto._transitionComplete = function _transitionComplete(element, active, callback) { if (active) { $(active).removeClass(CLASS_NAME_ACTIVE); var dropdownChild = $(active.parentNode).find(SELECTOR_DROPDOWN_ACTIVE_CHILD)[0]; if (dropdownChild) { $(dropdownChild).removeClass(CLASS_NAME_ACTIVE); } if (active.getAttribute('role') === 'tab') { active.setAttribute('aria-selected', false); } } $(element).addClass(CLASS_NAME_ACTIVE); if (element.getAttribute('role') === 'tab') { element.setAttribute('aria-selected', true); } Util.reflow(element); if (element.classList.contains(CLASS_NAME_FADE)) { element.classList.add(CLASS_NAME_SHOW); } if (element.parentNode && $(element.parentNode).hasClass(CLASS_NAME_DROPDOWN_MENU)) { var dropdownElement = $(element).closest(SELECTOR_DROPDOWN)[0]; if (dropdownElement) { var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE)); $(dropdownToggleList).addClass(CLASS_NAME_ACTIVE); } element.setAttribute('aria-expanded', true); } if (callback) { callback(); } } // Static ; Tab._jQueryInterface = function _jQueryInterface(config) { return this.each(function () { var $this = $(this); var data = $this.data(DATA_KEY); if (!data) { data = new Tab(this); $this.data(DATA_KEY, data); } if (typeof config === 'string') { if (typeof data[config] === 'undefined') { throw new TypeError("No method named \"" + config + "\""); } data[config](); } }); }; _createClass(Tab, null, [{ key: "VERSION", get: function get() { return VERSION; } }]); return Tab; }(); /** * ------------------------------------------------------------------------ * Data Api implementation * ------------------------------------------------------------------------ */ $(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) { event.preventDefault(); Tab._jQueryInterface.call($(this), 'show'); }); /** * ------------------------------------------------------------------------ * jQuery * ------------------------------------------------------------------------ */ $.fn[NAME] = Tab._jQueryInterface; $.fn[NAME].Constructor = Tab; $.fn[NAME].noConflict = function () { $.fn[NAME] = JQUERY_NO_CONFLICT; return Tab._jQueryInterface; }; return Tab; }))); //# sourceMappingURL=tab.js.map /*! * Bootstrap collapse.js v4.5.2 (https://getbootstrap.com/) * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) : typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Collapse = factory(global.jQuery, global.Util)); }(this, (function ($, Util) { 'use strict'; $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $; Util = Util && Object.prototype.hasOwnProperty.call(Util, 'default') ? Util['default'] : Util; function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } /** * ------------------------------------------------------------------------ * Constants * ------------------------------------------------------------------------ */ var NAME = 'collapse'; var VERSION = '4.5.2'; var DATA_KEY = 'bs.collapse'; var EVENT_KEY = "." + DATA_KEY; var DATA_API_KEY = '.data-api'; var JQUERY_NO_CONFLICT = $.fn[NAME]; var Default = { toggle: true, parent: '' }; var DefaultType = { toggle: 'boolean', parent: '(string|element)' }; var EVENT_SHOW = "show" + EVENT_KEY; var EVENT_SHOWN = "shown" + EVENT_KEY; var EVENT_HIDE = "hide" + EVENT_KEY; var EVENT_HIDDEN = "hidden" + EVENT_KEY; var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY; var CLASS_NAME_SHOW = 'show'; var CLASS_NAME_COLLAPSE = 'collapse'; var CLASS_NAME_COLLAPSING = 'collapsing'; var CLASS_NAME_COLLAPSED = 'collapsed'; var DIMENSION_WIDTH = 'width'; var DIMENSION_HEIGHT = 'height'; var SELECTOR_ACTIVES = '.show, .collapsing'; var SELECTOR_DATA_TOGGLE = '[data-toggle="collapse"]'; /** * ------------------------------------------------------------------------ * Class Definition * ------------------------------------------------------------------------ */ var Collapse = /*#__PURE__*/function () { function Collapse(element, config) { this._isTransitioning = false; this._element = element; this._config = this._getConfig(config); this._triggerArray = [].slice.call(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]"))); var toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE)); for (var i = 0, len = toggleList.length; i < len; i++) { var elem = toggleList[i]; var selector = Util.getSelectorFromElement(elem); var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) { return foundElem === element; }); if (selector !== null && filterElement.length > 0) { this._selector = selector; this._triggerArray.push(elem); } } this._parent = this._config.parent ? this._getParent() : null; if (!this._config.parent) { this._addAriaAndCollapsedClass(this._element, this._triggerArray); } if (this._config.toggle) { this.toggle(); } } // Getters var _proto = Collapse.prototype; // Public _proto.toggle = function toggle() { if ($(this._element).hasClass(CLASS_NAME_SHOW)) { this.hide(); } else { this.show(); } }; _proto.show = function show() { var _this = this; if (this._isTransitioning || $(this._element).hasClass(CLASS_NAME_SHOW)) { return; } var actives; var activesData; if (this._parent) { actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES)).filter(function (elem) { if (typeof _this._config.parent === 'string') { return elem.getAttribute('data-parent') === _this._config.parent; } return elem.classList.contains(CLASS_NAME_COLLAPSE); }); if (actives.length === 0) { actives = null; } } if (actives) { activesData = $(actives).not(this._selector).data(DATA_KEY); if (activesData && activesData._isTransitioning) { return; } } var startEvent = $.Event(EVENT_SHOW); $(this._element).trigger(startEvent); if (startEvent.isDefaultPrevented()) { return; } if (actives) { Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide'); if (!activesData) { $(actives).data(DATA_KEY, null); } } var dimension = this._getDimension(); $(this._element).removeClass(CLASS_NAME_COLLAPSE).addClass(CLASS_NAME_COLLAPSING); this._element.style[dimension] = 0; if (this._triggerArray.length) { $(this._triggerArray).removeClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', true); } this.setTransitioning(true); var complete = function complete() { $(_this._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW); _this._element.style[dimension] = ''; _this.setTransitioning(false); $(_this._element).trigger(EVENT_SHOWN); }; var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); var scrollSize = "scroll" + capitalizedDimension; var transitionDuration = Util.getTransitionDurationFromElement(this._element); $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); this._element.style[dimension] = this._element[scrollSize] + "px"; }; _proto.hide = function hide() { var _this2 = this; if (this._isTransitioning || !$(this._element).hasClass(CLASS_NAME_SHOW)) { return; } var startEvent = $.Event(EVENT_HIDE); $(this._element).trigger(startEvent); if (startEvent.isDefaultPrevented()) { return; } var dimension = this._getDimension(); this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px"; Util.reflow(this._element); $(this._element).addClass(CLASS_NAME_COLLAPSING).removeClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW); var triggerArrayLength = this._triggerArray.length; if (triggerArrayLength > 0) { for (var i = 0; i < triggerArrayLength; i++) { var trigger = this._triggerArray[i]; var selector = Util.getSelectorFromElement(trigger); if (selector !== null) { var $elem = $([].slice.call(document.querySelectorAll(selector))); if (!$elem.hasClass(CLASS_NAME_SHOW)) { $(trigger).addClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', false); } } } } this.setTransitioning(true); var complete = function complete() { _this2.setTransitioning(false); $(_this2._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE).trigger(EVENT_HIDDEN); }; this._element.style[dimension] = ''; var transitionDuration = Util.getTransitionDurationFromElement(this._element); $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); }; _proto.setTransitioning = function setTransitioning(isTransitioning) { this._isTransitioning = isTransitioning; }; _proto.dispose = function dispose() { $.removeData(this._element, DATA_KEY); this._config = null; this._parent = null; this._element = null; this._triggerArray = null; this._isTransitioning = null; } // Private ; _proto._getConfig = function _getConfig(config) { config = _extends({}, Default, config); config.toggle = Boolean(config.toggle); // Coerce string values Util.typeCheckConfig(NAME, config, DefaultType); return config; }; _proto._getDimension = function _getDimension() { var hasWidth = $(this._element).hasClass(DIMENSION_WIDTH); return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT; }; _proto._getParent = function _getParent() { var _this3 = this; var parent; if (Util.isElement(this._config.parent)) { parent = this._config.parent; // It's a jQuery object if (typeof this._config.parent.jquery !== 'undefined') { parent = this._config.parent[0]; } } else { parent = document.querySelector(this._config.parent); } var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]"; var children = [].slice.call(parent.querySelectorAll(selector)); $(children).each(function (i, element) { _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]); }); return parent; }; _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) { var isOpen = $(element).hasClass(CLASS_NAME_SHOW); if (triggerArray.length) { $(triggerArray).toggleClass(CLASS_NAME_COLLAPSED, !isOpen).attr('aria-expanded', isOpen); } } // Static ; Collapse._getTargetFromElement = function _getTargetFromElement(element) { var selector = Util.getSelectorFromElement(element); return selector ? document.querySelector(selector) : null; }; Collapse._jQueryInterface = function _jQueryInterface(config) { return this.each(function () { var $this = $(this); var data = $this.data(DATA_KEY); var _config = _extends({}, Default, $this.data(), typeof config === 'object' && config ? config : {}); if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) { _config.toggle = false; } if (!data) { data = new Collapse(this, _config); $this.data(DATA_KEY, data); } if (typeof config === 'string') { if (typeof data[config] === 'undefined') { throw new TypeError("No method named \"" + config + "\""); } data[config](); } }); }; _createClass(Collapse, null, [{ key: "VERSION", get: function get() { return VERSION; } }, { key: "Default", get: function get() { return Default; } }]); return Collapse; }(); /** * ------------------------------------------------------------------------ * Data Api implementation * ------------------------------------------------------------------------ */ $(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) { // preventDefault only for <a> elements (which change the URL) not inside the collapsible element if (event.currentTarget.tagName === 'A') { event.preventDefault(); } var $trigger = $(this); var selector = Util.getSelectorFromElement(this); var selectors = [].slice.call(document.querySelectorAll(selector)); $(selectors).each(function () { var $target = $(this); var data = $target.data(DATA_KEY); var config = data ? 'toggle' : $trigger.data(); Collapse._jQueryInterface.call($target, config); }); }); /** * ------------------------------------------------------------------------ * jQuery * ------------------------------------------------------------------------ */ $.fn[NAME] = Collapse._jQueryInterface; $.fn[NAME].Constructor = Collapse; $.fn[NAME].noConflict = function () { $.fn[NAME] = JQUERY_NO_CONFLICT; return Collapse._jQueryInterface; }; return Collapse; }))); //# sourceMappingURL=collapse.js.map /*! * Bootstrap dropdown.js v4.5.2 (https://getbootstrap.com/) * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('popper.js'), require('./util.js')) : typeof define === 'function' && define.amd ? define(['jquery', 'popper.js', './util.js'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Dropdown = factory(global.jQuery, global.Popper, global.Util)); }(this, (function ($, Popper, Util) { 'use strict'; $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $; Popper = Popper && Object.prototype.hasOwnProperty.call(Popper, 'default') ? Popper['default'] : Popper; Util = Util && Object.prototype.hasOwnProperty.call(Util, 'default') ? Util['default'] : Util; function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } /** * ------------------------------------------------------------------------ * Constants * ------------------------------------------------------------------------ */ var NAME = 'dropdown'; var VERSION = '4.5.2'; var DATA_KEY = 'bs.dropdown'; var EVENT_KEY = "." + DATA_KEY; var DATA_API_KEY = '.data-api'; var JQUERY_NO_CONFLICT = $.fn[NAME]; var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse) var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE); var EVENT_HIDE = "hide" + EVENT_KEY; var EVENT_HIDDEN = "hidden" + EVENT_KEY; var EVENT_SHOW = "show" + EVENT_KEY; var EVENT_SHOWN = "shown" + EVENT_KEY; var EVENT_CLICK = "click" + EVENT_KEY; var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY; var EVENT_KEYDOWN_DATA_API = "keydown" + EVENT_KEY + DATA_API_KEY; var EVENT_KEYUP_DATA_API = "keyup" + EVENT_KEY + DATA_API_KEY; var CLASS_NAME_DISABLED = 'disabled'; var CLASS_NAME_SHOW = 'show'; var CLASS_NAME_DROPUP = 'dropup'; var CLASS_NAME_DROPRIGHT = 'dropright'; var CLASS_NAME_DROPLEFT = 'dropleft'; var CLASS_NAME_MENURIGHT = 'dropdown-menu-right'; var CLASS_NAME_POSITION_STATIC = 'position-static'; var SELECTOR_DATA_TOGGLE = '[data-toggle="dropdown"]'; var SELECTOR_FORM_CHILD = '.dropdown form'; var SELECTOR_MENU = '.dropdown-menu'; var SELECTOR_NAVBAR_NAV = '.navbar-nav'; var SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'; var PLACEMENT_TOP = 'top-start'; var PLACEMENT_TOPEND = 'top-end'; var PLACEMENT_BOTTOM = 'bottom-start'; var PLACEMENT_BOTTOMEND = 'bottom-end'; var PLACEMENT_RIGHT = 'right-start'; var PLACEMENT_LEFT = 'left-start'; var Default = { offset: 0, flip: true, boundary: 'scrollParent', reference: 'toggle', display: 'dynamic', popperConfig: null }; var DefaultType = { offset: '(number|string|function)', flip: 'boolean', boundary: '(string|element)', reference: '(string|element)', display: 'string', popperConfig: '(null|object)' }; /** * ------------------------------------------------------------------------ * Class Definition * ------------------------------------------------------------------------ */ var Dropdown = /*#__PURE__*/function () { function Dropdown(element, config) { this._element = element; this._popper = null; this._config = this._getConfig(config); this._menu = this._getMenuElement(); this._inNavbar = this._detectNavbar(); this._addEventListeners(); } // Getters var _proto = Dropdown.prototype; // Public _proto.toggle = function toggle() { if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED)) { return; } var isActive = $(this._menu).hasClass(CLASS_NAME_SHOW); Dropdown._clearMenus(); if (isActive) { return; } this.show(true); }; _proto.show = function show(usePopper) { if (usePopper === void 0) { usePopper = false; } if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || $(this._menu).hasClass(CLASS_NAME_SHOW)) { return; } var relatedTarget = { relatedTarget: this._element }; var showEvent = $.Event(EVENT_SHOW, relatedTarget); var parent = Dropdown._getParentFromElement(this._element); $(parent).trigger(showEvent); if (showEvent.isDefaultPrevented()) { return; } // Disable totally Popper.js for Dropdown in Navbar if (!this._inNavbar && usePopper) { /** * Check for Popper dependency * Popper - https://popper.js.org */ if (typeof Popper === 'undefined') { throw new TypeError('Bootstrap\'s dropdowns require Popper.js (https://popper.js.org/)'); } var referenceElement = this._element; if (this._config.reference === 'parent') { referenceElement = parent; } else if (Util.isElement(this._config.reference)) { referenceElement = this._config.reference; // Check if it's jQuery element if (typeof this._config.reference.jquery !== 'undefined') { referenceElement = this._config.reference[0]; } } // If boundary is not `scrollParent`, then set position to `static` // to allow the menu to "escape" the scroll parent's boundaries // https://github.com/twbs/bootstrap/issues/24251 if (this._config.boundary !== 'scrollParent') { $(parent).addClass(CLASS_NAME_POSITION_STATIC); } this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig()); } // If this is a touch-enabled device we add extra // empty mouseover listeners to the body's immediate children; // only needed because of broken event delegation on iOS // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html if ('ontouchstart' in document.documentElement && $(parent).closest(SELECTOR_NAVBAR_NAV).length === 0) { $(document.body).children().on('mouseover', null, $.noop); } this._element.focus(); this._element.setAttribute('aria-expanded', true); $(this._menu).toggleClass(CLASS_NAME_SHOW); $(parent).toggleClass(CLASS_NAME_SHOW).trigger($.Event(EVENT_SHOWN, relatedTarget)); }; _proto.hide = function hide() { if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || !$(this._menu).hasClass(CLASS_NAME_SHOW)) { return; } var relatedTarget = { relatedTarget: this._element }; var hideEvent = $.Event(EVENT_HIDE, relatedTarget); var parent = Dropdown._getParentFromElement(this._element); $(parent).trigger(hideEvent); if (hideEvent.isDefaultPrevented()) { return; } if (this._popper) { this._popper.destroy(); } $(this._menu).toggleClass(CLASS_NAME_SHOW); $(parent).toggleClass(CLASS_NAME_SHOW).trigger($.Event(EVENT_HIDDEN, relatedTarget)); }; _proto.dispose = function dispose() { $.removeData(this._element, DATA_KEY); $(this._element).off(EVENT_KEY); this._element = null; this._menu = null; if (this._popper !== null) { this._popper.destroy(); this._popper = null; } }; _proto.update = function update() { this._inNavbar = this._detectNavbar(); if (this._popper !== null) { this._popper.scheduleUpdate(); } } // Private ; _proto._addEventListeners = function _addEventListeners() { var _this = this; $(this._element).on(EVENT_CLICK, function (event) { event.preventDefault(); event.stopPropagation(); _this.toggle(); }); }; _proto._getConfig = function _getConfig(config) { config = _extends({}, this.constructor.Default, $(this._element).data(), config); Util.typeCheckConfig(NAME, config, this.constructor.DefaultType); return config; }; _proto._getMenuElement = function _getMenuElement() { if (!this._menu) { var parent = Dropdown._getParentFromElement(this._element); if (parent) { this._menu = parent.querySelector(SELECTOR_MENU); } } return this._menu; }; _proto._getPlacement = function _getPlacement() { var $parentDropdown = $(this._element.parentNode); var placement = PLACEMENT_BOTTOM; // Handle dropup if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) { placement = $(this._menu).hasClass(CLASS_NAME_MENURIGHT) ? PLACEMENT_TOPEND : PLACEMENT_TOP; } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) { placement = PLACEMENT_RIGHT; } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) { placement = PLACEMENT_LEFT; } else if ($(this._menu).hasClass(CLASS_NAME_MENURIGHT)) { placement = PLACEMENT_BOTTOMEND; } return placement; }; _proto._detectNavbar = function _detectNavbar() { return $(this._element).closest('.navbar').length > 0; }; _proto._getOffset = function _getOffset() { var _this2 = this; var offset = {}; if (typeof this._config.offset === 'function') { offset.fn = function (data) { data.offsets = _extends({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {}); return data; }; } else { offset.offset = this._config.offset; } return offset; }; _proto._getPopperConfig = function _getPopperConfig() { var popperConfig = { placement: this._getPlacement(), modifiers: { offset: this._getOffset(), flip: { enabled: this._config.flip }, preventOverflow: { boundariesElement: this._config.boundary } } }; // Disable Popper.js if we have a static display if (this._config.display === 'static') { popperConfig.modifiers.applyStyle = { enabled: false }; } return _extends({}, popperConfig, this._config.popperConfig); } // Static ; Dropdown._jQueryInterface = function _jQueryInterface(config) { return this.each(function () { var data = $(this).data(DATA_KEY); var _config = typeof config === 'object' ? config : null; if (!data) { data = new Dropdown(this, _config); $(this).data(DATA_KEY, data); } if (typeof config === 'string') { if (typeof data[config] === 'undefined') { throw new TypeError("No method named \"" + config + "\""); } data[config](); } }); }; Dropdown._clearMenus = function _clearMenus(event) { if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) { return; } var toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE)); for (var i = 0, len = toggles.length; i < len; i++) { var parent = Dropdown._getParentFromElement(toggles[i]); var context = $(toggles[i]).data(DATA_KEY); var relatedTarget = { relatedTarget: toggles[i] }; if (event && event.type === 'click') { relatedTarget.clickEvent = event; } if (!context) { continue; } var dropdownMenu = context._menu; if (!$(parent).hasClass(CLASS_NAME_SHOW)) { continue; } if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $.contains(parent, event.target)) { continue; } var hideEvent = $.Event(EVENT_HIDE, relatedTarget); $(parent).trigger(hideEvent); if (hideEvent.isDefaultPrevented()) { continue; } // If this is a touch-enabled device we remove the extra // empty mouseover listeners we added for iOS support if ('ontouchstart' in document.documentElement) { $(document.body).children().off('mouseover', null, $.noop); } toggles[i].setAttribute('aria-expanded', 'false'); if (context._popper) { context._popper.destroy(); } $(dropdownMenu).removeClass(CLASS_NAME_SHOW); $(parent).removeClass(CLASS_NAME_SHOW).trigger($.Event(EVENT_HIDDEN, relatedTarget)); } }; Dropdown._getParentFromElement = function _getParentFromElement(element) { var parent; var selector = Util.getSelectorFromElement(element); if (selector) { parent = document.querySelector(selector); } return parent || element.parentNode; } // eslint-disable-next-line complexity ; Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) { // If not input/textarea: // - And not a key in REGEXP_KEYDOWN => not a dropdown command // If input/textarea: // - If space key => not a dropdown command // - If key is other than escape // - If key is not up or down => not a dropdown command // - If trigger inside the menu => not a dropdown command if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) { return; } if (this.disabled || $(this).hasClass(CLASS_NAME_DISABLED)) { return; } var parent = Dropdown._getParentFromElement(this); var isActive = $(parent).hasClass(CLASS_NAME_SHOW); if (!isActive && event.which === ESCAPE_KEYCODE) { return; } event.preventDefault(); event.stopPropagation(); if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) { if (event.which === ESCAPE_KEYCODE) { $(parent.querySelector(SELECTOR_DATA_TOGGLE)).trigger('focus'); } $(this).trigger('click'); return; } var items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS)).filter(function (item) { return $(item).is(':visible'); }); if (items.length === 0) { return; } var index = items.indexOf(event.target); if (event.which === ARROW_UP_KEYCODE && index > 0) { // Up index--; } if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { // Down index++; } if (index < 0) { index = 0; } items[index].focus(); }; _createClass(Dropdown, null, [{ key: "VERSION", get: function get() { return VERSION; } }, { key: "Default", get: function get() { return Default; } }, { key: "DefaultType", get: function get() { return DefaultType; } }]); return Dropdown; }(); /** * ------------------------------------------------------------------------ * Data Api implementation * ------------------------------------------------------------------------ */ $(document).on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler).on(EVENT_CLICK_DATA_API + " " + EVENT_KEYUP_DATA_API, Dropdown._clearMenus).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) { event.preventDefault(); event.stopPropagation(); Dropdown._jQueryInterface.call($(this), 'toggle'); }).on(EVENT_CLICK_DATA_API, SELECTOR_FORM_CHILD, function (e) { e.stopPropagation(); }); /** * ------------------------------------------------------------------------ * jQuery * ------------------------------------------------------------------------ */ $.fn[NAME] = Dropdown._jQueryInterface; $.fn[NAME].Constructor = Dropdown; $.fn[NAME].noConflict = function () { $.fn[NAME] = JQUERY_NO_CONFLICT; return Dropdown._jQueryInterface; }; return Dropdown; }))); //# sourceMappingURL=dropdown.js.map /*! * Bootstrap tooltip.js v4.5.2 (https://getbootstrap.com/) * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('popper.js'), require('./util.js')) : typeof define === 'function' && define.amd ? define(['jquery', 'popper.js', './util.js'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Tooltip = factory(global.jQuery, global.Popper, global.Util)); }(this, (function ($, Popper, Util) { 'use strict'; $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $; Popper = Popper && Object.prototype.hasOwnProperty.call(Popper, 'default') ? Popper['default'] : Popper; Util = Util && Object.prototype.hasOwnProperty.call(Util, 'default') ? Util['default'] : Util; /** * -------------------------------------------------------------------------- * Bootstrap (v4.5.2): tools/sanitizer.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']; var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i; var DefaultWhitelist = { // Global attributes allowed on any supplied element below. '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN], a: ['target', 'href', 'title', 'rel'], area: [], b: [], br: [], col: [], code: [], div: [], em: [], hr: [], h1: [], h2: [], h3: [], h4: [], h5: [], h6: [], i: [], img: ['src', 'srcset', 'alt', 'title', 'width', 'height'], li: [], ol: [], p: [], pre: [], s: [], small: [], span: [], sub: [], sup: [], strong: [], u: [], ul: [] }; /** * A pattern that recognizes a commonly useful subset of URLs that are safe. * * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts */ var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi; /** * A pattern that matches safe data URLs. Only matches image, video and audio types. * * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts */ var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i; function allowedAttribute(attr, allowedAttributeList) { var attrName = attr.nodeName.toLowerCase(); if (allowedAttributeList.indexOf(attrName) !== -1) { if (uriAttrs.indexOf(attrName) !== -1) { return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN)); } return true; } var regExp = allowedAttributeList.filter(function (attrRegex) { return attrRegex instanceof RegExp; }); // Check if a regular expression validates the attribute. for (var i = 0, len = regExp.length; i < len; i++) { if (attrName.match(regExp[i])) { return true; } } return false; } function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) { if (unsafeHtml.length === 0) { return unsafeHtml; } if (sanitizeFn && typeof sanitizeFn === 'function') { return sanitizeFn(unsafeHtml); } var domParser = new window.DOMParser(); var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html'); var whitelistKeys = Object.keys(whiteList); var elements = [].slice.call(createdDocument.body.querySelectorAll('*')); var _loop = function _loop(i, len) { var el = elements[i]; var elName = el.nodeName.toLowerCase(); if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) { el.parentNode.removeChild(el); return "continue"; } var attributeList = [].slice.call(el.attributes); var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []); attributeList.forEach(function (attr) { if (!allowedAttribute(attr, whitelistedAttributes)) { el.removeAttribute(attr.nodeName); } }); }; for (var i = 0, len = elements.length; i < len; i++) { var _ret = _loop(i); if (_ret === "continue") continue; } return createdDocument.body.innerHTML; } function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } /** * ------------------------------------------------------------------------ * Constants * ------------------------------------------------------------------------ */ var NAME = 'tooltip'; var VERSION = '4.5.2'; var DATA_KEY = 'bs.tooltip'; var EVENT_KEY = "." + DATA_KEY; var JQUERY_NO_CONFLICT = $.fn[NAME]; var CLASS_PREFIX = 'bs-tooltip'; var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']; var DefaultType = { animation: 'boolean', template: 'string', title: '(string|element|function)', trigger: 'string', delay: '(number|object)', html: 'boolean', selector: '(string|boolean)', placement: '(string|function)', offset: '(number|string|function)', container: '(string|element|boolean)', fallbackPlacement: '(string|array)', boundary: '(string|element)', sanitize: 'boolean', sanitizeFn: '(null|function)', whiteList: 'object', popperConfig: '(null|object)' }; var AttachmentMap = { AUTO: 'auto', TOP: 'top', RIGHT: 'right', BOTTOM: 'bottom', LEFT: 'left' }; var Default = { animation: true, template: '<div class="tooltip" role="tooltip">' + '<div class="arrow"></div>' + '<div class="tooltip-inner"></div></div>', trigger: 'hover focus', title: '', delay: 0, html: false, selector: false, placement: 'top', offset: 0, container: false, fallbackPlacement: 'flip', boundary: 'scrollParent', sanitize: true, sanitizeFn: null, whiteList: DefaultWhitelist, popperConfig: null }; var HOVER_STATE_SHOW = 'show'; var HOVER_STATE_OUT = 'out'; var Event = { HIDE: "hide" + EVENT_KEY, HIDDEN: "hidden" + EVENT_KEY, SHOW: "show" + EVENT_KEY, SHOWN: "shown" + EVENT_KEY, INSERTED: "inserted" + EVENT_KEY, CLICK: "click" + EVENT_KEY, FOCUSIN: "focusin" + EVENT_KEY, FOCUSOUT: "focusout" + EVENT_KEY, MOUSEENTER: "mouseenter" + EVENT_KEY, MOUSELEAVE: "mouseleave" + EVENT_KEY }; var CLASS_NAME_FADE = 'fade'; var CLASS_NAME_SHOW = 'show'; var SELECTOR_TOOLTIP_INNER = '.tooltip-inner'; var SELECTOR_ARROW = '.arrow'; var TRIGGER_HOVER = 'hover'; var TRIGGER_FOCUS = 'focus'; var TRIGGER_CLICK = 'click'; var TRIGGER_MANUAL = 'manual'; /** * ------------------------------------------------------------------------ * Class Definition * ------------------------------------------------------------------------ */ var Tooltip = /*#__PURE__*/function () { function Tooltip(element, config) { if (typeof Popper === 'undefined') { throw new TypeError('Bootstrap\'s tooltips require Popper.js (https://popper.js.org/)'); } // private this._isEnabled = true; this._timeout = 0; this._hoverState = ''; this._activeTrigger = {}; this._popper = null; // Protected this.element = element; this.config = this._getConfig(config); this.tip = null; this._setListeners(); } // Getters var _proto = Tooltip.prototype; // Public _proto.enable = function enable() { this._isEnabled = true; }; _proto.disable = function disable() { this._isEnabled = false; }; _proto.toggleEnabled = function toggleEnabled() { this._isEnabled = !this._isEnabled; }; _proto.toggle = function toggle(event) { if (!this._isEnabled) { return; } if (event) { var dataKey = this.constructor.DATA_KEY; var context = $(event.currentTarget).data(dataKey); if (!context) { context = new this.constructor(event.currentTarget, this._getDelegateConfig()); $(event.currentTarget).data(dataKey, context); } context._activeTrigger.click = !context._activeTrigger.click; if (context._isWithActiveTrigger()) { context._enter(null, context); } else { context._leave(null, context); } } else { if ($(this.getTipElement()).hasClass(CLASS_NAME_SHOW)) { this._leave(null, this); return; } this._enter(null, this); } }; _proto.dispose = function dispose() { clearTimeout(this._timeout); $.removeData(this.element, this.constructor.DATA_KEY); $(this.element).off(this.constructor.EVENT_KEY); $(this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler); if (this.tip) { $(this.tip).remove(); } this._isEnabled = null; this._timeout = null; this._hoverState = null; this._activeTrigger = null; if (this._popper) { this._popper.destroy(); } this._popper = null; this.element = null; this.config = null; this.tip = null; }; _proto.show = function show() { var _this = this; if ($(this.element).css('display') === 'none') { throw new Error('Please use show on visible elements'); } var showEvent = $.Event(this.constructor.Event.SHOW); if (this.isWithContent() && this._isEnabled) { $(this.element).trigger(showEvent); var shadowRoot = Util.findShadowRoot(this.element); var isInTheDom = $.contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element); if (showEvent.isDefaultPrevented() || !isInTheDom) { return; } var tip = this.getTipElement(); var tipId = Util.getUID(this.constructor.NAME); tip.setAttribute('id', tipId); this.element.setAttribute('aria-describedby', tipId); this.setContent(); if (this.config.animation) { $(tip).addClass(CLASS_NAME_FADE); } var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement; var attachment = this._getAttachment(placement); this.addAttachmentClass(attachment); var container = this._getContainer(); $(tip).data(this.constructor.DATA_KEY, this); if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) { $(tip).appendTo(container); } $(this.element).trigger(this.constructor.Event.INSERTED); this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment)); $(tip).addClass(CLASS_NAME_SHOW); // If this is a touch-enabled device we add extra // empty mouseover listeners to the body's immediate children; // only needed because of broken event delegation on iOS // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html if ('ontouchstart' in document.documentElement) { $(document.body).children().on('mouseover', null, $.noop); } var complete = function complete() { if (_this.config.animation) { _this._fixTransition(); } var prevHoverState = _this._hoverState; _this._hoverState = null; $(_this.element).trigger(_this.constructor.Event.SHOWN); if (prevHoverState === HOVER_STATE_OUT) { _this._leave(null, _this); } }; if ($(this.tip).hasClass(CLASS_NAME_FADE)) { var transitionDuration = Util.getTransitionDurationFromElement(this.tip); $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); } else { complete(); } } }; _proto.hide = function hide(callback) { var _this2 = this; var tip = this.getTipElement(); var hideEvent = $.Event(this.constructor.Event.HIDE); var complete = function complete() { if (_this2._hoverState !== HOVER_STATE_SHOW && tip.parentNode) { tip.parentNode.removeChild(tip); } _this2._cleanTipClass(); _this2.element.removeAttribute('aria-describedby'); $(_this2.element).trigger(_this2.constructor.Event.HIDDEN); if (_this2._popper !== null) { _this2._popper.destroy(); } if (callback) { callback(); } }; $(this.element).trigger(hideEvent); if (hideEvent.isDefaultPrevented()) { return; } $(tip).removeClass(CLASS_NAME_SHOW); // If this is a touch-enabled device we remove the extra // empty mouseover listeners we added for iOS support if ('ontouchstart' in document.documentElement) { $(document.body).children().off('mouseover', null, $.noop); } this._activeTrigger[TRIGGER_CLICK] = false; this._activeTrigger[TRIGGER_FOCUS] = false; this._activeTrigger[TRIGGER_HOVER] = false; if ($(this.tip).hasClass(CLASS_NAME_FADE)) { var transitionDuration = Util.getTransitionDurationFromElement(tip); $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); } else { complete(); } this._hoverState = ''; }; _proto.update = function update() { if (this._popper !== null) { this._popper.scheduleUpdate(); } } // Protected ; _proto.isWithContent = function isWithContent() { return Boolean(this.getTitle()); }; _proto.addAttachmentClass = function addAttachmentClass(attachment) { $(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment); }; _proto.getTipElement = function getTipElement() { this.tip = this.tip || $(this.config.template)[0]; return this.tip; }; _proto.setContent = function setContent() { var tip = this.getTipElement(); this.setElementContent($(tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle()); $(tip).removeClass(CLASS_NAME_FADE + " " + CLASS_NAME_SHOW); }; _proto.setElementContent = function setElementContent($element, content) { if (typeof content === 'object' && (content.nodeType || content.jquery)) { // Content is a DOM node or a jQuery if (this.config.html) { if (!$(content).parent().is($element)) { $element.empty().append(content); } } else { $element.text($(content).text()); } return; } if (this.config.html) { if (this.config.sanitize) { content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn); } $element.html(content); } else { $element.text(content); } }; _proto.getTitle = function getTitle() { var title = this.element.getAttribute('data-original-title'); if (!title) { title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title; } return title; } // Private ; _proto._getPopperConfig = function _getPopperConfig(attachment) { var _this3 = this; var defaultBsConfig = { placement: attachment, modifiers: { offset: this._getOffset(), flip: { behavior: this.config.fallbackPlacement }, arrow: { element: SELECTOR_ARROW }, preventOverflow: { boundariesElement: this.config.boundary } }, onCreate: function onCreate(data) { if (data.originalPlacement !== data.placement) { _this3._handlePopperPlacementChange(data); } }, onUpdate: function onUpdate(data) { return _this3._handlePopperPlacementChange(data); } }; return _extends({}, defaultBsConfig, this.config.popperConfig); }; _proto._getOffset = function _getOffset() { var _this4 = this; var offset = {}; if (typeof this.config.offset === 'function') { offset.fn = function (data) { data.offsets = _extends({}, data.offsets, _this4.config.offset(data.offsets, _this4.element) || {}); return data; }; } else { offset.offset = this.config.offset; } return offset; }; _proto._getContainer = function _getContainer() { if (this.config.container === false) { return document.body; } if (Util.isElement(this.config.container)) { return $(this.config.container); } return $(document).find(this.config.container); }; _proto._getAttachment = function _getAttachment(placement) { return AttachmentMap[placement.toUpperCase()]; }; _proto._setListeners = function _setListeners() { var _this5 = this; var triggers = this.config.trigger.split(' '); triggers.forEach(function (trigger) { if (trigger === 'click') { $(_this5.element).on(_this5.constructor.Event.CLICK, _this5.config.selector, function (event) { return _this5.toggle(event); }); } else if (trigger !== TRIGGER_MANUAL) { var eventIn = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSEENTER : _this5.constructor.Event.FOCUSIN; var eventOut = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSELEAVE : _this5.constructor.Event.FOCUSOUT; $(_this5.element).on(eventIn, _this5.config.selector, function (event) { return _this5._enter(event); }).on(eventOut, _this5.config.selector, function (event) { return _this5._leave(event); }); } }); this._hideModalHandler = function () { if (_this5.element) { _this5.hide(); } }; $(this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler); if (this.config.selector) { this.config = _extends({}, this.config, { trigger: 'manual', selector: '' }); } else { this._fixTitle(); } }; _proto._fixTitle = function _fixTitle() { var titleType = typeof this.element.getAttribute('data-original-title'); if (this.element.getAttribute('title') || titleType !== 'string') { this.element.setAttribute('data-original-title', this.element.getAttribute('title') || ''); this.element.setAttribute('title', ''); } }; _proto._enter = function _enter(event, context) { var dataKey = this.constructor.DATA_KEY; context = context || $(event.currentTarget).data(dataKey); if (!context) { context = new this.constructor(event.currentTarget, this._getDelegateConfig()); $(event.currentTarget).data(dataKey, context); } if (event) { context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true; } if ($(context.getTipElement()).hasClass(CLASS_NAME_SHOW) || context._hoverState === HOVER_STATE_SHOW) { context._hoverState = HOVER_STATE_SHOW; return; } clearTimeout(context._timeout); context._hoverState = HOVER_STATE_SHOW; if (!context.config.delay || !context.config.delay.show) { context.show(); return; } context._timeout = setTimeout(function () { if (context._hoverState === HOVER_STATE_SHOW) { context.show(); } }, context.config.delay.show); }; _proto._leave = function _leave(event, context) { var dataKey = this.constructor.DATA_KEY; context = context || $(event.currentTarget).data(dataKey); if (!context) { context = new this.constructor(event.currentTarget, this._getDelegateConfig()); $(event.currentTarget).data(dataKey, context); } if (event) { context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = false; } if (context._isWithActiveTrigger()) { return; } clearTimeout(context._timeout); context._hoverState = HOVER_STATE_OUT; if (!context.config.delay || !context.config.delay.hide) { context.hide(); return; } context._timeout = setTimeout(function () { if (context._hoverState === HOVER_STATE_OUT) { context.hide(); } }, context.config.delay.hide); }; _proto._isWithActiveTrigger = function _isWithActiveTrigger() { for (var trigger in this._activeTrigger) { if (this._activeTrigger[trigger]) { return true; } } return false; }; _proto._getConfig = function _getConfig(config) { var dataAttributes = $(this.element).data(); Object.keys(dataAttributes).forEach(function (dataAttr) { if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) { delete dataAttributes[dataAttr]; } }); config = _extends({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {}); if (typeof config.delay === 'number') { config.delay = { show: config.delay, hide: config.delay }; } if (typeof config.title === 'number') { config.title = config.title.toString(); } if (typeof config.content === 'number') { config.content = config.content.toString(); } Util.typeCheckConfig(NAME, config, this.constructor.DefaultType); if (config.sanitize) { config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn); } return config; }; _proto._getDelegateConfig = function _getDelegateConfig() { var config = {}; if (this.config) { for (var key in this.config) { if (this.constructor.Default[key] !== this.config[key]) { config[key] = this.config[key]; } } } return config; }; _proto._cleanTipClass = function _cleanTipClass() { var $tip = $(this.getTipElement()); var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX); if (tabClass !== null && tabClass.length) { $tip.removeClass(tabClass.join('')); } }; _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) { this.tip = popperData.instance.popper; this._cleanTipClass(); this.addAttachmentClass(this._getAttachment(popperData.placement)); }; _proto._fixTransition = function _fixTransition() { var tip = this.getTipElement(); var initConfigAnimation = this.config.animation; if (tip.getAttribute('x-placement') !== null) { return; } $(tip).removeClass(CLASS_NAME_FADE); this.config.animation = false; this.hide(); this.show(); this.config.animation = initConfigAnimation; } // Static ; Tooltip._jQueryInterface = function _jQueryInterface(config) { return this.each(function () { var data = $(this).data(DATA_KEY); var _config = typeof config === 'object' && config; if (!data && /dispose|hide/.test(config)) { return; } if (!data) { data = new Tooltip(this, _config); $(this).data(DATA_KEY, data); } if (typeof config === 'string') { if (typeof data[config] === 'undefined') { throw new TypeError("No method named \"" + config + "\""); } data[config](); } }); }; _createClass(Tooltip, null, [{ key: "VERSION", get: function get() { return VERSION; } }, { key: "Default", get: function get() { return Default; } }, { key: "NAME", get: function get() { return NAME; } }, { key: "DATA_KEY", get: function get() { return DATA_KEY; } }, { key: "Event", get: function get() { return Event; } }, { key: "EVENT_KEY", get: function get() { return EVENT_KEY; } }, { key: "DefaultType", get: function get() { return DefaultType; } }]); return Tooltip; }(); /** * ------------------------------------------------------------------------ * jQuery * ------------------------------------------------------------------------ */ $.fn[NAME] = Tooltip._jQueryInterface; $.fn[NAME].Constructor = Tooltip; $.fn[NAME].noConflict = function () { $.fn[NAME] = JQUERY_NO_CONFLICT; return Tooltip._jQueryInterface; }; return Tooltip; }))); //# sourceMappingURL=tooltip.js.map /* @preserve _____ __ _ __ _ / ___// /(_)___/ /___ ____ (_)___ / (_ // // // _ // -_)/ __/_ / /(_-< \___//_//_/ \_,_/ \__//_/ (_)__/ //___/ |___/ Version: 1.7.4 Author: Nick Piscitelli (pickykneee) Website: https://nickpiscitelli.com Documentation: http://nickpiscitelli.github.io/Glider.js License: MIT License Release Date: October 25th, 2018 */ /* global define */ (function (factory) { typeof define === 'function' && define.amd ? define(factory) : typeof exports === 'object' ? (module.exports = factory()) : factory() })(function () { ('use strict') // eslint-disable-line no-unused-expressions /* globals window:true */ var _window = typeof window !== 'undefined' ? window : this var Glider = (_window.Glider = function (element, settings) { var _ = this if (element._glider) return element._glider _.ele = element _.ele.classList.add('glider') // expose glider object to its DOM element _.ele._glider = _ // merge user setting with defaults _.opt = Object.assign( {}, { slidesToScroll: 1, slidesToShow: 1, resizeLock: true, duration: 0.5, autoplay: false, animateDots: false, animateDirection: 'X', scrollbar: false, trackOffset: true, // easeInQuad easing: function (x, t, b, c, d) { return c * (t /= d) * t + b } }, settings ) // set defaults _.animate_id = _.page = _.slide = 0 _.arrows = {} // preserve original options to // extend breakpoint settings _._opt = _.opt if (_.opt.skipTrack) { // first and only child is the track _.track = _.ele.children[0] } else { // create track and wrap slides _.track = document.createElement('div') _.ele.appendChild(_.track) while (_.ele.children.length !== 1) { _.track.appendChild(_.ele.children[0]) } } _.track.classList.add('glider-track') // start glider _.init() // set events _.resize = _.init.bind(_, true) _.event(_.ele, 'add', { scroll: _.updateControls.bind(_) }) _.event(_window, 'add', { resize: _.resize }) }) var gliderPrototype = Glider.prototype gliderPrototype.init = function (refresh, paging) { var _ = this var width = 0 var height = 0 _.slides = [] for (var i = 0; i < _.track.children.length; ++i) { var slide = _.track.children[i] var style = window.getComputedStyle(slide) if(style.display !== 'none'){ slide.classList.add('glider-slide') slide.setAttribute('data-gslide', i) _.slides.push(slide) } } _.containerWidth = _.ele.clientWidth var breakpointChanged = _.settingsBreakpoint() if (!paging) paging = breakpointChanged if ( _.opt.slidesToShow === 'auto' || typeof _.opt._autoSlide !== 'undefined' ) { var slideCount = _.containerWidth / _.opt.itemWidth _.opt._autoSlide = _.opt.slidesToShow = _.opt.exactWidth ? slideCount : Math.max(1, Math.floor(slideCount)) } if (_.opt.slidesToScroll === 'auto') { _.opt.slidesToScroll = Math.floor(_.opt.slidesToShow) } _.itemWidth = _.opt.exactWidth ? _.opt.itemWidth : _.containerWidth / _.opt.slidesToShow; // set slide dimensions [].forEach.call(_.slides, function (__) { __.style.height = 'auto' __.style.width = _.itemWidth + 'px' width += _.itemWidth height = Math.max(__.offsetHeight, height) }) // if fractional slides, add offset to end of track var trackOffset = 0 if (_.opt.trackOffset) { if( !Number.isInteger(_.opt.slidesToShow) ){ var slideFraction = (_.opt.slidesToShow - Math.floor(_.opt.slidesToShow)).toPrecision(3) trackOffset = slideFraction * _.itemWidth } } _.track.style.width = width + trackOffset + 'px' _.trackWidth = width _.isDrag = false _.preventClick = false _.opt.resizeLock && _.scrollTo(_.slide * _.itemWidth, 0) if (_.opt.scrollbar) { // for now we only need a fake scrollbar on ios (iphone and ipad) if(_.iosTest() ){ _.ele.parentElement.classList.add('fake-scrollbar') var scrollbarEl = document.createElement('div') scrollbarEl.classList.add('scrollbar') _.ele.parentElement.appendChild(scrollbarEl) _.opt.dots = scrollbarEl } else { _.ele.parentElement.classList.add('scrollbar') } } if (_.opt.autoplay) { // set default autplay properties if they have not been defined _.opt.autoplay = Object.assign( { delay: 5000, disableOnInteraction: true, repeat: true }, _.opt.autoplay ) _.autoPlayDelay = _.opt.autoplay.delay } if (breakpointChanged || paging) { _.bindArrows() _.buildDots() _.bindDrag() } _.updateControls() _.emit(refresh ? 'refresh' : 'loaded') } gliderPrototype.iosTest = function () { return [ 'iPad Simulator', 'iPhone Simulator', 'iPod Simulator', 'iPad', 'iPhone', 'iPod' ].indexOf(navigator.platform) !== -1 // iPad on iOS 13 detection || (navigator.userAgent.indexOf('Mac') !== -1 && 'ontouchend' in document) } gliderPrototype.prevSlide = null gliderPrototype.nextSlide = null gliderPrototype.autoPlayDirection = 'forward' // forward or reverse gliderPrototype.autoPlayTimer = 0 gliderPrototype.autoPlayDelay = 0 gliderPrototype.autoPlayTimeElapsed = 0 gliderPrototype.resetAutoPlay = function () { var _ = this // reset timer states if(_.autoPlayTimer){ clearTimeout(_.autoPlayTimer) _.autoPlayTimer = null } if(_.opt.animateDots && typeof _.dots !== 'undefined' && _.dots !== null){ // reset dots styles and progress state for (var dotIndex = 0; dotIndex < _.dots.childElementCount; dotIndex++) { var dotEl = _.dots.children[dotIndex].firstElementChild.firstElementChild dotEl.style.transitionDuration = '0s' dotEl.style.transform = '' } _.autoPlayDelay = _.opt.autoplay.delay _.autoPlayTimeElapsed = 0 } } gliderPrototype.autoPlay = function () { var _ = this _.resetAutoPlay() if(_.autoPlayDirection === 'forward') { var nextIndex = _.slide + 1 if(_.opt.animateDots && typeof _.dots !== 'undefined' && _.dots !== null){ var activeDot = _.dots.children[_.slide].firstElementChild.firstElementChild activeDot.style.transitionDuration = ( _.autoPlayDelay / 1000).toFixed(3) + 's' activeDot.style.transform = 'translate'+ _.opt.animateDirection +'(100%)' } _.autoPlayTimer = setTimeout(function(){ if (nextIndex >= _.track.childElementCount) { if (!_.opt.autoplay.repeat) { _.resetAutoPlay() } else { nextIndex = 0 _.scrollItem(nextIndex) } } else { _.scrollItem(nextIndex) } }, _.autoPlayDelay) } if(_.autoPlayDirection === 'reverse') { var nextIndex = _.slide - 1 if(_.opt.animateDots && typeof _.dots !== 'undefined' && _.dots !== null){ var activeDot = _.dots.children[_.slide].firstElementChild.firstElementChild activeDot.style.transitionDuration = ( _.autoPlayDelay / 1000).toFixed(3) + 's' activeDot.style.transform = 'translate'+ _.opt.animateDirection +'(100%)' } _.autoPlayTimer = setTimeout(function(){ if (nextIndex <= -1) { if (!_.opt.autoplay.repeat) { _.resetAutoPlay() } else { nextIndex = (_.track.childElementCount - 1) _.scrollItem(nextIndex) } } else { _.scrollItem(nextIndex) } }, _.autoPlayDelay) } } gliderPrototype.bindDrag = function () { var _ = this _.mouse = _.mouse || _.handleMouse.bind(_) var mouseenter = function (e) { if(_.opt.autoplay && _.opt.autoplay.disableOnInteraction){ _.pauseAutoplay() } } var mouseleave = function (e) { if(_.opt.autoplay && _.opt.autoplay.disableOnInteraction){ _.resumeAutoplay() } // mouseup used to be the handler for mouseleave, so just run it at the end of our custom function // mouseup default function _.mouseDown = undefined _.ele.classList.remove('drag') if (_.isDrag) { _.preventClick = true } _.isDrag = false // end mouseup default function } var mouseup = function () { // handle mouseup and touchend _.mouseDown = undefined _.ele.classList.remove('drag') if (_.isDrag) { _.preventClick = true if (_.opt.scrollLock) { _.scrollItem(_.getCurrentSlide()) } } _.isDrag = false } var mousedown = function (e) { // handle mousedown and touchstart if(_.opt.autoplay){ _.resetAutoPlay() } e.preventDefault() e.stopPropagation() _.mouseDown = e.clientX _.ele.classList.add('drag') } var mouseclick = function (e) { if (_.preventClick) { e.preventDefault() e.stopPropagation() } _.preventClick = false } // TO DO: touch end not working as expected on ios // var touchend = function (e) { // if (_.opt.scrollLock) { // _.scrollItem(_.getCurrentSlide()) // } // } var events = { mouseenter: mouseenter, mouseleave: mouseleave, mouseup: mouseup, mousedown: mousedown, mousemove: _.mouse, // touchend: touchend, click: mouseclick } // refactor: ie11 does not support second param passed to toggle: // _.ele.classList.toggle('draggable', _.opt.draggable === true) if( _.opt.draggable === true) { _.ele.classList.add('draggable') } else { _.ele.classList.remove('draggable') } _.event(_.ele, 'remove', events) if (_.opt.draggable) _.event(_.ele, 'add', events) } gliderPrototype.buildDots = function () { var _ = this if (!_.opt.dots) { if (_.dots) _.dots.innerHTML = '' return } if (typeof _.opt.dots === 'string') { _.dots = document.querySelector(_.opt.dots) } else _.dots = _.opt.dots if (!_.dots) return _.dots.innerHTML = '' _.dots.classList.add('glider-dots') if(_.opt.animateDots && _.opt.autoplay){ _.dots.classList.add('animate-glider-dots') } for (var i = 0; i < Math.ceil(_.slides.length / _.opt.slidesToShow); ++i) { var dot = document.createElement('button') dot.dataset.index = i dot.setAttribute('aria-label', 'Page ' + (i + 1)) dot.setAttribute('role', 'tab') dot.className = 'glider-dot ' + (i ? '' : 'active') if(_.opt.animateDots && _.opt.autoplay){ dot.innerHTML = '<span><span></span></span>' } _.event(dot, 'add', { click: _.scrollItem.bind(_, i, true) }) _.dots.appendChild(dot) } } gliderPrototype.bindArrows = function () { var _ = this if (!_.opt.arrows) { Object.keys(_.arrows).forEach(function (direction) { var element = _.arrows[direction] _.event(element, 'remove', { click: element._func }) }) return } ['prev', 'next'].forEach(function (direction) { var arrow = _.opt.arrows[direction] if (arrow) { if (typeof arrow === 'string') arrow = document.querySelector(arrow) if (arrow) { arrow._func = arrow._func || _.scrollItem.bind(_, direction) _.event(arrow, 'remove', { click: arrow._func }) _.event(arrow, 'add', { click: arrow._func }) _.arrows[direction] = arrow } } }) } gliderPrototype.updateControls = function (event) { var _ = this if (event && !_.opt.scrollPropagate) { event.stopPropagation() } var disableArrows = _.containerWidth >= _.trackWidth if (!_.opt.rewind) { if (_.arrows.prev) { // refactor: ie11 does not support second param passed to toggle: // _.arrows.prev.classList.toggle('disabled', _.ele.scrollLeft <= 0 || disableArrows) if(_.ele.scrollLeft <= 0 || disableArrows){ _.arrows.prev.classList.add('disabled') } else { _.arrows.prev.classList.remove('disabled') } _.arrows.prev.classList.contains('disabled') ? _.arrows.prev.setAttribute('aria-disabled', true) : _.arrows.prev.setAttribute('aria-disabled', false) } if (_.arrows.next) { // refactor: ie11 does not support second param passed to toggle: // _.arrows.next.classList.toggle('disabled', Math.ceil(_.ele.scrollLeft + _.containerWidth) >=Math.floor(_.trackWidth) || disableArrows) if(Math.ceil(_.ele.scrollLeft + _.containerWidth) >= Math.floor(_.trackWidth) || disableArrows) { _.arrows.next.classList.add('disabled') } else { _.arrows.next.classList.remove('disabled') } _.arrows.next.classList.contains('disabled') ? _.arrows.next.setAttribute('aria-disabled', true) : _.arrows.next.setAttribute('aria-disabled', false) } } _.slide = Math.round(_.ele.scrollLeft / _.itemWidth) _.page = Math.round(_.ele.scrollLeft / _.containerWidth) var middle = _.slide + Math.floor(Math.floor(_.opt.slidesToShow) / 2) var extraMiddle = Math.floor(_.opt.slidesToShow) % 2 ? 0 : middle + 1 if (Math.floor(_.opt.slidesToShow) === 1) { extraMiddle = 0 } // the last page may be less than one half of a normal page width so // the page is rounded down. when at the end, force the page to turn if (_.ele.scrollLeft + _.containerWidth >= Math.floor(_.trackWidth)) { _.page = _.dots ? _.dots.children.length - 1 : 0 } [].forEach.call(_.slides, function (slide, index) { var slideClasses = slide.classList var wasVisible = slideClasses.contains('visible') var start = _.ele.scrollLeft var end = _.ele.scrollLeft + _.containerWidth var itemStart = _.itemWidth * index var itemEnd = itemStart + _.itemWidth; [].forEach.call(slideClasses, function (className) { /^left|right/.test(className) && slideClasses.remove(className) }) // refactor: ie11 does not support second param passed to toggle: // slideClasses.toggle('active', _.slide === index) if(_.slide === index){ slideClasses.add('active') } else { slideClasses.remove('active') } if (middle === index || (extraMiddle && extraMiddle === index)) { slideClasses.add('center') } else { slideClasses.remove('center') slideClasses.add( [ index < middle ? 'left' : 'right', Math.abs(index - (index < middle ? middle : extraMiddle || middle)) ].join('-') ) } var isVisible = Math.ceil(itemStart) >= Math.floor(start) && Math.floor(itemEnd) <= Math.ceil(end) // refactor: ie11 does not support second param passed to toggle: // slideClasses.toggle('visible', isVisible) if (isVisible) { slideClasses.add('visible') } else { slideClasses.remove('visible') } if (isVisible !== wasVisible) { if(isVisible) { _.emit('slide-visible', { slide: index, prev: _.prevSlide }) } else { _.emit('slide-hidden', { slide: index, next: _.nextSlide }) } } }) if (_.dots) { [].forEach.call(_.dots.children, function (dot, index) { // refactor: ie11 does not support second param passed to toggle: //dot.classList.toggle('active', _.page === index) if(_.page === index){ dot.classList.add('active') } else { dot.classList.remove('active') } }) } // original scroll lock implementation if (event && _.opt.scrollLock) { clearTimeout(_.scrollLock) _.scrollLock = setTimeout(function () { clearTimeout(_.scrollLock) // dont attempt to scroll less than a pixel fraction - causes looping if (Math.abs(_.ele.scrollLeft / _.itemWidth - _.slide) > 0.02) { if (!_.mouseDown) { // Only scroll if not at the end (#94) if (_.trackWidth > _.containerWidth + _.ele.scrollLeft) { _.scrollItem(_.getCurrentSlide()) } } } }, _.opt.scrollLockDelay || 250) } } gliderPrototype.getCurrentSlide = function () { var _ = this return _.round(_.ele.scrollLeft / _.itemWidth) } gliderPrototype.scrollItem = function (slide, dot, e) { if (e) e.preventDefault() var _ = this /* Updates "nextSlide" property. Currently only used by "glider-slide-hidden" event which only provides the current slide index before transitioning to next slide. This allows "glider-slide-hidden" event to also provide the next slide index. Previously we used the "glider-slide-visible" event because it provides the new slide index, unfortunatly it proivdes the value after the transition completes. We need to know this value before the transition begins. */ var lastIndex = _.slides.length - 1 if(slide === 'next') { _.nextSlide = (_.slide !== lastIndex ? (_.slide + 1) : 0) } else if (slide === 'prev') { _.nextSlide = (_.slide !== 0 ? (_.slide - 1) : lastIndex) } else { _.nextSlide = slide } /* Updates "prevSlide" property. Currently only used by "glider-slide-visible" event which only provides the current slide index after the transitioning to next slide completes. This allows "glider-slide-visible" event to also provide the previous slide index. */ _.prevSlide = _.slide var originalSlide = slide ++_.animate_id if (dot === true) { slide = slide * _.containerWidth slide = Math.round(slide / _.itemWidth) * _.itemWidth } else { if (typeof slide === 'string') { var backwards = slide === 'prev' // use precise location if fractional slides are on if (_.opt.slidesToScroll % 1 || _.opt.slidesToShow % 1) { slide = _.getCurrentSlide() } else { slide = _.slide } if (backwards) slide -= _.opt.slidesToScroll else slide += _.opt.slidesToScroll } if (_.opt.rewind) { var scrollLeft = _.ele.scrollLeft slide = backwards && !scrollLeft ? _.slides.length : !backwards && scrollLeft + _.containerWidth >= Math.floor(_.trackWidth) ? 0 : slide } slide = Math.max(Math.min(slide, _.slides.length), 0) _.slide = slide slide = _.itemWidth * slide } _.scrollTo( slide, _.opt.duration * Math.abs(_.ele.scrollLeft - slide), function () { _.updateControls() _.emit('animated', { value: originalSlide, type: typeof originalSlide === 'string' ? 'arrow' : dot ? 'dot' : 'slide' }) } ) return false } gliderPrototype.settingsBreakpoint = function () { var _ = this var resp = _._opt.responsive if (resp) { // Sort the breakpoints in mobile first order resp.sort(function (a, b) { return b.breakpoint - a.breakpoint }) for (var i = 0; i < resp.length; ++i) { var size = resp[i] if (_window.innerWidth >= size.breakpoint) { if (_.breakpoint !== size.breakpoint) { _.opt = Object.assign({}, _._opt, size.settings) _.breakpoint = size.breakpoint return true } return false } } } // set back to defaults in case they were overriden var breakpointChanged = _.breakpoint !== 0 _.opt = Object.assign({}, _._opt) _.breakpoint = 0 return breakpointChanged } gliderPrototype.scrollTo = function (scrollTarget, scrollDuration, callback) { var _ = this var start = new Date().getTime() var animateIndex = _.animate_id function animate () { var now = new Date().getTime() - start _.ele.scrollLeft = _.ele.scrollLeft + (scrollTarget - _.ele.scrollLeft) * _.opt.easing(0, now, 0, 1, scrollDuration) if (now < scrollDuration && animateIndex === _.animate_id) { _window.requestAnimationFrame(animate) } else { _.ele.scrollLeft = scrollTarget callback && callback.call(_) // after transition to next slide // start autoplay for new slide if (_.opt.autoplay) { _.autoPlay() } } } _window.requestAnimationFrame(animate) } gliderPrototype.removeItem = function (index) { var _ = this if (_.slides.length) { _.track.removeChild(_.slides[index]) _.refresh(true) _.emit('remove') } } gliderPrototype.addItem = function (ele) { var _ = this _.track.appendChild(ele) _.refresh(true) _.emit('add') } gliderPrototype.handleMouse = function (e) { // handles mousemove and touchmove var _ = this if (_.mouseDown) { _.isDrag = true _.ele.scrollLeft += (_.mouseDown - e.clientX) * (_.opt.dragVelocity || 3.3) _.mouseDown = e.clientX } } // used to round to the nearest 0.XX fraction gliderPrototype.round = function (double) { var _ = this var step = _.opt.slidesToScroll % 1 || 1 var inv = 1.0 / step return Math.round(double * inv) / inv } gliderPrototype.refresh = function (paging) { var _ = this _.init(true, paging) } gliderPrototype.setOption = function (opt, global) { var _ = this if (_.breakpoint && !global) { _._opt.responsive.forEach(function (v) { if (v.breakpoint === _.breakpoint) { v.settings = Object.assign({}, v.settings, opt) } }) } else { _._opt = Object.assign({}, _._opt, opt) } _.breakpoint = 0 _.settingsBreakpoint() } gliderPrototype.destroy = function () { var _ = this var replace = _.ele.cloneNode(true) var clear = function (ele) { ele.removeAttribute('style'); [].forEach.call(ele.classList, function (className) { /^glider/.test(className) && ele.classList.remove(className) }) } // remove track replace.children[0].outerHTML = replace.children[0].innerHTML clear(replace); [].forEach.call(replace.getElementsByTagName('*'), clear) _.ele.parentNode.replaceChild(replace, _.ele) _.event(_window, 'remove', { resize: _.resize }) _.emit('destroy') } gliderPrototype.emit = function (name, arg) { var _ = this var e = new _window.CustomEvent('glider-' + name, { bubbles: !_.opt.eventPropagate, detail: arg }) _.ele.dispatchEvent(e) } gliderPrototype.event = function (ele, type, args) { var eventHandler = ele[type + 'EventListener'].bind(ele) Object.keys(args).forEach(function (k) { eventHandler(k, args[k]) }) } gliderPrototype.pauseAutoplay = function () { var _ = this clearTimeout(_.autoPlayTimer) _.autoPlayTimer = null if(_.opt.animateDots && typeof _.dots !== 'undefined' && _.dots !== null){ var activeDot = _.dots.children[_.slide].firstElementChild.firstElementChild var compStyle = window.getComputedStyle(activeDot).getPropertyValue('transform') var transformVal // ie11 cant use DOMMatrixReadOnly if(typeof DOMMatrixReadOnly !== 'undefined'){ var matrix = new DOMMatrixReadOnly(compStyle) if(_.opt.animateDirection === 'Y') { transformVal = matrix.m42 } else { transformVal = matrix.m41 } } else { var init = compStyle.indexOf('(') var fin = compStyle.indexOf(')') var str = compStyle.substr( (init + 1), (fin - init - 1)) var fauxMatrix = str.split(',') if(_.opt.animateDirection === 'Y') { transformVal = Number(fauxMatrix[5]) } else { transformVal = Number(fauxMatrix[4]) } } // stop and pause dot progress var totalProgressDistance if(_.opt.animateDirection === 'Y') { totalProgressDistance = activeDot.offsetHeight } else { totalProgressDistance = activeDot.offsetWidth } var progressVal = (transformVal / totalProgressDistance).toFixed(5) _.autoPlayTimeElapsed = progressVal activeDot.style.transitionDuration = '0s' activeDot.style.transform = 'translate'+ _.opt.animateDirection +'(' + (progressVal * 100) + '%)' } } gliderPrototype.resumeAutoplay = function () { var _ = this if(_.opt.animateDots && typeof _.dots !== 'undefined' && _.dots !== null){ var activeDot = _.dots.children[_.slide].firstElementChild.firstElementChild activeDot.style.transitionDuration = ( _.autoPlayDelay / 1000).toFixed(3) + 's' activeDot.style.transform = 'translate'+ _.opt.animateDirection +'(100%)' _.autoPlayDelay = Number(_.opt.autoplay.delay - (_.autoPlayTimeElapsed * _.opt.autoplay.delay)).toFixed(3) } // TO DO: only clear and start autoPlay if dot is not progressing clearTimeout(_.autoPlayTimer) _.autoPlayTimer = null _.autoPlay() } return Glider }); /*! * Tempus Dominus v6.2.10 (https://getdatepicker.com/) * Copyright 2013-2022 Jonathan Peterson * Licensed under MIT (https://github.com/Eonasdan/tempus-dominus/blob/master/LICENSE) */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.tempusDominus = {})); })(this, (function (exports) { 'use strict'; exports.Unit = void 0; (function (Unit) { Unit["seconds"] = "seconds"; Unit["minutes"] = "minutes"; Unit["hours"] = "hours"; Unit["date"] = "date"; Unit["month"] = "month"; Unit["year"] = "year"; })(exports.Unit || (exports.Unit = {})); const twoDigitTemplate = { month: '2-digit', day: '2-digit', year: 'numeric', hour: '2-digit', minute: '2-digit', second: '2-digit', }; const getFormatByUnit = (unit) => { switch (unit) { case 'date': return { dateStyle: 'short' }; case 'month': return { month: 'numeric', year: 'numeric', }; case 'year': return { year: 'numeric' }; } }; const guessHourCycle = (locale) => { if (!locale) return 'h12'; // noinspection SpellCheckingInspection const template = { hour: '2-digit', minute: '2-digit', numberingSystem: 'latn', }; const dt = new DateTime().setLocale(locale); dt.hours = 0; const start = dt.parts(undefined, template).hour; //midnight is 12 so en-US style 12 AM if (start === '12') return 'h12'; //midnight is 24 is from 00-24 if (start === '24') return 'h24'; dt.hours = 23; const end = dt.parts(undefined, template).hour; //if midnight is 00 and hour 23 is 11 then if (start === '00' && end === '11') return 'h11'; if (start === '00' && end === '23') return 'h23'; console.warn(`couldn't determine hour cycle for ${locale}. start: ${start}. end: ${end}`); return undefined; }; /** * For the most part this object behaves exactly the same way * as the native Date object with a little extra spice. */ class DateTime extends Date { constructor() { super(...arguments); /** * Used with Intl.DateTimeFormat */ this.locale = 'default'; this.nonLeapLadder = [ 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, ]; this.leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335]; } /** * Chainable way to set the {@link locale} * @param value */ setLocale(value) { this.locale = value; return this; } /** * Converts a plain JS date object to a DateTime object. * Doing this allows access to format, etc. * @param date * @param locale */ static convert(date, locale = 'default') { if (!date) throw new Error(`A date is required`); return new DateTime(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()).setLocale(locale); } /** * Attempts to create a DateTime from a string. A customDateFormat is required for non US dates. * @param input * @param localization */ //eslint-disable-next-line @typescript-eslint/no-unused-vars static fromString(input, localization) { return new DateTime(input); } /** * Native date manipulations are not pure functions. This function creates a duplicate of the DateTime object. */ get clone() { return new DateTime(this.year, this.month, this.date, this.hours, this.minutes, this.seconds, this.getMilliseconds()).setLocale(this.locale); } /** * Sets the current date to the start of the {@link unit} provided * Example: Consider a date of "April 30, 2021, 11:45:32.984 AM" => new DateTime(2021, 3, 30, 11, 45, 32, 984).startOf('month') * would return April 1, 2021, 12:00:00.000 AM (midnight) * @param unit * @param startOfTheWeek Allows for the changing the start of the week. */ startOf(unit, startOfTheWeek = 0) { if (this[unit] === undefined) throw new Error(`Unit '${unit}' is not valid`); switch (unit) { case 'seconds': this.setMilliseconds(0); break; case 'minutes': this.setSeconds(0, 0); break; case 'hours': this.setMinutes(0, 0, 0); break; case 'date': this.setHours(0, 0, 0, 0); break; case 'weekDay': { this.startOf(exports.Unit.date); if (this.weekDay === startOfTheWeek) break; let goBack = this.weekDay; if (startOfTheWeek !== 0 && this.weekDay === 0) goBack = 8 - startOfTheWeek; this.manipulate(startOfTheWeek - goBack, exports.Unit.date); break; } case 'month': this.startOf(exports.Unit.date); this.setDate(1); break; case 'year': this.startOf(exports.Unit.date); this.setMonth(0, 1); break; } return this; } /** * Sets the current date to the end of the {@link unit} provided * Example: Consider a date of "April 30, 2021, 11:45:32.984 AM" => new DateTime(2021, 3, 30, 11, 45, 32, 984).endOf('month') * would return April 30, 2021, 11:59:59.999 PM * @param unit * @param startOfTheWeek */ endOf(unit, startOfTheWeek = 0) { if (this[unit] === undefined) throw new Error(`Unit '${unit}' is not valid`); switch (unit) { case 'seconds': this.setMilliseconds(999); break; case 'minutes': this.setSeconds(59, 999); break; case 'hours': this.setMinutes(59, 59, 999); break; case 'date': this.setHours(23, 59, 59, 999); break; case 'weekDay': { this.endOf(exports.Unit.date); const endOfWeek = 6 + startOfTheWeek; if (this.weekDay === endOfWeek) break; this.manipulate(endOfWeek - this.weekDay, exports.Unit.date); break; } case 'month': this.endOf(exports.Unit.date); this.manipulate(1, exports.Unit.month); this.setDate(0); break; case 'year': this.endOf(exports.Unit.date); this.setMonth(11, 31); break; } return this; } /** * Change a {@link unit} value. Value can be positive or negative * Example: Consider a date of "April 30, 2021, 11:45:32.984 AM" => new DateTime(2021, 3, 30, 11, 45, 32, 984).manipulate(1, 'month') * would return May 30, 2021, 11:45:32.984 AM * @param value A positive or negative number * @param unit */ manipulate(value, unit) { if (this[unit] === undefined) throw new Error(`Unit '${unit}' is not valid`); this[unit] += value; return this; } /** * Returns a string format. * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat * for valid templates and locale objects * @param template An object. Uses browser defaults otherwise. * @param locale Can be a string or an array of strings. Uses browser defaults otherwise. */ format(template, locale = this.locale) { return new Intl.DateTimeFormat(locale, template).format(this); } /** * Return true if {@link compare} is before this date * @param compare The Date/DateTime to compare * @param unit If provided, uses {@link startOf} for * comparision. */ isBefore(compare, unit) { if (!unit) return this.valueOf() < compare.valueOf(); if (this[unit] === undefined) throw new Error(`Unit '${unit}' is not valid`); return (this.clone.startOf(unit).valueOf() < compare.clone.startOf(unit).valueOf()); } /** * Return true if {@link compare} is after this date * @param compare The Date/DateTime to compare * @param unit If provided, uses {@link startOf} for * comparision. */ isAfter(compare, unit) { if (!unit) return this.valueOf() > compare.valueOf(); if (this[unit] === undefined) throw new Error(`Unit '${unit}' is not valid`); return (this.clone.startOf(unit).valueOf() > compare.clone.startOf(unit).valueOf()); } /** * Return true if {@link compare} is same this date * @param compare The Date/DateTime to compare * @param unit If provided, uses {@link startOf} for * comparision. */ isSame(compare, unit) { if (!unit) return this.valueOf() === compare.valueOf(); if (this[unit] === undefined) throw new Error(`Unit '${unit}' is not valid`); compare = DateTime.convert(compare); return (this.clone.startOf(unit).valueOf() === compare.startOf(unit).valueOf()); } /** * Check if this is between two other DateTimes, optionally looking at unit scale. The match is exclusive. * @param left * @param right * @param unit. * @param inclusivity. A [ indicates inclusion of a value. A ( indicates exclusion. * If the inclusivity parameter is used, both indicators must be passed. */ isBetween(left, right, unit, inclusivity = '()') { if (unit && this[unit] === undefined) throw new Error(`Unit '${unit}' is not valid`); const leftInclusivity = inclusivity[0] === '('; const rightInclusivity = inclusivity[1] === ')'; return (((leftInclusivity ? this.isAfter(left, unit) : !this.isBefore(left, unit)) && (rightInclusivity ? this.isBefore(right, unit) : !this.isAfter(right, unit))) || ((leftInclusivity ? this.isBefore(left, unit) : !this.isAfter(left, unit)) && (rightInclusivity ? this.isAfter(right, unit) : !this.isBefore(right, unit)))); } /** * Returns flattened object of the date. Does not include literals * @param locale * @param template */ parts(locale = this.locale, template = { dateStyle: 'full', timeStyle: 'long' }) { const parts = {}; new Intl.DateTimeFormat(locale, template) .formatToParts(this) .filter((x) => x.type !== 'literal') .forEach((x) => (parts[x.type] = x.value)); return parts; } /** * Shortcut to Date.getSeconds() */ get seconds() { return this.getSeconds(); } /** * Shortcut to Date.setSeconds() */ set seconds(value) { this.setSeconds(value); } /** * Returns two digit hours */ get secondsFormatted() { return this.parts(undefined, twoDigitTemplate).second; } /** * Shortcut to Date.getMinutes() */ get minutes() { return this.getMinutes(); } /** * Shortcut to Date.setMinutes() */ set minutes(value) { this.setMinutes(value); } /** * Returns two digit minutes */ get minutesFormatted() { return this.parts(undefined, twoDigitTemplate).minute; } /** * Shortcut to Date.getHours() */ get hours() { return this.getHours(); } /** * Shortcut to Date.setHours() */ set hours(value) { this.setHours(value); } getHoursFormatted(hourCycle = 'h12') { return this.parts(undefined, { ...twoDigitTemplate, hourCycle: hourCycle }) .hour; } /** * Get the meridiem of the date. E.g. AM or PM. * If the {@link locale} provides a "dayPeriod" then this will be returned, * otherwise it will return AM or PM. * @param locale */ meridiem(locale = this.locale) { return new Intl.DateTimeFormat(locale, { hour: 'numeric', hour12: true, }) .formatToParts(this) .find((p) => p.type === 'dayPeriod')?.value; } /** * Shortcut to Date.getDate() */ get date() { return this.getDate(); } /** * Shortcut to Date.setDate() */ set date(value) { this.setDate(value); } /** * Return two digit date */ get dateFormatted() { return this.parts(undefined, twoDigitTemplate).day; } /** * Shortcut to Date.getDay() */ get weekDay() { return this.getDay(); } /** * Shortcut to Date.getMonth() */ get month() { return this.getMonth(); } /** * Shortcut to Date.setMonth() */ set month(value) { const targetMonth = new Date(this.year, value + 1); targetMonth.setDate(0); const endOfMonth = targetMonth.getDate(); if (this.date > endOfMonth) { this.date = endOfMonth; } this.setMonth(value); } /** * Return two digit, human expected month. E.g. January = 1, December = 12 */ get monthFormatted() { return this.parts(undefined, twoDigitTemplate).month; } /** * Shortcut to Date.getFullYear() */ get year() { return this.getFullYear(); } /** * Shortcut to Date.setFullYear() */ set year(value) { this.setFullYear(value); } // borrowed a bunch of stuff from Luxon /** * Gets the week of the year */ get week() { const ordinal = this.computeOrdinal(), weekday = this.getUTCDay(); let weekNumber = Math.floor((ordinal - weekday + 10) / 7); if (weekNumber < 1) { weekNumber = this.weeksInWeekYear(this.year - 1); } else if (weekNumber > this.weeksInWeekYear(this.year)) { weekNumber = 1; } return weekNumber; } weeksInWeekYear(weekYear) { const p1 = (weekYear + Math.floor(weekYear / 4) - Math.floor(weekYear / 100) + Math.floor(weekYear / 400)) % 7, last = weekYear - 1, p2 = (last + Math.floor(last / 4) - Math.floor(last / 100) + Math.floor(last / 400)) % 7; return p1 === 4 || p2 === 3 ? 53 : 52; } get isLeapYear() { return (this.year % 4 === 0 && (this.year % 100 !== 0 || this.year % 400 === 0)); } computeOrdinal() { return (this.date + (this.isLeapYear ? this.leapLadder : this.nonLeapLadder)[this.month]); } } class TdError extends Error { } class ErrorMessages { constructor() { this.base = 'TD:'; //#endregion //#region used with notify.error /** * Used with an Error Event type if the user selects a date that * fails restriction validation. */ this.failedToSetInvalidDate = 'Failed to set invalid date'; /** * Used with an Error Event type when a user changes the value of the * input field directly, and does not provide a valid date. */ this.failedToParseInput = 'Failed parse input field'; //#endregion } //#region out to console /** * Throws an error indicating that a key in the options object is invalid. * @param optionName */ unexpectedOption(optionName) { const error = new TdError(`${this.base} Unexpected option: ${optionName} does not match a known option.`); error.code = 1; throw error; } /** * Throws an error indicating that one more keys in the options object is invalid. * @param optionName */ unexpectedOptions(optionName) { const error = new TdError(`${this.base}: ${optionName.join(', ')}`); error.code = 1; throw error; } /** * Throws an error when an option is provide an unsupported value. * For example a value of 'cheese' for toolbarPlacement which only supports * 'top', 'bottom', 'default'. * @param optionName * @param badValue * @param validOptions */ unexpectedOptionValue(optionName, badValue, validOptions) { const error = new TdError(`${this.base} Unexpected option value: ${optionName} does not accept a value of "${badValue}". Valid values are: ${validOptions.join(', ')}`); error.code = 2; throw error; } /** * Throws an error when an option value is the wrong type. * For example a string value was provided to multipleDates which only * supports true or false. * @param optionName * @param badType * @param expectedType */ typeMismatch(optionName, badType, expectedType) { const error = new TdError(`${this.base} Mismatch types: ${optionName} has a type of ${badType} instead of the required ${expectedType}`); error.code = 3; throw error; } /** * Throws an error when an option value is outside of the expected range. * For example restrictions.daysOfWeekDisabled excepts a value between 0 and 6. * @param optionName * @param lower * @param upper */ numbersOutOfRange(optionName, lower, upper) { const error = new TdError(`${this.base} ${optionName} expected an array of number between ${lower} and ${upper}.`); error.code = 4; throw error; } /** * Throws an error when a value for a date options couldn't be parsed. Either * the option was an invalid string or an invalid Date object. * @param optionName * @param date * @param soft If true, logs a warning instead of an error. */ //eslint-disable-next-line @typescript-eslint/no-explicit-any failedToParseDate(optionName, date, soft = false) { const error = new TdError(`${this.base} Could not correctly parse "${date}" to a date for ${optionName}.`); error.code = 5; if (!soft) throw error; console.warn(error); } /** * Throws when an element to attach to was not provided in the constructor. */ mustProvideElement() { const error = new TdError(`${this.base} No element was provided.`); error.code = 6; throw error; } /** * Throws if providing an array for the events to subscribe method doesn't have * the same number of callbacks. E.g., subscribe([1,2], [1]) */ subscribeMismatch() { const error = new TdError(`${this.base} The subscribed events does not match the number of callbacks`); error.code = 7; throw error; } /** * Throws if the configuration has conflicting rules e.g. minDate is after maxDate */ conflictingConfiguration(message) { const error = new TdError(`${this.base} A configuration value conflicts with another rule. ${message}`); error.code = 8; throw error; } /** * customDateFormat errors */ customDateFormatError(message) { const error = new TdError(`${this.base} customDateFormat: ${message}`); error.code = 9; throw error; } /** * Logs a warning if a date option value is provided as a string, instead of * a date/datetime object. */ dateString() { console.warn(`${this.base} Using a string for date options is not recommended unless you specify an ISO string or use the customDateFormat plugin.`); } deprecatedWarning(message, remediation) { console.warn(`${this.base} Warning ${message} is deprecated and will be removed in a future version. ${remediation}`); } throwError(message) { const error = new TdError(`${this.base} ${message}`); error.code = 9; throw error; } } // this is not the way I want this to stay but nested classes seemed to blown up once its compiled. const NAME = 'tempus-dominus', dataKey = 'td'; /** * Events */ class Events { constructor() { this.key = `.${dataKey}`; /** * Change event. Fired when the user selects a date. * See also EventTypes.ChangeEvent */ this.change = `change${this.key}`; /** * Emit when the view changes for example from month view to the year view. * See also EventTypes.ViewUpdateEvent */ this.update = `update${this.key}`; /** * Emits when a selected date or value from the input field fails to meet the provided validation rules. * See also EventTypes.FailEvent */ this.error = `error${this.key}`; /** * Show event * @event Events#show */ this.show = `show${this.key}`; /** * Hide event * @event Events#hide */ this.hide = `hide${this.key}`; // blur and focus are used in the jQuery provider but are otherwise unused. // keyup/down will be used later for keybinding options this.blur = `blur${this.key}`; this.focus = `focus${this.key}`; this.keyup = `keyup${this.key}`; this.keydown = `keydown${this.key}`; } } class Css { constructor() { /** * The outer element for the widget. */ this.widget = `${NAME}-widget`; /** * Hold the previous, next and switcher divs */ this.calendarHeader = 'calendar-header'; /** * The element for the action to change the calendar view. E.g. month -> year. */ this.switch = 'picker-switch'; /** * The elements for all the toolbar options */ this.toolbar = 'toolbar'; /** * Disables the hover and rounding affect. */ this.noHighlight = 'no-highlight'; /** * Applied to the widget element when the side by side option is in use. */ this.sideBySide = 'timepicker-sbs'; /** * The element for the action to change the calendar view, e.g. August -> July */ this.previous = 'previous'; /** * The element for the action to change the calendar view, e.g. August -> September */ this.next = 'next'; /** * Applied to any action that would violate any restriction options. ALso applied * to an input field if the disabled function is called. */ this.disabled = 'disabled'; /** * Applied to any date that is less than requested view, * e.g. the last day of the previous month. */ this.old = 'old'; /** * Applied to any date that is greater than of requested view, * e.g. the last day of the previous month. */ this.new = 'new'; /** * Applied to any date that is currently selected. */ this.active = 'active'; //#region date element /** * The outer element for the calendar view. */ this.dateContainer = 'date-container'; /** * The outer element for the decades view. */ this.decadesContainer = `${this.dateContainer}-decades`; /** * Applied to elements within the decades container, e.g. 2020, 2030 */ this.decade = 'decade'; /** * The outer element for the years view. */ this.yearsContainer = `${this.dateContainer}-years`; /** * Applied to elements within the years container, e.g. 2021, 2021 */ this.year = 'year'; /** * The outer element for the month view. */ this.monthsContainer = `${this.dateContainer}-months`; /** * Applied to elements within the month container, e.g. January, February */ this.month = 'month'; /** * The outer element for the calendar view. */ this.daysContainer = `${this.dateContainer}-days`; /** * Applied to elements within the day container, e.g. 1, 2..31 */ this.day = 'day'; /** * If display.calendarWeeks is enabled, a column displaying the week of year * is shown. This class is applied to each cell in that column. */ this.calendarWeeks = 'cw'; /** * Applied to the first row of the calendar view, e.g. Sunday, Monday */ this.dayOfTheWeek = 'dow'; /** * Applied to the current date on the calendar view. */ this.today = 'today'; /** * Applied to the locale's weekend dates on the calendar view, e.g. Sunday, Saturday */ this.weekend = 'weekend'; //#endregion //#region time element /** * The outer element for all time related elements. */ this.timeContainer = 'time-container'; /** * Applied the separator columns between time elements, e.g. hour *:* minute *:* second */ this.separator = 'separator'; /** * The outer element for the clock view. */ this.clockContainer = `${this.timeContainer}-clock`; /** * The outer element for the hours selection view. */ this.hourContainer = `${this.timeContainer}-hour`; /** * The outer element for the minutes selection view. */ this.minuteContainer = `${this.timeContainer}-minute`; /** * The outer element for the seconds selection view. */ this.secondContainer = `${this.timeContainer}-second`; /** * Applied to each element in the hours selection view. */ this.hour = 'hour'; /** * Applied to each element in the minutes selection view. */ this.minute = 'minute'; /** * Applied to each element in the seconds selection view. */ this.second = 'second'; /** * Applied AM/PM toggle button. */ this.toggleMeridiem = 'toggleMeridiem'; //#endregion //#region collapse /** * Applied the element of the current view mode, e.g. calendar or clock. */ this.show = 'show'; /** * Applied to the currently showing view mode during a transition * between calendar and clock views */ this.collapsing = 'td-collapsing'; /** * Applied to the currently hidden view mode. */ this.collapse = 'td-collapse'; //#endregion /** * Applied to the widget when the option display.inline is enabled. */ this.inline = 'inline'; /** * Applied to the widget when the option display.theme is light. */ this.lightTheme = 'light'; /** * Applied to the widget when the option display.theme is dark. */ this.darkTheme = 'dark'; /** * Used for detecting if the system color preference is dark mode */ this.isDarkPreferredQuery = '(prefers-color-scheme: dark)'; } } class Namespace { } Namespace.NAME = NAME; // noinspection JSUnusedGlobalSymbols Namespace.dataKey = dataKey; Namespace.events = new Events(); Namespace.css = new Css(); Namespace.errorMessages = new ErrorMessages(); class ServiceLocator { constructor() { this.cache = new Map(); } locate(identifier) { const service = this.cache.get(identifier); if (service) return service; const value = new identifier(); this.cache.set(identifier, value); return value; } } const setupServiceLocator = () => { serviceLocator = new ServiceLocator(); }; let serviceLocator; const CalendarModes = [ { name: 'calendar', className: Namespace.css.daysContainer, unit: exports.Unit.month, step: 1, }, { name: 'months', className: Namespace.css.monthsContainer, unit: exports.Unit.year, step: 1, }, { name: 'years', className: Namespace.css.yearsContainer, unit: exports.Unit.year, step: 10, }, { name: 'decades', className: Namespace.css.decadesContainer, unit: exports.Unit.year, step: 100, }, ]; class OptionsStore { constructor() { this._currentCalendarViewMode = 0; this._viewDate = new DateTime(); this.minimumCalendarViewMode = 0; this.currentView = 'calendar'; } get currentCalendarViewMode() { return this._currentCalendarViewMode; } set currentCalendarViewMode(value) { this._currentCalendarViewMode = value; this.currentView = CalendarModes[value].name; } get viewDate() { return this._viewDate; } set viewDate(v) { this._viewDate = v; if (this.options) this.options.viewDate = v; } /** * When switching back to the calendar from the clock, * this sets currentView to the correct calendar view. */ refreshCurrentView() { this.currentView = CalendarModes[this.currentCalendarViewMode].name; } get isTwelveHour() { return ['h12', 'h11'].includes(this.options.localization.hourCycle); } } /** * Main class for date validation rules based on the options provided. */ class Validation { constructor() { this.optionsStore = serviceLocator.locate(OptionsStore); } /** * Checks to see if the target date is valid based on the rules provided in the options. * Granularity can be provided to check portions of the date instead of the whole. * @param targetDate * @param granularity */ isValid(targetDate, granularity) { if (granularity !== exports.Unit.month && this.optionsStore.options.restrictions.disabledDates.length > 0 && this._isInDisabledDates(targetDate)) { return false; } if (granularity !== exports.Unit.month && this.optionsStore.options.restrictions.enabledDates.length > 0 && !this._isInEnabledDates(targetDate)) { return false; } if (granularity !== exports.Unit.month && granularity !== exports.Unit.year && this.optionsStore.options.restrictions.daysOfWeekDisabled?.length > 0 && this.optionsStore.options.restrictions.daysOfWeekDisabled.indexOf(targetDate.weekDay) !== -1) { return false; } if (this.optionsStore.options.restrictions.minDate && targetDate.isBefore(this.optionsStore.options.restrictions.minDate, granularity)) { return false; } if (this.optionsStore.options.restrictions.maxDate && targetDate.isAfter(this.optionsStore.options.restrictions.maxDate, granularity)) { return false; } if (granularity === exports.Unit.hours || granularity === exports.Unit.minutes || granularity === exports.Unit.seconds) { if (this.optionsStore.options.restrictions.disabledHours.length > 0 && this._isInDisabledHours(targetDate)) { return false; } if (this.optionsStore.options.restrictions.enabledHours.length > 0 && !this._isInEnabledHours(targetDate)) { return false; } if (this.optionsStore.options.restrictions.disabledTimeIntervals.length > 0) { for (const disabledTimeIntervals of this.optionsStore.options .restrictions.disabledTimeIntervals) { if (targetDate.isBetween(disabledTimeIntervals.from, disabledTimeIntervals.to)) return false; } } } return true; } /** * Checks to see if the disabledDates option is in use and returns true (meaning invalid) * if the `testDate` is with in the array. Granularity is by date. * @param testDate * @private */ _isInDisabledDates(testDate) { if (!this.optionsStore.options.restrictions.disabledDates || this.optionsStore.options.restrictions.disabledDates.length === 0) return false; return this.optionsStore.options.restrictions.disabledDates.find((x) => x.isSame(testDate, exports.Unit.date)); } /** * Checks to see if the enabledDates option is in use and returns true (meaning valid) * if the `testDate` is with in the array. Granularity is by date. * @param testDate * @private */ _isInEnabledDates(testDate) { if (!this.optionsStore.options.restrictions.enabledDates || this.optionsStore.options.restrictions.enabledDates.length === 0) return true; return this.optionsStore.options.restrictions.enabledDates.find((x) => x.isSame(testDate, exports.Unit.date)); } /** * Checks to see if the disabledHours option is in use and returns true (meaning invalid) * if the `testDate` is with in the array. Granularity is by hours. * @param testDate * @private */ _isInDisabledHours(testDate) { if (!this.optionsStore.options.restrictions.disabledHours || this.optionsStore.options.restrictions.disabledHours.length === 0) return false; const formattedDate = testDate.hours; return this.optionsStore.options.restrictions.disabledHours.find((x) => x === formattedDate); } /** * Checks to see if the enabledHours option is in use and returns true (meaning valid) * if the `testDate` is with in the array. Granularity is by hours. * @param testDate * @private */ _isInEnabledHours(testDate) { if (!this.optionsStore.options.restrictions.enabledHours || this.optionsStore.options.restrictions.enabledHours.length === 0) return true; const formattedDate = testDate.hours; return this.optionsStore.options.restrictions.enabledHours.find((x) => x === formattedDate); } } class EventEmitter { constructor() { this.subscribers = []; } subscribe(callback) { this.subscribers.push(callback); return this.unsubscribe.bind(this, this.subscribers.length - 1); } unsubscribe(index) { this.subscribers.splice(index, 1); } emit(value) { this.subscribers.forEach((callback) => { callback(value); }); } destroy() { this.subscribers = null; this.subscribers = []; } } class EventEmitters { constructor() { this.triggerEvent = new EventEmitter(); this.viewUpdate = new EventEmitter(); this.updateDisplay = new EventEmitter(); this.action = new EventEmitter(); //eslint-disable-line @typescript-eslint/no-explicit-any this.updateViewDate = new EventEmitter(); } destroy() { this.triggerEvent.destroy(); this.viewUpdate.destroy(); this.updateDisplay.destroy(); this.action.destroy(); this.updateViewDate.destroy(); } } const DefaultOptions = { restrictions: { minDate: undefined, maxDate: undefined, disabledDates: [], enabledDates: [], daysOfWeekDisabled: [], disabledTimeIntervals: [], disabledHours: [], enabledHours: [], }, display: { icons: { type: 'icons', time: 'fa-solid fa-clock', date: 'fa-solid fa-calendar', up: 'fa-solid fa-arrow-up', down: 'fa-solid fa-arrow-down', previous: 'fa-solid fa-chevron-left', next: 'fa-solid fa-chevron-right', today: 'fa-solid fa-calendar-check', clear: 'fa-solid fa-trash', close: 'fa-solid fa-xmark', }, sideBySide: false, calendarWeeks: false, viewMode: 'calendar', toolbarPlacement: 'bottom', keepOpen: false, buttons: { today: false, clear: false, close: false, }, components: { calendar: true, date: true, month: true, year: true, decades: true, clock: true, hours: true, minutes: true, seconds: false, useTwentyfourHour: undefined, }, inline: false, theme: 'auto', }, stepping: 1, useCurrent: true, defaultDate: undefined, localization: { today: 'Go to today', clear: 'Clear selection', close: 'Close the picker', selectMonth: 'Select Month', previousMonth: 'Previous Month', nextMonth: 'Next Month', selectYear: 'Select Year', previousYear: 'Previous Year', nextYear: 'Next Year', selectDecade: 'Select Decade', previousDecade: 'Previous Decade', nextDecade: 'Next Decade', previousCentury: 'Previous Century', nextCentury: 'Next Century', pickHour: 'Pick Hour', incrementHour: 'Increment Hour', decrementHour: 'Decrement Hour', pickMinute: 'Pick Minute', incrementMinute: 'Increment Minute', decrementMinute: 'Decrement Minute', pickSecond: 'Pick Second', incrementSecond: 'Increment Second', decrementSecond: 'Decrement Second', toggleMeridiem: 'Toggle Meridiem', selectTime: 'Select Time', selectDate: 'Select Date', dayViewHeaderFormat: { month: 'long', year: '2-digit' }, locale: 'default', hourCycle: undefined, startOfTheWeek: 0, /** * This is only used with the customDateFormat plugin */ dateFormats: { LTS: 'h:mm:ss T', LT: 'h:mm T', L: 'MM/dd/yyyy', LL: 'MMMM d, yyyy', LLL: 'MMMM d, yyyy h:mm T', LLLL: 'dddd, MMMM d, yyyy h:mm T', }, /** * This is only used with the customDateFormat plugin */ ordinal: (n) => n, /** * This is only used with the customDateFormat plugin */ format: 'L LT', }, keepInvalid: false, debug: false, allowInputToggle: false, viewDate: new DateTime(), multipleDates: false, multipleDatesSeparator: '; ', promptTimeOnDateChange: false, promptTimeOnDateChangeTransitionDelay: 200, meta: {}, container: undefined, }; /** * Attempts to prove `d` is a DateTime or Date or can be converted into one. * @param d If a string will attempt creating a date from it. * @param localization object containing locale and format settings. Only used with the custom formats * @private */ function tryConvertToDateTime(d, localization) { if (d.constructor.name === DateTime.name) return d; if (d.constructor.name === Date.name) { return DateTime.convert(d); } if (typeof d === typeof '') { const dateTime = DateTime.fromString(d, localization); if (JSON.stringify(dateTime) === 'null') { return null; } return dateTime; } return null; } /** * Attempts to convert `d` to a DateTime object * @param d value to convert * @param optionName Provides text to error messages e.g. disabledDates * @param localization object containing locale and format settings. Only used with the custom formats */ function convertToDateTime(d, optionName, localization) { if (typeof d === typeof '' && optionName !== 'input') { Namespace.errorMessages.dateString(); } const converted = tryConvertToDateTime(d, localization); if (!converted) { Namespace.errorMessages.failedToParseDate(optionName, d, optionName === 'input'); } return converted; } /** * Type checks that `value` is an array of Date or DateTime * @param optionName Provides text to error messages e.g. disabledDates * @param value Option value * @param providedType Used to provide text to error messages * @param localization */ function typeCheckDateArray(optionName, value, //eslint-disable-line @typescript-eslint/no-explicit-any providedType, localization) { if (!Array.isArray(value)) { Namespace.errorMessages.typeMismatch(optionName, providedType, 'array of DateTime or Date'); } for (let i = 0; i < value.length; i++) { const d = value[i]; const dateTime = convertToDateTime(d, optionName, localization); if (!dateTime) { Namespace.errorMessages.typeMismatch(optionName, typeof d, 'DateTime or Date'); } dateTime.setLocale(localization?.locale ?? 'default'); value[i] = dateTime; } } /** * Type checks that `value` is an array of numbers * @param optionName Provides text to error messages e.g. disabledDates * @param value Option value * @param providedType Used to provide text to error messages */ function typeCheckNumberArray(optionName, value, //eslint-disable-line @typescript-eslint/no-explicit-any providedType) { if (!Array.isArray(value) || value.some((x) => typeof x !== typeof 0)) { Namespace.errorMessages.typeMismatch(optionName, providedType, 'array of numbers'); } } function mandatoryDate(key) { return ({ value, providedType, localization }) => { const dateTime = convertToDateTime(value, key, localization); if (dateTime !== undefined) { dateTime.setLocale(localization.locale); return dateTime; } Namespace.errorMessages.typeMismatch(key, providedType, 'DateTime or Date'); }; } function optionalDate(key) { const mandatory = mandatoryDate(key); return (args) => { if (args.value === undefined) { return args.value; } return mandatory(args); }; } function numbersInRange(key, lower, upper) { return ({ value, providedType }) => { if (value === undefined) { return []; } typeCheckNumberArray(key, value, providedType); if (value.some((x) => x < lower || x > upper)) Namespace.errorMessages.numbersOutOfRange(key, lower, upper); return value; }; } function validHourRange(key) { return numbersInRange(key, 0, 23); } function validDateArray(key) { return ({ value, providedType, localization }) => { if (value === undefined) { return []; } typeCheckDateArray(key, value, providedType, localization); return value; }; } function validKeyOption(keyOptions) { return ({ value, path }) => { if (!keyOptions.includes(value)) Namespace.errorMessages.unexpectedOptionValue(path.substring(1), value, keyOptions); return value; }; } const optionProcessors = Object.freeze({ defaultDate: mandatoryDate('defaultDate'), viewDate: mandatoryDate('viewDate'), minDate: optionalDate('restrictions.minDate'), maxDate: optionalDate('restrictions.maxDate'), disabledHours: validHourRange('restrictions.disabledHours'), enabledHours: validHourRange('restrictions.enabledHours'), disabledDates: validDateArray('restrictions.disabledDates'), enabledDates: validDateArray('restrictions.enabledDates'), daysOfWeekDisabled: numbersInRange('restrictions.daysOfWeekDisabled', 0, 6), disabledTimeIntervals: ({ key, value, providedType, localization }) => { if (value === undefined) { return []; } if (!Array.isArray(value)) { Namespace.errorMessages.typeMismatch(key, providedType, 'array of { from: DateTime|Date, to: DateTime|Date }'); } const valueObject = value; //eslint-disable-line @typescript-eslint/no-explicit-any for (let i = 0; i < valueObject.length; i++) { Object.keys(valueObject[i]).forEach((vk) => { const subOptionName = `${key}[${i}].${vk}`; const d = valueObject[i][vk]; const dateTime = convertToDateTime(d, subOptionName, localization); if (!dateTime) { Namespace.errorMessages.typeMismatch(subOptionName, typeof d, 'DateTime or Date'); } dateTime.setLocale(localization.locale); valueObject[i][vk] = dateTime; }); } return valueObject; }, toolbarPlacement: validKeyOption(['top', 'bottom', 'default']), type: validKeyOption(['icons', 'sprites']), viewMode: validKeyOption([ 'clock', 'calendar', 'months', 'years', 'decades', ]), theme: validKeyOption(['light', 'dark', 'auto']), meta: ({ value }) => value, dayViewHeaderFormat: ({ value }) => value, container: ({ value, path }) => { if (value && !(value instanceof HTMLElement || value instanceof Element || value?.appendChild)) { Namespace.errorMessages.typeMismatch(path.substring(1), typeof value, 'HTMLElement'); } return value; }, useTwentyfourHour: ({ value, path, providedType, defaultType }) => { Namespace.errorMessages.deprecatedWarning('useTwentyfourHour', 'Please use "options.localization.hourCycle" instead'); if (value === undefined || providedType === 'boolean') return value; Namespace.errorMessages.typeMismatch(path, providedType, defaultType); }, hourCycle: validKeyOption(['h11', 'h12', 'h23', 'h24']), }); const defaultProcessor = ({ value, defaultType, providedType, path, }) => { switch (defaultType) { case 'boolean': return value === 'true' || value === true; case 'number': return +value; case 'string': return value.toString(); case 'object': return {}; case 'function': return value; default: Namespace.errorMessages.typeMismatch(path, providedType, defaultType); } }; function processKey(args) { return (optionProcessors[args.key] || defaultProcessor)(args); } class OptionConverter { static deepCopy(input) { const o = {}; Object.keys(input).forEach((key) => { const inputElement = input[key]; if (inputElement instanceof DateTime) { o[key] = inputElement.clone; return; } else if (inputElement instanceof Date) { o[key] = new Date(inputElement.valueOf()); return; } o[key] = inputElement; if (typeof inputElement !== 'object' || inputElement instanceof HTMLElement || inputElement instanceof Element) return; if (!Array.isArray(inputElement)) { o[key] = OptionConverter.deepCopy(inputElement); } }); return o; } /** * Finds value out of an object based on a string, period delimited, path * @param paths * @param obj */ static objectPath(paths, obj) { if (paths.charAt(0) === '.') paths = paths.slice(1); if (!paths) return obj; return paths .split('.') .reduce((value, key) => OptionConverter.isValue(value) || OptionConverter.isValue(value[key]) ? value[key] : undefined, obj); } /** * The spread operator caused sub keys to be missing after merging. * This is to fix that issue by using spread on the child objects first. * Also handles complex options like disabledDates * @param provided An option from new providedOptions * @param copyTo Destination object. This was added to prevent reference copies * @param path * @param localization */ static spread(provided, copyTo, path = '', localization) { const defaultOptions = OptionConverter.objectPath(path, DefaultOptions); const unsupportedOptions = Object.keys(provided).filter((x) => !Object.keys(defaultOptions).includes(x)); if (unsupportedOptions.length > 0) { const flattenedOptions = OptionConverter.getFlattenDefaultOptions(); const errors = unsupportedOptions.map((x) => { let error = `"${path}.${x}" in not a known option.`; const didYouMean = flattenedOptions.find((y) => y.includes(x)); if (didYouMean) error += ` Did you mean "${didYouMean}"?`; return error; }); Namespace.errorMessages.unexpectedOptions(errors); } Object.keys(provided) .filter((key) => key !== '__proto__' && key !== 'constructor') .forEach((key) => { path += `.${key}`; if (path.charAt(0) === '.') path = path.slice(1); const defaultOptionValue = defaultOptions[key]; const providedType = typeof provided[key]; const defaultType = typeof defaultOptionValue; const value = provided[key]; if (value === undefined || value === null) { copyTo[key] = value; path = path.substring(0, path.lastIndexOf(`.${key}`)); return; } if (typeof defaultOptionValue === 'object' && !Array.isArray(provided[key]) && !(defaultOptionValue instanceof Date || OptionConverter.ignoreProperties.includes(key))) { OptionConverter.spread(provided[key], copyTo[key], path, localization); } else { copyTo[key] = OptionConverter.processKey(key, value, providedType, defaultType, path, localization); } path = path.substring(0, path.lastIndexOf(`.${key}`)); }); } static processKey(key, value, //eslint-disable-line @typescript-eslint/no-explicit-any providedType, defaultType, path, localization) { return processKey({ key, value, providedType, defaultType, path, localization, }); } static _mergeOptions(providedOptions, mergeTo) { const newConfig = OptionConverter.deepCopy(mergeTo); //see if the options specify a locale const localization = mergeTo.localization?.locale !== 'default' ? mergeTo.localization : providedOptions?.localization || DefaultOptions.localization; OptionConverter.spread(providedOptions, newConfig, '', localization); return newConfig; } static _dataToOptions(element, options) { const eData = JSON.parse(JSON.stringify(element.dataset)); if (eData?.tdTargetInput) delete eData.tdTargetInput; if (eData?.tdTargetToggle) delete eData.tdTargetToggle; if (!eData || Object.keys(eData).length === 0 || eData.constructor !== DOMStringMap) return options; const dataOptions = {}; // because dataset returns camelCase including the 'td' key the option // key won't align const objectToNormalized = (object) => { const lowered = {}; Object.keys(object).forEach((x) => { lowered[x.toLowerCase()] = x; }); return lowered; }; const rabbitHole = (split, index, optionSubgroup, value) => { // first round = display { ... } const normalizedOptions = objectToNormalized(optionSubgroup); const keyOption = normalizedOptions[split[index].toLowerCase()]; const internalObject = {}; if (keyOption === undefined) return internalObject; // if this is another object, continue down the rabbit hole if (optionSubgroup[keyOption].constructor === Object) { index++; internalObject[keyOption] = rabbitHole(split, index, optionSubgroup[keyOption], value); } else { internalObject[keyOption] = value; } return internalObject; }; const optionsLower = objectToNormalized(options); Object.keys(eData) .filter((x) => x.startsWith(Namespace.dataKey)) .map((x) => x.substring(2)) .forEach((key) => { let keyOption = optionsLower[key.toLowerCase()]; // dataset merges dashes to camelCase... yay // i.e. key = display_components_seconds if (key.includes('_')) { // [display, components, seconds] const split = key.split('_'); // display keyOption = optionsLower[split[0].toLowerCase()]; if (keyOption !== undefined && options[keyOption].constructor === Object) { dataOptions[keyOption] = rabbitHole(split, 1, options[keyOption], eData[`td${key}`]); } } // or key = multipleDate else if (keyOption !== undefined) { dataOptions[keyOption] = eData[`td${key}`]; } }); return this._mergeOptions(dataOptions, options); } /** * Attempts to prove `d` is a DateTime or Date or can be converted into one. * @param d If a string will attempt creating a date from it. * @param localization object containing locale and format settings. Only used with the custom formats * @private */ static _dateTypeCheck(d, //eslint-disable-line @typescript-eslint/no-explicit-any localization) { return tryConvertToDateTime(d, localization); } /** * Type checks that `value` is an array of Date or DateTime * @param optionName Provides text to error messages e.g. disabledDates * @param value Option value * @param providedType Used to provide text to error messages * @param localization */ static _typeCheckDateArray(optionName, value, providedType, localization) { return typeCheckDateArray(optionName, value, providedType, localization); } /** * Type checks that `value` is an array of numbers * @param optionName Provides text to error messages e.g. disabledDates * @param value Option value * @param providedType Used to provide text to error messages */ static _typeCheckNumberArray(optionName, value, providedType) { return typeCheckNumberArray(optionName, value, providedType); } /** * Attempts to convert `d` to a DateTime object * @param d value to convert * @param optionName Provides text to error messages e.g. disabledDates * @param localization object containing locale and format settings. Only used with the custom formats */ static dateConversion(d, //eslint-disable-line @typescript-eslint/no-explicit-any optionName, localization) { return convertToDateTime(d, optionName, localization); } static getFlattenDefaultOptions() { if (this._flattenDefaults) return this._flattenDefaults; const deepKeys = (t, pre = []) => { if (Array.isArray(t)) return []; if (Object(t) === t) { return Object.entries(t).flatMap(([k, v]) => deepKeys(v, [...pre, k])); } else { return pre.join('.'); } }; this._flattenDefaults = deepKeys(DefaultOptions); return this._flattenDefaults; } /** * Some options conflict like min/max date. Verify that these kinds of options * are set correctly. * @param config */ static _validateConflicts(config) { if (config.display.sideBySide && (!config.display.components.clock || !(config.display.components.hours || config.display.components.minutes || config.display.components.seconds))) { Namespace.errorMessages.conflictingConfiguration('Cannot use side by side mode without the clock components'); } if (config.restrictions.minDate && config.restrictions.maxDate) { if (config.restrictions.minDate.isAfter(config.restrictions.maxDate)) { Namespace.errorMessages.conflictingConfiguration('minDate is after maxDate'); } if (config.restrictions.maxDate.isBefore(config.restrictions.minDate)) { Namespace.errorMessages.conflictingConfiguration('maxDate is before minDate'); } } } } OptionConverter.ignoreProperties = [ 'meta', 'dayViewHeaderFormat', 'container', 'dateForms', 'ordinal', ]; OptionConverter.isValue = (a) => a != null; // everything except undefined + null class Dates { constructor() { this._dates = []; this.optionsStore = serviceLocator.locate(OptionsStore); this.validation = serviceLocator.locate(Validation); this._eventEmitters = serviceLocator.locate(EventEmitters); } /** * Returns the array of selected dates */ get picked() { return this._dates; } /** * Returns the last picked value. */ get lastPicked() { return this._dates[this.lastPickedIndex]; } /** * Returns the length of picked dates -1 or 0 if none are selected. */ get lastPickedIndex() { if (this._dates.length === 0) return 0; return this._dates.length - 1; } /** * Formats a DateTime object to a string. Used when setting the input value. * @param date */ formatInput(date) { const components = this.optionsStore.options.display.components; if (!date) return ''; return date.format({ year: components.calendar && components.year ? 'numeric' : undefined, month: components.calendar && components.month ? '2-digit' : undefined, day: components.calendar && components.date ? '2-digit' : undefined, hour: components.clock && components.hours ? '2-digit' : undefined, minute: components.clock && components.minutes ? '2-digit' : undefined, second: components.clock && components.seconds ? '2-digit' : undefined, hourCycle: this.optionsStore.options.localization.hourCycle, }); } /** * parse the value into a DateTime object. * this can be overwritten to supply your own parsing. */ //eslint-disable-next-line @typescript-eslint/no-explicit-any parseInput(value) { return OptionConverter.dateConversion(value, 'input', this.optionsStore.options.localization); } /** * Tries to convert the provided value to a DateTime object. * If value is null|undefined then clear the value of the provided index (or 0). * @param value Value to convert or null|undefined * @param index When using multidates this is the index in the array */ //eslint-disable-next-line @typescript-eslint/no-explicit-any setFromInput(value, index) { if (!value) { this.setValue(undefined, index); return; } const converted = this.parseInput(value); if (converted) { converted.setLocale(this.optionsStore.options.localization.locale); this.setValue(converted, index); } } /** * Adds a new DateTime to selected dates array * @param date */ add(date) { this._dates.push(date); } /** * Returns true if the `targetDate` is part of the selected dates array. * If `unit` is provided then a granularity to that unit will be used. * @param targetDate * @param unit */ isPicked(targetDate, unit) { if (!unit) return this._dates.find((x) => x === targetDate) !== undefined; const format = getFormatByUnit(unit); const innerDateFormatted = targetDate.format(format); return (this._dates .map((x) => x.format(format)) .find((x) => x === innerDateFormatted) !== undefined); } /** * Returns the index at which `targetDate` is in the array. * This is used for updating or removing a date when multi-date is used * If `unit` is provided then a granularity to that unit will be used. * @param targetDate * @param unit */ pickedIndex(targetDate, unit) { if (!unit) return this._dates.indexOf(targetDate); const format = getFormatByUnit(unit); const innerDateFormatted = targetDate.format(format); return this._dates.map((x) => x.format(format)).indexOf(innerDateFormatted); } /** * Clears all selected dates. */ clear() { this.optionsStore.unset = true; this._eventEmitters.triggerEvent.emit({ type: Namespace.events.change, date: undefined, oldDate: this.lastPicked, isClear: true, isValid: true, }); this._dates = []; } /** * Find the "book end" years given a `year` and a `factor` * @param factor e.g. 100 for decades * @param year e.g. 2021 */ static getStartEndYear(factor, year) { const step = factor / 10, startYear = Math.floor(year / factor) * factor, endYear = startYear + step * 9, focusValue = Math.floor(year / step) * step; return [startYear, endYear, focusValue]; } updateInput(target) { if (!this.optionsStore.input) return; let newValue = this.formatInput(target); if (this.optionsStore.options.multipleDates) { newValue = this._dates .map((d) => this.formatInput(d)) .join(this.optionsStore.options.multipleDatesSeparator); } if (this.optionsStore.input.value != newValue) this.optionsStore.input.value = newValue; } /** * Attempts to either clear or set the `target` date at `index`. * If the `target` is null then the date will be cleared. * If multi-date is being used then it will be removed from the array. * If `target` is valid and multi-date is used then if `index` is * provided the date at that index will be replaced, otherwise it is appended. * @param target * @param index */ setValue(target, index) { const noIndex = typeof index === 'undefined', isClear = !target && noIndex; let oldDate = this.optionsStore.unset ? null : this._dates[index]; if (!oldDate && !this.optionsStore.unset && noIndex && isClear) { oldDate = this.lastPicked; } if (target && oldDate?.isSame(target)) { this.updateInput(target); return; } // case of calling setValue(null) if (!target) { if (!this.optionsStore.options.multipleDates || this._dates.length === 1 || isClear) { this.optionsStore.unset = true; this._dates = []; } else { this._dates.splice(index, 1); } this.updateInput(); this._eventEmitters.triggerEvent.emit({ type: Namespace.events.change, date: undefined, oldDate, isClear, isValid: true, }); this._eventEmitters.updateDisplay.emit('all'); return; } index = index || 0; target = target.clone; // minute stepping is being used, force the minute to the closest value if (this.optionsStore.options.stepping !== 1) { target.minutes = Math.round(target.minutes / this.optionsStore.options.stepping) * this.optionsStore.options.stepping; target.seconds = 0; } if (this.validation.isValid(target)) { this._dates[index] = target; this._eventEmitters.updateViewDate.emit(target.clone); this.updateInput(target); this.optionsStore.unset = false; this._eventEmitters.updateDisplay.emit('all'); this._eventEmitters.triggerEvent.emit({ type: Namespace.events.change, date: target, oldDate, isClear, isValid: true, }); return; } if (this.optionsStore.options.keepInvalid) { this._dates[index] = target; this._eventEmitters.updateViewDate.emit(target.clone); this.updateInput(target); this._eventEmitters.triggerEvent.emit({ type: Namespace.events.change, date: target, oldDate, isClear, isValid: false, }); } this._eventEmitters.triggerEvent.emit({ type: Namespace.events.error, reason: Namespace.errorMessages.failedToSetInvalidDate, date: target, oldDate, }); } } var ActionTypes; (function (ActionTypes) { ActionTypes["next"] = "next"; ActionTypes["previous"] = "previous"; ActionTypes["changeCalendarView"] = "changeCalendarView"; ActionTypes["selectMonth"] = "selectMonth"; ActionTypes["selectYear"] = "selectYear"; ActionTypes["selectDecade"] = "selectDecade"; ActionTypes["selectDay"] = "selectDay"; ActionTypes["selectHour"] = "selectHour"; ActionTypes["selectMinute"] = "selectMinute"; ActionTypes["selectSecond"] = "selectSecond"; ActionTypes["incrementHours"] = "incrementHours"; ActionTypes["incrementMinutes"] = "incrementMinutes"; ActionTypes["incrementSeconds"] = "incrementSeconds"; ActionTypes["decrementHours"] = "decrementHours"; ActionTypes["decrementMinutes"] = "decrementMinutes"; ActionTypes["decrementSeconds"] = "decrementSeconds"; ActionTypes["toggleMeridiem"] = "toggleMeridiem"; ActionTypes["togglePicker"] = "togglePicker"; ActionTypes["showClock"] = "showClock"; ActionTypes["showHours"] = "showHours"; ActionTypes["showMinutes"] = "showMinutes"; ActionTypes["showSeconds"] = "showSeconds"; ActionTypes["clear"] = "clear"; ActionTypes["close"] = "close"; ActionTypes["today"] = "today"; })(ActionTypes || (ActionTypes = {})); var ActionTypes$1 = ActionTypes; /** * Creates and updates the grid for `date` */ class DateDisplay { constructor() { this.optionsStore = serviceLocator.locate(OptionsStore); this.dates = serviceLocator.locate(Dates); this.validation = serviceLocator.locate(Validation); } /** * Build the container html for the display * @private */ getPicker() { const container = document.createElement('div'); container.classList.add(Namespace.css.daysContainer); container.append(...this._daysOfTheWeek()); if (this.optionsStore.options.display.calendarWeeks) { const div = document.createElement('div'); div.classList.add(Namespace.css.calendarWeeks, Namespace.css.noHighlight); container.appendChild(div); } for (let i = 0; i < 42; i++) { if (i !== 0 && i % 7 === 0) { if (this.optionsStore.options.display.calendarWeeks) { const div = document.createElement('div'); div.classList.add(Namespace.css.calendarWeeks, Namespace.css.noHighlight); container.appendChild(div); } } const div = document.createElement('div'); div.setAttribute('data-action', ActionTypes$1.selectDay); container.appendChild(div); } return container; } /** * Populates the grid and updates enabled states * @private */ _update(widget, paint) { const container = widget.getElementsByClassName(Namespace.css.daysContainer)[0]; if (this.optionsStore.currentView === 'calendar') { const [previous, switcher, next] = container.parentElement .getElementsByClassName(Namespace.css.calendarHeader)[0] .getElementsByTagName('div'); switcher.setAttribute(Namespace.css.daysContainer, this.optionsStore.viewDate.format(this.optionsStore.options.localization.dayViewHeaderFormat)); this.optionsStore.options.display.components.month ? switcher.classList.remove(Namespace.css.disabled) : switcher.classList.add(Namespace.css.disabled); this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(-1, exports.Unit.month), exports.Unit.month) ? previous.classList.remove(Namespace.css.disabled) : previous.classList.add(Namespace.css.disabled); this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(1, exports.Unit.month), exports.Unit.month) ? next.classList.remove(Namespace.css.disabled) : next.classList.add(Namespace.css.disabled); } const innerDate = this.optionsStore.viewDate.clone .startOf(exports.Unit.month) .startOf('weekDay', this.optionsStore.options.localization.startOfTheWeek) .manipulate(12, exports.Unit.hours); container .querySelectorAll(`[data-action="${ActionTypes$1.selectDay}"], .${Namespace.css.calendarWeeks}`) .forEach((containerClone) => { if (this.optionsStore.options.display.calendarWeeks && containerClone.classList.contains(Namespace.css.calendarWeeks)) { if (containerClone.innerText === '#') return; containerClone.innerText = `${innerDate.week}`; return; } const classes = []; classes.push(Namespace.css.day); if (innerDate.isBefore(this.optionsStore.viewDate, exports.Unit.month)) { classes.push(Namespace.css.old); } if (innerDate.isAfter(this.optionsStore.viewDate, exports.Unit.month)) { classes.push(Namespace.css.new); } if (!this.optionsStore.unset && this.dates.isPicked(innerDate, exports.Unit.date)) { classes.push(Namespace.css.active); } if (!this.validation.isValid(innerDate, exports.Unit.date)) { classes.push(Namespace.css.disabled); } if (innerDate.isSame(new DateTime(), exports.Unit.date)) { classes.push(Namespace.css.today); } if (innerDate.weekDay === 0 || innerDate.weekDay === 6) { classes.push(Namespace.css.weekend); } paint(exports.Unit.date, innerDate, classes, containerClone); containerClone.classList.remove(...containerClone.classList); containerClone.classList.add(...classes); containerClone.setAttribute('data-value', `${innerDate.year}-${innerDate.monthFormatted}-${innerDate.dateFormatted}`); containerClone.setAttribute('data-day', `${innerDate.date}`); containerClone.innerText = innerDate.format({ day: 'numeric' }); innerDate.manipulate(1, exports.Unit.date); }); } /*** * Generates an html row that contains the days of the week. * @private */ _daysOfTheWeek() { const innerDate = this.optionsStore.viewDate.clone .startOf('weekDay', this.optionsStore.options.localization.startOfTheWeek) .startOf(exports.Unit.date); const row = []; document.createElement('div'); if (this.optionsStore.options.display.calendarWeeks) { const htmlDivElement = document.createElement('div'); htmlDivElement.classList.add(Namespace.css.calendarWeeks, Namespace.css.noHighlight); htmlDivElement.innerText = '#'; row.push(htmlDivElement); } for (let i = 0; i < 7; i++) { const htmlDivElement = document.createElement('div'); htmlDivElement.classList.add(Namespace.css.dayOfTheWeek, Namespace.css.noHighlight); htmlDivElement.innerText = innerDate.format({ weekday: 'short' }); innerDate.manipulate(1, exports.Unit.date); row.push(htmlDivElement); } return row; } } /** * Creates and updates the grid for `month` */ class MonthDisplay { constructor() { this.optionsStore = serviceLocator.locate(OptionsStore); this.dates = serviceLocator.locate(Dates); this.validation = serviceLocator.locate(Validation); } /** * Build the container html for the display * @private */ getPicker() { const container = document.createElement('div'); container.classList.add(Namespace.css.monthsContainer); for (let i = 0; i < 12; i++) { const div = document.createElement('div'); div.setAttribute('data-action', ActionTypes$1.selectMonth); container.appendChild(div); } return container; } /** * Populates the grid and updates enabled states * @private */ _update(widget, paint) { const container = widget.getElementsByClassName(Namespace.css.monthsContainer)[0]; if (this.optionsStore.currentView === 'months') { const [previous, switcher, next] = container.parentElement .getElementsByClassName(Namespace.css.calendarHeader)[0] .getElementsByTagName('div'); switcher.setAttribute(Namespace.css.monthsContainer, this.optionsStore.viewDate.format({ year: 'numeric' })); this.optionsStore.options.display.components.year ? switcher.classList.remove(Namespace.css.disabled) : switcher.classList.add(Namespace.css.disabled); this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(-1, exports.Unit.year), exports.Unit.year) ? previous.classList.remove(Namespace.css.disabled) : previous.classList.add(Namespace.css.disabled); this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(1, exports.Unit.year), exports.Unit.year) ? next.classList.remove(Namespace.css.disabled) : next.classList.add(Namespace.css.disabled); } const innerDate = this.optionsStore.viewDate.clone.startOf(exports.Unit.year); container .querySelectorAll(`[data-action="${ActionTypes$1.selectMonth}"]`) .forEach((containerClone, index) => { const classes = []; classes.push(Namespace.css.month); if (!this.optionsStore.unset && this.dates.isPicked(innerDate, exports.Unit.month)) { classes.push(Namespace.css.active); } if (!this.validation.isValid(innerDate, exports.Unit.month)) { classes.push(Namespace.css.disabled); } paint(exports.Unit.month, innerDate, classes, containerClone); containerClone.classList.remove(...containerClone.classList); containerClone.classList.add(...classes); containerClone.setAttribute('data-value', `${index}`); containerClone.innerText = `${innerDate.format({ month: 'short' })}`; innerDate.manipulate(1, exports.Unit.month); }); } } /** * Creates and updates the grid for `year` */ class YearDisplay { constructor() { this.optionsStore = serviceLocator.locate(OptionsStore); this.dates = serviceLocator.locate(Dates); this.validation = serviceLocator.locate(Validation); } /** * Build the container html for the display * @private */ getPicker() { const container = document.createElement('div'); container.classList.add(Namespace.css.yearsContainer); for (let i = 0; i < 12; i++) { const div = document.createElement('div'); div.setAttribute('data-action', ActionTypes$1.selectYear); container.appendChild(div); } return container; } /** * Populates the grid and updates enabled states * @private */ _update(widget, paint) { this._startYear = this.optionsStore.viewDate.clone.manipulate(-1, exports.Unit.year); this._endYear = this.optionsStore.viewDate.clone.manipulate(10, exports.Unit.year); const container = widget.getElementsByClassName(Namespace.css.yearsContainer)[0]; if (this.optionsStore.currentView === 'years') { const [previous, switcher, next] = container.parentElement .getElementsByClassName(Namespace.css.calendarHeader)[0] .getElementsByTagName('div'); switcher.setAttribute(Namespace.css.yearsContainer, `${this._startYear.format({ year: 'numeric' })}-${this._endYear.format({ year: 'numeric', })}`); this.optionsStore.options.display.components.decades ? switcher.classList.remove(Namespace.css.disabled) : switcher.classList.add(Namespace.css.disabled); this.validation.isValid(this._startYear, exports.Unit.year) ? previous.classList.remove(Namespace.css.disabled) : previous.classList.add(Namespace.css.disabled); this.validation.isValid(this._endYear, exports.Unit.year) ? next.classList.remove(Namespace.css.disabled) : next.classList.add(Namespace.css.disabled); } const innerDate = this.optionsStore.viewDate.clone .startOf(exports.Unit.year) .manipulate(-1, exports.Unit.year); container .querySelectorAll(`[data-action="${ActionTypes$1.selectYear}"]`) .forEach((containerClone) => { const classes = []; classes.push(Namespace.css.year); if (!this.optionsStore.unset && this.dates.isPicked(innerDate, exports.Unit.year)) { classes.push(Namespace.css.active); } if (!this.validation.isValid(innerDate, exports.Unit.year)) { classes.push(Namespace.css.disabled); } paint(exports.Unit.year, innerDate, classes, containerClone); containerClone.classList.remove(...containerClone.classList); containerClone.classList.add(...classes); containerClone.setAttribute('data-value', `${innerDate.year}`); containerClone.innerText = innerDate.format({ year: 'numeric' }); innerDate.manipulate(1, exports.Unit.year); }); } } /** * Creates and updates the grid for `seconds` */ class DecadeDisplay { constructor() { this.optionsStore = serviceLocator.locate(OptionsStore); this.dates = serviceLocator.locate(Dates); this.validation = serviceLocator.locate(Validation); } /** * Build the container html for the display * @private */ getPicker() { const container = document.createElement('div'); container.classList.add(Namespace.css.decadesContainer); for (let i = 0; i < 12; i++) { const div = document.createElement('div'); div.setAttribute('data-action', ActionTypes$1.selectDecade); container.appendChild(div); } return container; } /** * Populates the grid and updates enabled states * @private */ _update(widget, paint) { const [start, end] = Dates.getStartEndYear(100, this.optionsStore.viewDate.year); this._startDecade = this.optionsStore.viewDate.clone.startOf(exports.Unit.year); this._startDecade.year = start; this._endDecade = this.optionsStore.viewDate.clone.startOf(exports.Unit.year); this._endDecade.year = end; const container = widget.getElementsByClassName(Namespace.css.decadesContainer)[0]; const [previous, switcher, next] = container.parentElement .getElementsByClassName(Namespace.css.calendarHeader)[0] .getElementsByTagName('div'); if (this.optionsStore.currentView === 'decades') { switcher.setAttribute(Namespace.css.decadesContainer, `${this._startDecade.format({ year: 'numeric', })}-${this._endDecade.format({ year: 'numeric' })}`); this.validation.isValid(this._startDecade, exports.Unit.year) ? previous.classList.remove(Namespace.css.disabled) : previous.classList.add(Namespace.css.disabled); this.validation.isValid(this._endDecade, exports.Unit.year) ? next.classList.remove(Namespace.css.disabled) : next.classList.add(Namespace.css.disabled); } const pickedYears = this.dates.picked.map((x) => x.year); container .querySelectorAll(`[data-action="${ActionTypes$1.selectDecade}"]`) .forEach((containerClone, index) => { if (index === 0) { containerClone.classList.add(Namespace.css.old); if (this._startDecade.year - 10 < 0) { containerClone.textContent = ' '; previous.classList.add(Namespace.css.disabled); containerClone.classList.add(Namespace.css.disabled); containerClone.setAttribute('data-value', ''); return; } else { containerClone.innerText = this._startDecade.clone .manipulate(-10, exports.Unit.year) .format({ year: 'numeric' }); containerClone.setAttribute('data-value', `${this._startDecade.year}`); return; } } const classes = []; classes.push(Namespace.css.decade); const startDecadeYear = this._startDecade.year; const endDecadeYear = this._startDecade.year + 9; if (!this.optionsStore.unset && pickedYears.filter((x) => x >= startDecadeYear && x <= endDecadeYear) .length > 0) { classes.push(Namespace.css.active); } paint('decade', this._startDecade, classes, containerClone); containerClone.classList.remove(...containerClone.classList); containerClone.classList.add(...classes); containerClone.setAttribute('data-value', `${this._startDecade.year}`); containerClone.innerText = `${this._startDecade.format({ year: 'numeric', })}`; this._startDecade.manipulate(10, exports.Unit.year); }); } } /** * Creates the clock display */ class TimeDisplay { constructor() { this._gridColumns = ''; this.optionsStore = serviceLocator.locate(OptionsStore); this.dates = serviceLocator.locate(Dates); this.validation = serviceLocator.locate(Validation); } /** * Build the container html for the clock display * @private */ getPicker(iconTag) { const container = document.createElement('div'); container.classList.add(Namespace.css.clockContainer); container.append(...this._grid(iconTag)); return container; } /** * Populates the various elements with in the clock display * like the current hour and if the manipulation icons are enabled. * @private */ _update(widget) { const timesDiv = (widget.getElementsByClassName(Namespace.css.clockContainer)[0]); const lastPicked = (this.dates.lastPicked || this.optionsStore.viewDate) .clone; timesDiv .querySelectorAll('.disabled') .forEach((element) => element.classList.remove(Namespace.css.disabled)); if (this.optionsStore.options.display.components.hours) { if (!this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(1, exports.Unit.hours), exports.Unit.hours)) { timesDiv .querySelector(`[data-action=${ActionTypes$1.incrementHours}]`) .classList.add(Namespace.css.disabled); } if (!this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(-1, exports.Unit.hours), exports.Unit.hours)) { timesDiv .querySelector(`[data-action=${ActionTypes$1.decrementHours}]`) .classList.add(Namespace.css.disabled); } timesDiv.querySelector(`[data-time-component=${exports.Unit.hours}]`).innerText = lastPicked.getHoursFormatted(this.optionsStore.options.localization.hourCycle); } if (this.optionsStore.options.display.components.minutes) { if (!this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(1, exports.Unit.minutes), exports.Unit.minutes)) { timesDiv .querySelector(`[data-action=${ActionTypes$1.incrementMinutes}]`) .classList.add(Namespace.css.disabled); } if (!this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(-1, exports.Unit.minutes), exports.Unit.minutes)) { timesDiv .querySelector(`[data-action=${ActionTypes$1.decrementMinutes}]`) .classList.add(Namespace.css.disabled); } timesDiv.querySelector(`[data-time-component=${exports.Unit.minutes}]`).innerText = lastPicked.minutesFormatted; } if (this.optionsStore.options.display.components.seconds) { if (!this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(1, exports.Unit.seconds), exports.Unit.seconds)) { timesDiv .querySelector(`[data-action=${ActionTypes$1.incrementSeconds}]`) .classList.add(Namespace.css.disabled); } if (!this.validation.isValid(this.optionsStore.viewDate.clone.manipulate(-1, exports.Unit.seconds), exports.Unit.seconds)) { timesDiv .querySelector(`[data-action=${ActionTypes$1.decrementSeconds}]`) .classList.add(Namespace.css.disabled); } timesDiv.querySelector(`[data-time-component=${exports.Unit.seconds}]`).innerText = lastPicked.secondsFormatted; } if (this.optionsStore.isTwelveHour) { const toggle = timesDiv.querySelector(`[data-action=${ActionTypes$1.toggleMeridiem}]`); toggle.innerText = lastPicked.meridiem(); if (!this.validation.isValid(lastPicked.clone.manipulate(lastPicked.hours >= 12 ? -12 : 12, exports.Unit.hours))) { toggle.classList.add(Namespace.css.disabled); } else { toggle.classList.remove(Namespace.css.disabled); } } timesDiv.style.gridTemplateAreas = `"${this._gridColumns}"`; } /** * Creates the table for the clock display depending on what options are selected. * @private */ _grid(iconTag) { this._gridColumns = ''; const top = [], middle = [], bottom = [], separator = document.createElement('div'), upIcon = iconTag(this.optionsStore.options.display.icons.up), downIcon = iconTag(this.optionsStore.options.display.icons.down); separator.classList.add(Namespace.css.separator, Namespace.css.noHighlight); const separatorColon = separator.cloneNode(true); separatorColon.innerHTML = ':'; const getSeparator = (colon = false) => { return colon ? separatorColon.cloneNode(true) : separator.cloneNode(true); }; if (this.optionsStore.options.display.components.hours) { let divElement = document.createElement('div'); divElement.setAttribute('title', this.optionsStore.options.localization.incrementHour); divElement.setAttribute('data-action', ActionTypes$1.incrementHours); divElement.appendChild(upIcon.cloneNode(true)); top.push(divElement); divElement = document.createElement('div'); divElement.setAttribute('title', this.optionsStore.options.localization.pickHour); divElement.setAttribute('data-action', ActionTypes$1.showHours); divElement.setAttribute('data-time-component', exports.Unit.hours); middle.push(divElement); divElement = document.createElement('div'); divElement.setAttribute('title', this.optionsStore.options.localization.decrementHour); divElement.setAttribute('data-action', ActionTypes$1.decrementHours); divElement.appendChild(downIcon.cloneNode(true)); bottom.push(divElement); this._gridColumns += 'a'; } if (this.optionsStore.options.display.components.minutes) { this._gridColumns += ' a'; if (this.optionsStore.options.display.components.hours) { top.push(getSeparator()); middle.push(getSeparator(true)); bottom.push(getSeparator()); this._gridColumns += ' a'; } let divElement = document.createElement('div'); divElement.setAttribute('title', this.optionsStore.options.localization.incrementMinute); divElement.setAttribute('data-action', ActionTypes$1.incrementMinutes); divElement.appendChild(upIcon.cloneNode(true)); top.push(divElement); divElement = document.createElement('div'); divElement.setAttribute('title', this.optionsStore.options.localization.pickMinute); divElement.setAttribute('data-action', ActionTypes$1.showMinutes); divElement.setAttribute('data-time-component', exports.Unit.minutes); middle.push(divElement); divElement = document.createElement('div'); divElement.setAttribute('title', this.optionsStore.options.localization.decrementMinute); divElement.setAttribute('data-action', ActionTypes$1.decrementMinutes); divElement.appendChild(downIcon.cloneNode(true)); bottom.push(divElement); } if (this.optionsStore.options.display.components.seconds) { this._gridColumns += ' a'; if (this.optionsStore.options.display.components.minutes) { top.push(getSeparator()); middle.push(getSeparator(true)); bottom.push(getSeparator()); this._gridColumns += ' a'; } let divElement = document.createElement('div'); divElement.setAttribute('title', this.optionsStore.options.localization.incrementSecond); divElement.setAttribute('data-action', ActionTypes$1.incrementSeconds); divElement.appendChild(upIcon.cloneNode(true)); top.push(divElement); divElement = document.createElement('div'); divElement.setAttribute('title', this.optionsStore.options.localization.pickSecond); divElement.setAttribute('data-action', ActionTypes$1.showSeconds); divElement.setAttribute('data-time-component', exports.Unit.seconds); middle.push(divElement); divElement = document.createElement('div'); divElement.setAttribute('title', this.optionsStore.options.localization.decrementSecond); divElement.setAttribute('data-action', ActionTypes$1.decrementSeconds); divElement.appendChild(downIcon.cloneNode(true)); bottom.push(divElement); } if (this.optionsStore.isTwelveHour) { this._gridColumns += ' a'; let divElement = getSeparator(); top.push(divElement); const button = document.createElement('button'); button.setAttribute('title', this.optionsStore.options.localization.toggleMeridiem); button.setAttribute('data-action', ActionTypes$1.toggleMeridiem); button.setAttribute('tabindex', '-1'); if (Namespace.css.toggleMeridiem.includes(',')) { //todo move this to paint function? button.classList.add(...Namespace.css.toggleMeridiem.split(',')); } else button.classList.add(Namespace.css.toggleMeridiem); divElement = document.createElement('div'); divElement.classList.add(Namespace.css.noHighlight); divElement.appendChild(button); middle.push(divElement); divElement = getSeparator(); bottom.push(divElement); } this._gridColumns = this._gridColumns.trim(); return [...top, ...middle, ...bottom]; } } /** * Creates and updates the grid for `hours` */ class HourDisplay { constructor() { this.optionsStore = serviceLocator.locate(OptionsStore); this.validation = serviceLocator.locate(Validation); } /** * Build the container html for the display * @private */ getPicker() { const container = document.createElement('div'); container.classList.add(Namespace.css.hourContainer); for (let i = 0; i < (this.optionsStore.isTwelveHour ? 12 : 24); i++) { const div = document.createElement('div'); div.setAttribute('data-action', ActionTypes$1.selectHour); container.appendChild(div); } return container; } /** * Populates the grid and updates enabled states * @private */ _update(widget, paint) { const container = widget.getElementsByClassName(Namespace.css.hourContainer)[0]; const innerDate = this.optionsStore.viewDate.clone.startOf(exports.Unit.date); container .querySelectorAll(`[data-action="${ActionTypes$1.selectHour}"]`) .forEach((containerClone) => { const classes = []; classes.push(Namespace.css.hour); if (!this.validation.isValid(innerDate, exports.Unit.hours)) { classes.push(Namespace.css.disabled); } paint(exports.Unit.hours, innerDate, classes, containerClone); containerClone.classList.remove(...containerClone.classList); containerClone.classList.add(...classes); containerClone.setAttribute('data-value', `${innerDate.hours}`); containerClone.innerText = innerDate.getHoursFormatted(this.optionsStore.options.localization.hourCycle); innerDate.manipulate(1, exports.Unit.hours); }); } } /** * Creates and updates the grid for `minutes` */ class MinuteDisplay { constructor() { this.optionsStore = serviceLocator.locate(OptionsStore); this.validation = serviceLocator.locate(Validation); } /** * Build the container html for the display * @private */ getPicker() { const container = document.createElement('div'); container.classList.add(Namespace.css.minuteContainer); const step = this.optionsStore.options.stepping === 1 ? 5 : this.optionsStore.options.stepping; for (let i = 0; i < 60 / step; i++) { const div = document.createElement('div'); div.setAttribute('data-action', ActionTypes$1.selectMinute); container.appendChild(div); } return container; } /** * Populates the grid and updates enabled states * @private */ _update(widget, paint) { const container = widget.getElementsByClassName(Namespace.css.minuteContainer)[0]; const innerDate = this.optionsStore.viewDate.clone.startOf(exports.Unit.hours); const step = this.optionsStore.options.stepping === 1 ? 5 : this.optionsStore.options.stepping; container .querySelectorAll(`[data-action="${ActionTypes$1.selectMinute}"]`) .forEach((containerClone) => { const classes = []; classes.push(Namespace.css.minute); if (!this.validation.isValid(innerDate, exports.Unit.minutes)) { classes.push(Namespace.css.disabled); } paint(exports.Unit.minutes, innerDate, classes, containerClone); containerClone.classList.remove(...containerClone.classList); containerClone.classList.add(...classes); containerClone.setAttribute('data-value', `${innerDate.minutes}`); containerClone.innerText = innerDate.minutesFormatted; innerDate.manipulate(step, exports.Unit.minutes); }); } } /** * Creates and updates the grid for `seconds` */ class secondDisplay { constructor() { this.optionsStore = serviceLocator.locate(OptionsStore); this.validation = serviceLocator.locate(Validation); } /** * Build the container html for the display * @private */ getPicker() { const container = document.createElement('div'); container.classList.add(Namespace.css.secondContainer); for (let i = 0; i < 12; i++) { const div = document.createElement('div'); div.setAttribute('data-action', ActionTypes$1.selectSecond); container.appendChild(div); } return container; } /** * Populates the grid and updates enabled states * @private */ _update(widget, paint) { const container = widget.getElementsByClassName(Namespace.css.secondContainer)[0]; const innerDate = this.optionsStore.viewDate.clone.startOf(exports.Unit.minutes); container .querySelectorAll(`[data-action="${ActionTypes$1.selectSecond}"]`) .forEach((containerClone) => { const classes = []; classes.push(Namespace.css.second); if (!this.validation.isValid(innerDate, exports.Unit.seconds)) { classes.push(Namespace.css.disabled); } paint(exports.Unit.seconds, innerDate, classes, containerClone); containerClone.classList.remove(...containerClone.classList); containerClone.classList.add(...classes); containerClone.setAttribute('data-value', `${innerDate.seconds}`); containerClone.innerText = innerDate.secondsFormatted; innerDate.manipulate(5, exports.Unit.seconds); }); } } /** * Provides a collapse functionality to the view changes */ class Collapse { /** * Flips the show/hide state of `target` * @param target html element to affect. */ static toggle(target) { if (target.classList.contains(Namespace.css.show)) { this.hide(target); } else { this.show(target); } } /** * Skips any animation or timeouts and immediately set the element to show. * @param target */ static showImmediately(target) { target.classList.remove(Namespace.css.collapsing); target.classList.add(Namespace.css.collapse, Namespace.css.show); target.style.height = ''; } /** * If `target` is not already showing, then show after the animation. * @param target */ static show(target) { if (target.classList.contains(Namespace.css.collapsing) || target.classList.contains(Namespace.css.show)) return; const complete = () => { Collapse.showImmediately(target); }; target.style.height = '0'; target.classList.remove(Namespace.css.collapse); target.classList.add(Namespace.css.collapsing); //eslint-disable-next-line @typescript-eslint/no-unused-vars setTimeout(complete, this.getTransitionDurationFromElement(target)); target.style.height = `${target.scrollHeight}px`; } /** * Skips any animation or timeouts and immediately set the element to hide. * @param target */ static hideImmediately(target) { if (!target) return; target.classList.remove(Namespace.css.collapsing, Namespace.css.show); target.classList.add(Namespace.css.collapse); } /** * If `target` is not already hidden, then hide after the animation. * @param target HTML Element */ static hide(target) { if (target.classList.contains(Namespace.css.collapsing) || !target.classList.contains(Namespace.css.show)) return; const complete = () => { Collapse.hideImmediately(target); }; target.style.height = `${target.getBoundingClientRect()['height']}px`; const reflow = (element) => element.offsetHeight; reflow(target); target.classList.remove(Namespace.css.collapse, Namespace.css.show); target.classList.add(Namespace.css.collapsing); target.style.height = ''; //eslint-disable-next-line @typescript-eslint/no-unused-vars setTimeout(complete, this.getTransitionDurationFromElement(target)); } } /** * Gets the transition duration from the `element` by getting css properties * `transition-duration` and `transition-delay` * @param element HTML Element */ Collapse.getTransitionDurationFromElement = (element) => { if (!element) { return 0; } // Get transition-duration of the element let { transitionDuration, transitionDelay } = window.getComputedStyle(element); const floatTransitionDuration = Number.parseFloat(transitionDuration); const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found if (!floatTransitionDuration && !floatTransitionDelay) { return 0; } // If multiple durations are defined, take the first transitionDuration = transitionDuration.split(',')[0]; transitionDelay = transitionDelay.split(',')[0]; return ((Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * 1000); }; /** * Main class for all things display related. */ class Display { constructor() { this._isVisible = false; /** * A document click event to hide the widget if click is outside * @private * @param e MouseEvent */ this._documentClickEvent = (e) => { if (this.optionsStore.options.debug || window.debug) return; //eslint-disable-line @typescript-eslint/no-explicit-any if (this._isVisible && !e.composedPath().includes(this.widget) && // click inside the widget !e.composedPath()?.includes(this.optionsStore.element) // click on the element ) { this.hide(); } }; /** * Click event for any action like selecting a date * @param e MouseEvent * @private */ this._actionsClickEvent = (e) => { this._eventEmitters.action.emit({ e: e }); }; this.optionsStore = serviceLocator.locate(OptionsStore); this.validation = serviceLocator.locate(Validation); this.dates = serviceLocator.locate(Dates); this.dateDisplay = serviceLocator.locate(DateDisplay); this.monthDisplay = serviceLocator.locate(MonthDisplay); this.yearDisplay = serviceLocator.locate(YearDisplay); this.decadeDisplay = serviceLocator.locate(DecadeDisplay); this.timeDisplay = serviceLocator.locate(TimeDisplay); this.hourDisplay = serviceLocator.locate(HourDisplay); this.minuteDisplay = serviceLocator.locate(MinuteDisplay); this.secondDisplay = serviceLocator.locate(secondDisplay); this._eventEmitters = serviceLocator.locate(EventEmitters); this._widget = undefined; this._eventEmitters.updateDisplay.subscribe((result) => { this._update(result); }); } /** * Returns the widget body or undefined * @private */ get widget() { return this._widget; } /** * Returns this visible state of the picker (shown) */ get isVisible() { return this._isVisible; } /** * Updates the table for a particular unit. Used when an option as changed or * whenever the class list might need to be refreshed. * @param unit * @private */ _update(unit) { if (!this.widget) return; //todo do I want some kind of error catching or other guards here? switch (unit) { case exports.Unit.seconds: this.secondDisplay._update(this.widget, this.paint); break; case exports.Unit.minutes: this.minuteDisplay._update(this.widget, this.paint); break; case exports.Unit.hours: this.hourDisplay._update(this.widget, this.paint); break; case exports.Unit.date: this.dateDisplay._update(this.widget, this.paint); break; case exports.Unit.month: this.monthDisplay._update(this.widget, this.paint); break; case exports.Unit.year: this.yearDisplay._update(this.widget, this.paint); break; case 'clock': if (!this._hasTime) break; this.timeDisplay._update(this.widget); this._update(exports.Unit.hours); this._update(exports.Unit.minutes); this._update(exports.Unit.seconds); break; case 'calendar': this._update(exports.Unit.date); this._update(exports.Unit.year); this._update(exports.Unit.month); this.decadeDisplay._update(this.widget, this.paint); this._updateCalendarHeader(); break; case 'all': if (this._hasTime) { this._update('clock'); } if (this._hasDate) { this._update('calendar'); } } } // noinspection JSUnusedLocalSymbols /** * Allows developers to add/remove classes from an element. * @param _unit * @param _date * @param _classes * @param _element */ /* eslint-disable @typescript-eslint/no-unused-vars */ paint(_unit, _date, _classes, _element) { // implemented in plugin } /* eslint-enable @typescript-eslint/no-unused-vars */ /** * Shows the picker and creates a Popper instance if needed. * Add document click event to hide when clicking outside the picker. * fires Events#show */ show() { if (this.widget == undefined) { if (this.dates.picked.length == 0) { if (this.optionsStore.options.useCurrent && !this.optionsStore.options.defaultDate) { const date = new DateTime().setLocale(this.optionsStore.options.localization.locale); if (!this.optionsStore.options.keepInvalid) { let tries = 0; let direction = 1; if (this.optionsStore.options.restrictions.maxDate?.isBefore(date)) { direction = -1; } while (!this.validation.isValid(date)) { date.manipulate(direction, exports.Unit.date); if (tries > 31) break; tries++; } } this.dates.setValue(date); } if (this.optionsStore.options.defaultDate) { this.dates.setValue(this.optionsStore.options.defaultDate); } } this._buildWidget(); this._updateTheme(); // If modeView is only clock const onlyClock = this._hasTime && !this._hasDate; // reset the view to the clock if there's no date components if (onlyClock) { this.optionsStore.currentView = 'clock'; this._eventEmitters.action.emit({ e: null, action: ActionTypes$1.showClock, }); } // otherwise return to the calendar view else if (!this.optionsStore.currentCalendarViewMode) { this.optionsStore.currentCalendarViewMode = this.optionsStore.minimumCalendarViewMode; } if (!onlyClock && this.optionsStore.options.display.viewMode !== 'clock') { if (this._hasTime) { if (!this.optionsStore.options.display.sideBySide) { Collapse.hideImmediately(this.widget.querySelector(`div.${Namespace.css.timeContainer}`)); } else { Collapse.show(this.widget.querySelector(`div.${Namespace.css.timeContainer}`)); } } Collapse.show(this.widget.querySelector(`div.${Namespace.css.dateContainer}`)); } if (this._hasDate) { this._showMode(); } if (!this.optionsStore.options.display.inline) { // If needed to change the parent container const container = this.optionsStore.options?.container || document.body; container.appendChild(this.widget); this.createPopup(this.optionsStore.element, this.widget, { modifiers: [{ name: 'eventListeners', enabled: true }], //#2400 placement: document.documentElement.dir === 'rtl' ? 'bottom-end' : 'bottom-start', }).then(); } else { this.optionsStore.element.appendChild(this.widget); } if (this.optionsStore.options.display.viewMode == 'clock') { this._eventEmitters.action.emit({ e: null, action: ActionTypes$1.showClock, }); } this.widget .querySelectorAll('[data-action]') .forEach((element) => element.addEventListener('click', this._actionsClickEvent)); // show the clock when using sideBySide if (this._hasTime && this.optionsStore.options.display.sideBySide) { this.timeDisplay._update(this.widget); this.widget.getElementsByClassName(Namespace.css.clockContainer)[0].style.display = 'grid'; } } this.widget.classList.add(Namespace.css.show); if (!this.optionsStore.options.display.inline) { this.updatePopup(); document.addEventListener('click', this._documentClickEvent); } this._eventEmitters.triggerEvent.emit({ type: Namespace.events.show }); this._isVisible = true; } async createPopup(element, widget, //eslint-disable-next-line @typescript-eslint/no-explicit-any options) { let createPopperFunction; //eslint-disable-next-line @typescript-eslint/no-explicit-any if (window?.Popper) { //eslint-disable-next-line @typescript-eslint/no-explicit-any createPopperFunction = window?.Popper?.createPopper; } else { const { createPopper } = await import('@popperjs/core'); createPopperFunction = createPopper; } if (createPopperFunction) { this._popperInstance = createPopperFunction(element, widget, options); } } updatePopup() { this._popperInstance?.update(); } /** * Changes the calendar view mode. E.g. month <-> year * @param direction -/+ number to move currentViewMode * @private */ _showMode(direction) { if (!this.widget) { return; } if (direction) { const max = Math.max(this.optionsStore.minimumCalendarViewMode, Math.min(3, this.optionsStore.currentCalendarViewMode + direction)); if (this.optionsStore.currentCalendarViewMode == max) return; this.optionsStore.currentCalendarViewMode = max; } this.widget .querySelectorAll(`.${Namespace.css.dateContainer} > div:not(.${Namespace.css.calendarHeader}), .${Namespace.css.timeContainer} > div:not(.${Namespace.css.clockContainer})`) .forEach((e) => (e.style.display = 'none')); const datePickerMode = CalendarModes[this.optionsStore.currentCalendarViewMode]; const picker = this.widget.querySelector(`.${datePickerMode.className}`); switch (datePickerMode.className) { case Namespace.css.decadesContainer: this.decadeDisplay._update(this.widget, this.paint); break; case Namespace.css.yearsContainer: this.yearDisplay._update(this.widget, this.paint); break; case Namespace.css.monthsContainer: this.monthDisplay._update(this.widget, this.paint); break; case Namespace.css.daysContainer: this.dateDisplay._update(this.widget, this.paint); break; } picker.style.display = 'grid'; if (this.optionsStore.options.display.sideBySide) (this.widget.querySelectorAll(`.${Namespace.css.clockContainer}`)[0]).style.display = 'grid'; this._updateCalendarHeader(); this._eventEmitters.viewUpdate.emit(); } /** * Changes the theme. E.g. light, dark or auto * @param theme the theme name * @private */ _updateTheme(theme) { if (!this.widget) { return; } if (theme) { if (this.optionsStore.options.display.theme === theme) return; this.optionsStore.options.display.theme = theme; } this.widget.classList.remove('light', 'dark'); this.widget.classList.add(this._getThemeClass()); if (this.optionsStore.options.display.theme === 'auto') { window .matchMedia(Namespace.css.isDarkPreferredQuery) .addEventListener('change', () => this._updateTheme()); } else { window .matchMedia(Namespace.css.isDarkPreferredQuery) .removeEventListener('change', () => this._updateTheme()); } } _getThemeClass() { const currentTheme = this.optionsStore.options.display.theme || 'auto'; const isDarkMode = window.matchMedia && window.matchMedia(Namespace.css.isDarkPreferredQuery).matches; switch (currentTheme) { case 'light': return Namespace.css.lightTheme; case 'dark': return Namespace.css.darkTheme; case 'auto': return isDarkMode ? Namespace.css.darkTheme : Namespace.css.lightTheme; } } _updateCalendarHeader() { if (!this._hasDate) return; const showing = [ ...this.widget.querySelector(`.${Namespace.css.dateContainer} div[style*="display: grid"]`).classList, ].find((x) => x.startsWith(Namespace.css.dateContainer)); const [previous, switcher, next] = this.widget .getElementsByClassName(Namespace.css.calendarHeader)[0] .getElementsByTagName('div'); switch (showing) { case Namespace.css.decadesContainer: previous.setAttribute('title', this.optionsStore.options.localization.previousCentury); switcher.setAttribute('title', ''); next.setAttribute('title', this.optionsStore.options.localization.nextCentury); break; case Namespace.css.yearsContainer: previous.setAttribute('title', this.optionsStore.options.localization.previousDecade); switcher.setAttribute('title', this.optionsStore.options.localization.selectDecade); next.setAttribute('title', this.optionsStore.options.localization.nextDecade); break; case Namespace.css.monthsContainer: previous.setAttribute('title', this.optionsStore.options.localization.previousYear); switcher.setAttribute('title', this.optionsStore.options.localization.selectYear); next.setAttribute('title', this.optionsStore.options.localization.nextYear); break; case Namespace.css.daysContainer: previous.setAttribute('title', this.optionsStore.options.localization.previousMonth); switcher.setAttribute('title', this.optionsStore.options.localization.selectMonth); next.setAttribute('title', this.optionsStore.options.localization.nextMonth); switcher.setAttribute(showing, this.optionsStore.viewDate.format(this.optionsStore.options.localization.dayViewHeaderFormat)); break; } switcher.innerText = switcher.getAttribute(showing); } /** * Hides the picker if needed. * Remove document click event to hide when clicking outside the picker. * fires Events#hide */ hide() { if (!this.widget || !this._isVisible) return; this.widget.classList.remove(Namespace.css.show); if (this._isVisible) { this._eventEmitters.triggerEvent.emit({ type: Namespace.events.hide, date: this.optionsStore.unset ? null : this.dates.lastPicked ? this.dates.lastPicked.clone : void 0, }); this._isVisible = false; } document.removeEventListener('click', this._documentClickEvent); } /** * Toggles the picker's open state. Fires a show/hide event depending. */ toggle() { return this._isVisible ? this.hide() : this.show(); } /** * Removes document and data-action click listener and reset the widget * @private */ _dispose() { document.removeEventListener('click', this._documentClickEvent); if (!this.widget) return; this.widget .querySelectorAll('[data-action]') .forEach((element) => element.removeEventListener('click', this._actionsClickEvent)); this.widget.parentNode.removeChild(this.widget); this._widget = undefined; } /** * Builds the widgets html template. * @private */ _buildWidget() { const template = document.createElement('div'); template.classList.add(Namespace.css.widget); const dateView = document.createElement('div'); dateView.classList.add(Namespace.css.dateContainer); dateView.append(this.getHeadTemplate(), this.decadeDisplay.getPicker(), this.yearDisplay.getPicker(), this.monthDisplay.getPicker(), this.dateDisplay.getPicker()); const timeView = document.createElement('div'); timeView.classList.add(Namespace.css.timeContainer); timeView.appendChild(this.timeDisplay.getPicker(this._iconTag.bind(this))); timeView.appendChild(this.hourDisplay.getPicker()); timeView.appendChild(this.minuteDisplay.getPicker()); timeView.appendChild(this.secondDisplay.getPicker()); const toolbar = document.createElement('div'); toolbar.classList.add(Namespace.css.toolbar); toolbar.append(...this.getToolbarElements()); if (this.optionsStore.options.display.inline) { template.classList.add(Namespace.css.inline); } if (this.optionsStore.options.display.calendarWeeks) { template.classList.add('calendarWeeks'); } if (this.optionsStore.options.display.sideBySide && this._hasDate && this._hasTime) { template.classList.add(Namespace.css.sideBySide); if (this.optionsStore.options.display.toolbarPlacement === 'top') { template.appendChild(toolbar); } const row = document.createElement('div'); row.classList.add('td-row'); dateView.classList.add('td-half'); timeView.classList.add('td-half'); row.appendChild(dateView); row.appendChild(timeView); template.appendChild(row); if (this.optionsStore.options.display.toolbarPlacement === 'bottom') { template.appendChild(toolbar); } this._widget = template; return; } if (this.optionsStore.options.display.toolbarPlacement === 'top') { template.appendChild(toolbar); } if (this._hasDate) { if (this._hasTime) { dateView.classList.add(Namespace.css.collapse); if (this.optionsStore.options.display.viewMode !== 'clock') dateView.classList.add(Namespace.css.show); } template.appendChild(dateView); } if (this._hasTime) { if (this._hasDate) { timeView.classList.add(Namespace.css.collapse); if (this.optionsStore.options.display.viewMode === 'clock') timeView.classList.add(Namespace.css.show); } template.appendChild(timeView); } if (this.optionsStore.options.display.toolbarPlacement === 'bottom') { template.appendChild(toolbar); } const arrow = document.createElement('div'); arrow.classList.add('arrow'); arrow.setAttribute('data-popper-arrow', ''); template.appendChild(arrow); this._widget = template; } /** * Returns true if the hours, minutes, or seconds component is turned on */ get _hasTime() { return (this.optionsStore.options.display.components.clock && (this.optionsStore.options.display.components.hours || this.optionsStore.options.display.components.minutes || this.optionsStore.options.display.components.seconds)); } /** * Returns true if the year, month, or date component is turned on */ get _hasDate() { return (this.optionsStore.options.display.components.calendar && (this.optionsStore.options.display.components.year || this.optionsStore.options.display.components.month || this.optionsStore.options.display.components.date)); } /** * Get the toolbar html based on options like buttons.today * @private */ getToolbarElements() { const toolbar = []; if (this.optionsStore.options.display.buttons.today) { const div = document.createElement('div'); div.setAttribute('data-action', ActionTypes$1.today); div.setAttribute('title', this.optionsStore.options.localization.today); div.appendChild(this._iconTag(this.optionsStore.options.display.icons.today)); toolbar.push(div); } if (!this.optionsStore.options.display.sideBySide && this._hasDate && this._hasTime) { let title, icon; if (this.optionsStore.options.display.viewMode === 'clock') { title = this.optionsStore.options.localization.selectDate; icon = this.optionsStore.options.display.icons.date; } else { title = this.optionsStore.options.localization.selectTime; icon = this.optionsStore.options.display.icons.time; } const div = document.createElement('div'); div.setAttribute('data-action', ActionTypes$1.togglePicker); div.setAttribute('title', title); div.appendChild(this._iconTag(icon)); toolbar.push(div); } if (this.optionsStore.options.display.buttons.clear) { const div = document.createElement('div'); div.setAttribute('data-action', ActionTypes$1.clear); div.setAttribute('title', this.optionsStore.options.localization.clear); div.appendChild(this._iconTag(this.optionsStore.options.display.icons.clear)); toolbar.push(div); } if (this.optionsStore.options.display.buttons.close) { const div = document.createElement('div'); div.setAttribute('data-action', ActionTypes$1.close); div.setAttribute('title', this.optionsStore.options.localization.close); div.appendChild(this._iconTag(this.optionsStore.options.display.icons.close)); toolbar.push(div); } return toolbar; } /*** * Builds the base header template with next and previous icons * @private */ getHeadTemplate() { const calendarHeader = document.createElement('div'); calendarHeader.classList.add(Namespace.css.calendarHeader); const previous = document.createElement('div'); previous.classList.add(Namespace.css.previous); previous.setAttribute('data-action', ActionTypes$1.previous); previous.appendChild(this._iconTag(this.optionsStore.options.display.icons.previous)); const switcher = document.createElement('div'); switcher.classList.add(Namespace.css.switch); switcher.setAttribute('data-action', ActionTypes$1.changeCalendarView); const next = document.createElement('div'); next.classList.add(Namespace.css.next); next.setAttribute('data-action', ActionTypes$1.next); next.appendChild(this._iconTag(this.optionsStore.options.display.icons.next)); calendarHeader.append(previous, switcher, next); return calendarHeader; } /** * Builds an icon tag as either an `<i>` * or with icons.type is `sprites` then a svg tag instead * @param iconClass * @private */ _iconTag(iconClass) { if (this.optionsStore.options.display.icons.type === 'sprites') { const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); const icon = document.createElementNS('http://www.w3.org/2000/svg', 'use'); icon.setAttribute('xlink:href', iconClass); // Deprecated. Included for backward compatibility icon.setAttribute('href', iconClass); svg.appendChild(icon); return svg; } const icon = document.createElement('i'); icon.classList.add(...iconClass.split(' ')); return icon; } /** * Causes the widget to get rebuilt on next show. If the picker is already open * then hide and reshow it. * @private */ _rebuild() { const wasVisible = this._isVisible; this._dispose(); if (wasVisible) this.show(); } } /** * */ class Actions { constructor() { this.optionsStore = serviceLocator.locate(OptionsStore); this.dates = serviceLocator.locate(Dates); this.validation = serviceLocator.locate(Validation); this.display = serviceLocator.locate(Display); this._eventEmitters = serviceLocator.locate(EventEmitters); this._eventEmitters.action.subscribe((result) => { this.do(result.e, result.action); }); } /** * Performs the selected `action`. See ActionTypes * @param e This is normally a click event * @param action If not provided, then look for a [data-action] */ //eslint-disable-next-line @typescript-eslint/no-explicit-any do(e, action) { const currentTarget = e?.currentTarget; if (currentTarget?.classList?.contains(Namespace.css.disabled)) return false; action = action || currentTarget?.dataset?.action; const lastPicked = (this.dates.lastPicked || this.optionsStore.viewDate) .clone; switch (action) { case ActionTypes$1.next: case ActionTypes$1.previous: this.handleNextPrevious(action); break; case ActionTypes$1.changeCalendarView: this.display._showMode(1); this.display._updateCalendarHeader(); break; case ActionTypes$1.selectMonth: case ActionTypes$1.selectYear: case ActionTypes$1.selectDecade: this.handleSelectCalendarMode(action, currentTarget); break; case ActionTypes$1.selectDay: this.handleSelectDay(currentTarget); break; case ActionTypes$1.selectHour: { let hour = +currentTarget.dataset.value; if (lastPicked.hours >= 12 && this.optionsStore.isTwelveHour) hour += 12; lastPicked.hours = hour; this.dates.setValue(lastPicked, this.dates.lastPickedIndex); this.hideOrClock(e); break; } case ActionTypes$1.selectMinute: { lastPicked.minutes = +currentTarget.dataset.value; this.dates.setValue(lastPicked, this.dates.lastPickedIndex); this.hideOrClock(e); break; } case ActionTypes$1.selectSecond: { lastPicked.seconds = +currentTarget.dataset.value; this.dates.setValue(lastPicked, this.dates.lastPickedIndex); this.hideOrClock(e); break; } case ActionTypes$1.incrementHours: this.manipulateAndSet(lastPicked, exports.Unit.hours); break; case ActionTypes$1.incrementMinutes: this.manipulateAndSet(lastPicked, exports.Unit.minutes, this.optionsStore.options.stepping); break; case ActionTypes$1.incrementSeconds: this.manipulateAndSet(lastPicked, exports.Unit.seconds); break; case ActionTypes$1.decrementHours: this.manipulateAndSet(lastPicked, exports.Unit.hours, -1); break; case ActionTypes$1.decrementMinutes: this.manipulateAndSet(lastPicked, exports.Unit.minutes, this.optionsStore.options.stepping * -1); break; case ActionTypes$1.decrementSeconds: this.manipulateAndSet(lastPicked, exports.Unit.seconds, -1); break; case ActionTypes$1.toggleMeridiem: this.manipulateAndSet(lastPicked, exports.Unit.hours, this.dates.lastPicked.hours >= 12 ? -12 : 12); break; case ActionTypes$1.togglePicker: this.handleToggle(currentTarget); break; case ActionTypes$1.showClock: case ActionTypes$1.showHours: case ActionTypes$1.showMinutes: case ActionTypes$1.showSeconds: //make sure the clock is actually displaying if (!this.optionsStore.options.display.sideBySide && this.optionsStore.currentView !== 'clock') { //hide calendar Collapse.hideImmediately(this.display.widget.querySelector(`div.${Namespace.css.dateContainer}`)); //show clock Collapse.showImmediately(this.display.widget.querySelector(`div.${Namespace.css.timeContainer}`)); } this.handleShowClockContainers(action); break; case ActionTypes$1.clear: this.dates.setValue(null); this.display._updateCalendarHeader(); break; case ActionTypes$1.close: this.display.hide(); break; case ActionTypes$1.today: { const today = new DateTime().setLocale(this.optionsStore.options.localization.locale); this._eventEmitters.updateViewDate.emit(today); //todo this this really a good idea? if (this.validation.isValid(today, exports.Unit.date)) this.dates.setValue(today, this.dates.lastPickedIndex); break; } } } handleShowClockContainers(action) { if (!this.display._hasTime) { Namespace.errorMessages.throwError('Cannot show clock containers when time is disabled.'); return; } this.optionsStore.currentView = 'clock'; this.display.widget .querySelectorAll(`.${Namespace.css.timeContainer} > div`) .forEach((htmlElement) => (htmlElement.style.display = 'none')); let classToUse = ''; switch (action) { case ActionTypes$1.showClock: classToUse = Namespace.css.clockContainer; this.display._update('clock'); break; case ActionTypes$1.showHours: classToUse = Namespace.css.hourContainer; this.display._update(exports.Unit.hours); break; case ActionTypes$1.showMinutes: classToUse = Namespace.css.minuteContainer; this.display._update(exports.Unit.minutes); break; case ActionTypes$1.showSeconds: classToUse = Namespace.css.secondContainer; this.display._update(exports.Unit.seconds); break; } (this.display.widget.getElementsByClassName(classToUse)[0]).style.display = 'grid'; } handleNextPrevious(action) { const { unit, step } = CalendarModes[this.optionsStore.currentCalendarViewMode]; if (action === ActionTypes$1.next) this.optionsStore.viewDate.manipulate(step, unit); else this.optionsStore.viewDate.manipulate(step * -1, unit); this._eventEmitters.viewUpdate.emit(); this.display._showMode(); } /** * After setting the value it will either show the clock or hide the widget. * @param e */ hideOrClock(e) { if (!this.optionsStore.isTwelveHour && !this.optionsStore.options.display.components.minutes && !this.optionsStore.options.display.keepOpen && !this.optionsStore.options.display.inline) { this.display.hide(); } else { this.do(e, ActionTypes$1.showClock); } } /** * Common function to manipulate {@link lastPicked} by `unit`. * @param lastPicked * @param unit * @param value Value to change by */ manipulateAndSet(lastPicked, unit, value = 1) { const newDate = lastPicked.manipulate(value, unit); if (this.validation.isValid(newDate, unit)) { this.dates.setValue(newDate, this.dates.lastPickedIndex); } } handleSelectCalendarMode(action, //eslint-disable-next-line @typescript-eslint/no-explicit-any currentTarget) { const value = +currentTarget.dataset.value; switch (action) { case ActionTypes$1.selectMonth: this.optionsStore.viewDate.month = value; break; case ActionTypes$1.selectYear: case ActionTypes$1.selectDecade: this.optionsStore.viewDate.year = value; break; } if (this.optionsStore.currentCalendarViewMode === this.optionsStore.minimumCalendarViewMode) { this.dates.setValue(this.optionsStore.viewDate, this.dates.lastPickedIndex); if (!this.optionsStore.options.display.inline) { this.display.hide(); } } else { this.display._showMode(-1); } } //eslint-disable-next-line @typescript-eslint/no-explicit-any handleToggle(currentTarget) { if (currentTarget.getAttribute('title') === this.optionsStore.options.localization.selectDate) { currentTarget.setAttribute('title', this.optionsStore.options.localization.selectTime); currentTarget.innerHTML = this.display._iconTag(this.optionsStore.options.display.icons.time).outerHTML; this.display._updateCalendarHeader(); this.optionsStore.refreshCurrentView(); } else { currentTarget.setAttribute('title', this.optionsStore.options.localization.selectDate); currentTarget.innerHTML = this.display._iconTag(this.optionsStore.options.display.icons.date).outerHTML; if (this.display._hasTime) { this.handleShowClockContainers(ActionTypes$1.showClock); this.display._update('clock'); } } this.display.widget .querySelectorAll(`.${Namespace.css.dateContainer}, .${Namespace.css.timeContainer}`) .forEach((htmlElement) => Collapse.toggle(htmlElement)); this._eventEmitters.viewUpdate.emit(); } //eslint-disable-next-line @typescript-eslint/no-explicit-any handleSelectDay(currentTarget) { const day = this.optionsStore.viewDate.clone; if (currentTarget.classList.contains(Namespace.css.old)) { day.manipulate(-1, exports.Unit.month); } if (currentTarget.classList.contains(Namespace.css.new)) { day.manipulate(1, exports.Unit.month); } day.date = +currentTarget.dataset.day; let index = 0; if (this.optionsStore.options.multipleDates) { index = this.dates.pickedIndex(day, exports.Unit.date); if (index !== -1) { this.dates.setValue(null, index); //deselect multi-date } else { this.dates.setValue(day, this.dates.lastPickedIndex + 1); } } else { this.dates.setValue(day, this.dates.lastPickedIndex); } if (!this.display._hasTime && !this.optionsStore.options.display.keepOpen && !this.optionsStore.options.display.inline && !this.optionsStore.options.multipleDates) { this.display.hide(); } } } /** * A robust and powerful date/time picker component. */ class TempusDominus { constructor(element, options = {}) { //eslint-disable-next-line @typescript-eslint/no-explicit-any this._subscribers = {}; this._isDisabled = false; /** * Event for when the input field changes. This is a class level method so there's * something for the remove listener function. * @private */ //eslint-disable-next-line @typescript-eslint/no-explicit-any this._inputChangeEvent = (event) => { const internallyTriggered = event?.detail; if (internallyTriggered) return; const setViewDate = () => { if (this.dates.lastPicked) this.optionsStore.viewDate = this.dates.lastPicked.clone; }; const value = this.optionsStore.input.value; if (this.optionsStore.options.multipleDates) { try { const valueSplit = value.split(this.optionsStore.options.multipleDatesSeparator); for (let i = 0; i < valueSplit.length; i++) { this.dates.setFromInput(valueSplit[i], i); } setViewDate(); } catch { console.warn('TD: Something went wrong trying to set the multipleDates values from the input field.'); } } else { this.dates.setFromInput(value, 0); setViewDate(); } }; /** * Event for when the toggle is clicked. This is a class level method so there's * something for the remove listener function. * @private */ this._toggleClickEvent = () => { if (this.optionsStore.element?.disabled || this.optionsStore.input?.disabled) return; this.toggle(); }; setupServiceLocator(); this._eventEmitters = serviceLocator.locate(EventEmitters); this.optionsStore = serviceLocator.locate(OptionsStore); this.display = serviceLocator.locate(Display); this.dates = serviceLocator.locate(Dates); this.actions = serviceLocator.locate(Actions); if (!element) { Namespace.errorMessages.mustProvideElement(); } this.optionsStore.element = element; this._initializeOptions(options, DefaultOptions, true); this.optionsStore.viewDate.setLocale(this.optionsStore.options.localization.locale); this.optionsStore.unset = true; this._initializeInput(); this._initializeToggle(); if (this.optionsStore.options.display.inline) this.display.show(); this._eventEmitters.triggerEvent.subscribe((e) => { this._triggerEvent(e); }); this._eventEmitters.viewUpdate.subscribe(() => { this._viewUpdate(); }); this._eventEmitters.updateViewDate.subscribe((dateTime) => { this.viewDate = dateTime; }); } get viewDate() { return this.optionsStore.viewDate; } set viewDate(value) { this.optionsStore.viewDate = value; this.optionsStore.viewDate.setLocale(this.optionsStore.options.localization.locale); this.display._update(this.optionsStore.currentView === 'clock' ? 'clock' : 'calendar'); } // noinspection JSUnusedGlobalSymbols /** * Update the picker options. If `reset` is provide `options` will be merged with DefaultOptions instead. * @param options * @param reset * @public */ updateOptions(options, reset = false) { if (reset) this._initializeOptions(options, DefaultOptions); else this._initializeOptions(options, this.optionsStore.options); this.display._rebuild(); } // noinspection JSUnusedGlobalSymbols /** * Toggles the picker open or closed. If the picker is disabled, nothing will happen. * @public */ toggle() { if (this._isDisabled) return; this.display.toggle(); } // noinspection JSUnusedGlobalSymbols /** * Shows the picker unless the picker is disabled. * @public */ show() { if (this._isDisabled) return; this.display.show(); } // noinspection JSUnusedGlobalSymbols /** * Hides the picker unless the picker is disabled. * @public */ hide() { this.display.hide(); } // noinspection JSUnusedGlobalSymbols /** * Disables the picker and the target input field. * @public */ disable() { this._isDisabled = true; // todo this might be undesired. If a dev disables the input field to // only allow using the picker, this will break that. this.optionsStore.input?.setAttribute('disabled', 'disabled'); this.display.hide(); } // noinspection JSUnusedGlobalSymbols /** * Enables the picker and the target input field. * @public */ enable() { this._isDisabled = false; this.optionsStore.input?.removeAttribute('disabled'); } // noinspection JSUnusedGlobalSymbols /** * Clears all the selected dates * @public */ clear() { this.optionsStore.input.value = ''; this.dates.clear(); } // noinspection JSUnusedGlobalSymbols /** * Allows for a direct subscription to picker events, without having to use addEventListener on the element. * @param eventTypes See Namespace.Events * @param callbacks Function to call when event is triggered * @public */ subscribe(eventTypes, callbacks //eslint-disable-line @typescript-eslint/no-explicit-any ) { if (typeof eventTypes === 'string') { eventTypes = [eventTypes]; } let callBackArray; //eslint-disable-line @typescript-eslint/no-explicit-any if (!Array.isArray(callbacks)) { callBackArray = [callbacks]; } else { callBackArray = callbacks; } if (eventTypes.length !== callBackArray.length) { Namespace.errorMessages.subscribeMismatch(); } const returnArray = []; for (let i = 0; i < eventTypes.length; i++) { const eventType = eventTypes[i]; if (!Array.isArray(this._subscribers[eventType])) { this._subscribers[eventType] = []; } this._subscribers[eventType].push(callBackArray[i]); returnArray.push({ unsubscribe: this._unsubscribe.bind(this, eventType, this._subscribers[eventType].length - 1), }); if (eventTypes.length === 1) { return returnArray[0]; } } return returnArray; } // noinspection JSUnusedGlobalSymbols /** * Hides the picker and removes event listeners */ dispose() { this.display.hide(); // this will clear the document click event listener this.display._dispose(); this._eventEmitters.destroy(); this.optionsStore.input?.removeEventListener('change', this._inputChangeEvent); if (this.optionsStore.options.allowInputToggle) { this.optionsStore.input?.removeEventListener('click', this._toggleClickEvent); } this._toggle?.removeEventListener('click', this._toggleClickEvent); this._subscribers = {}; } /** * Updates the options to use the provided language. * THe language file must be loaded first. * @param language */ locale(language) { const asked = loadedLocales[language]; if (!asked) return; this.updateOptions({ localization: asked, }); } /** * Triggers an event like ChangeEvent when the picker has updated the value * of a selected date. * @param event Accepts a BaseEvent object. * @private */ _triggerEvent(event) { event.viewMode = this.optionsStore.currentView; const isChangeEvent = event.type === Namespace.events.change; if (isChangeEvent) { const { date, oldDate, isClear } = event; if ((date && oldDate && date.isSame(oldDate)) || (!isClear && !date && !oldDate)) { return; } this._handleAfterChangeEvent(event); this.optionsStore.input?.dispatchEvent( //eslint-disable-next-line @typescript-eslint/no-explicit-any new CustomEvent(event.type, { detail: event })); this.optionsStore.input?.dispatchEvent( //eslint-disable-next-line @typescript-eslint/no-explicit-any new CustomEvent('change', { detail: event })); } this.optionsStore.element.dispatchEvent( //eslint-disable-next-line @typescript-eslint/no-explicit-any new CustomEvent(event.type, { detail: event })); //eslint-disable-next-line @typescript-eslint/no-explicit-any if (window.jQuery) { //eslint-disable-next-line @typescript-eslint/no-explicit-any const $ = window.jQuery; if (isChangeEvent && this.optionsStore.input) { $(this.optionsStore.input).trigger(event); } else { $(this.optionsStore.element).trigger(event); } } this._publish(event); } _publish(event) { // return if event is not subscribed if (!Array.isArray(this._subscribers[event.type])) { return; } // Trigger callback for each subscriber this._subscribers[event.type].forEach((callback) => { callback(event); }); } /** * Fires a ViewUpdate event when, for example, the month view is changed. * @private */ _viewUpdate() { this._triggerEvent({ type: Namespace.events.update, viewDate: this.optionsStore.viewDate.clone, }); } _unsubscribe(eventName, index) { this._subscribers[eventName].splice(index, 1); } /** * Merges two Option objects together and validates options type * @param config new Options * @param mergeTo Options to merge into * @param includeDataset When true, the elements data-td attributes will be included in the * @private */ _initializeOptions(config, mergeTo, includeDataset = false) { let newConfig = OptionConverter.deepCopy(config); newConfig = OptionConverter._mergeOptions(newConfig, mergeTo); if (includeDataset) newConfig = OptionConverter._dataToOptions(this.optionsStore.element, newConfig); OptionConverter._validateConflicts(newConfig); newConfig.viewDate = newConfig.viewDate.setLocale(newConfig.localization.locale); if (!this.optionsStore.viewDate.isSame(newConfig.viewDate)) { this.optionsStore.viewDate = newConfig.viewDate; } /** * Sets the minimum view allowed by the picker. For example the case of only * allowing year and month to be selected but not date. */ if (newConfig.display.components.year) { this.optionsStore.minimumCalendarViewMode = 2; } if (newConfig.display.components.month) { this.optionsStore.minimumCalendarViewMode = 1; } if (newConfig.display.components.date) { this.optionsStore.minimumCalendarViewMode = 0; } this.optionsStore.currentCalendarViewMode = Math.max(this.optionsStore.minimumCalendarViewMode, this.optionsStore.currentCalendarViewMode); // Update view mode if needed if (CalendarModes[this.optionsStore.currentCalendarViewMode].name !== newConfig.display.viewMode) { this.optionsStore.currentCalendarViewMode = Math.max(CalendarModes.findIndex((x) => x.name === newConfig.display.viewMode), this.optionsStore.minimumCalendarViewMode); } if (this.display?.isVisible) { this.display._update('all'); } if (newConfig.display.components.useTwentyfourHour && newConfig.localization.hourCycle === undefined) newConfig.localization.hourCycle = 'h24'; else if (newConfig.localization.hourCycle === undefined) { newConfig.localization.hourCycle = guessHourCycle(newConfig.localization.locale); } this.optionsStore.options = newConfig; } /** * Checks if an input field is being used, attempts to locate one and sets an * event listener if found. * @private */ _initializeInput() { if (this.optionsStore.element.tagName == 'INPUT') { this.optionsStore.input = this.optionsStore.element; } else { const query = this.optionsStore.element.dataset.tdTargetInput; if (query == undefined || query == 'nearest') { this.optionsStore.input = this.optionsStore.element.querySelector('input'); } else { this.optionsStore.input = this.optionsStore.element.querySelector(query); } } if (!this.optionsStore.input) return; if (!this.optionsStore.input.value && this.optionsStore.options.defaultDate) this.optionsStore.input.value = this.dates.formatInput(this.optionsStore.options.defaultDate); this.optionsStore.input.addEventListener('change', this._inputChangeEvent); if (this.optionsStore.options.allowInputToggle) { this.optionsStore.input.addEventListener('click', this._toggleClickEvent); } if (this.optionsStore.input.value) { this._inputChangeEvent(); } } /** * Attempts to locate a toggle for the picker and sets an event listener * @private */ _initializeToggle() { if (this.optionsStore.options.display.inline) return; let query = this.optionsStore.element.dataset.tdTargetToggle; if (query == 'nearest') { query = '[data-td-toggle="datetimepicker"]'; } this._toggle = query == undefined ? this.optionsStore.element : this.optionsStore.element.querySelector(query); this._toggle.addEventListener('click', this._toggleClickEvent); } /** * If the option is enabled this will render the clock view after a date pick. * @param e change event * @private */ _handleAfterChangeEvent(e) { if ( // options is disabled !this.optionsStore.options.promptTimeOnDateChange || this.optionsStore.options.display.inline || this.optionsStore.options.display.sideBySide || // time is disabled !this.display._hasTime || // clock component is already showing this.display.widget ?.getElementsByClassName(Namespace.css.show)[0] .classList.contains(Namespace.css.timeContainer)) return; // First time ever. If useCurrent option is set to true (default), do nothing // because the first date is selected automatically. // or date didn't change (time did) or date changed because time did. if ((!e.oldDate && this.optionsStore.options.useCurrent) || (e.oldDate && e.date?.isSame(e.oldDate))) { return; } clearTimeout(this._currentPromptTimeTimeout); this._currentPromptTimeTimeout = setTimeout(() => { if (this.display.widget) { this._eventEmitters.action.emit({ e: { currentTarget: this.display.widget.querySelector(`.${Namespace.css.switch}`), }, action: ActionTypes$1.togglePicker, }); } }, this.optionsStore.options.promptTimeOnDateChangeTransitionDelay); } } /** * Whenever a locale is loaded via a plugin then store it here based on the * locale name. E.g. loadedLocales['ru'] */ const loadedLocales = {}; // noinspection JSUnusedGlobalSymbols /** * Called from a locale plugin. * @param l locale object for localization options */ const loadLocale = (l) => { if (loadedLocales[l.name]) return; loadedLocales[l.name] = l.localization; }; /** * A sets the global localization options to the provided locale name. * `loadLocale` MUST be called first. * @param l */ const locale = (l) => { const asked = loadedLocales[l]; if (!asked) return; DefaultOptions.localization = asked; }; // noinspection JSUnusedGlobalSymbols /** * Called from a plugin to extend or override picker defaults. * @param plugin * @param option */ const extend = function (plugin, option = undefined) { if (!plugin) return tempusDominus; if (!plugin.installed) { // install plugin only once plugin(option, { TempusDominus, Dates, Display, DateTime, Namespace }, tempusDominus); plugin.installed = true; } return tempusDominus; }; const version = '6.2.10'; const tempusDominus = { TempusDominus, extend, loadLocale, locale, Namespace, DefaultOptions, DateTime, Unit: exports.Unit, version, }; exports.DateTime = DateTime; exports.DefaultOptions = DefaultOptions; exports.Namespace = Namespace; exports.TempusDominus = TempusDominus; exports.extend = extend; exports.loadLocale = loadLocale; exports.locale = locale; exports.version = version; Object.defineProperty(exports, '__esModule', { value: true }); })); //# sourceMappingURL=tempus-dominus.js.map /*! Waypoints - 4.0.1 Copyright © 2011-2016 Caleb Troughton Licensed under the MIT license. https://github.com/imakewebthings/waypoints/blob/master/licenses.txt */ (function() { 'use strict' var keyCounter = 0 var allWaypoints = {} /* http://imakewebthings.com/waypoints/api/waypoint */ function Waypoint(options) { if (!options) { throw new Error('No options passed to Waypoint constructor') } if (!options.element) { throw new Error('No element option passed to Waypoint constructor') } if (!options.handler) { throw new Error('No handler option passed to Waypoint constructor') } this.key = 'waypoint-' + keyCounter this.options = Waypoint.Adapter.extend({}, Waypoint.defaults, options) this.element = this.options.element this.adapter = new Waypoint.Adapter(this.element) this.callback = options.handler this.axis = this.options.horizontal ? 'horizontal' : 'vertical' this.enabled = this.options.enabled this.triggerPoint = null this.group = Waypoint.Group.findOrCreate({ name: this.options.group, axis: this.axis }) this.context = Waypoint.Context.findOrCreateByElement(this.options.context) if (Waypoint.offsetAliases[this.options.offset]) { this.options.offset = Waypoint.offsetAliases[this.options.offset] } this.group.add(this) this.context.add(this) allWaypoints[this.key] = this keyCounter += 1 } /* Private */ Waypoint.prototype.queueTrigger = function(direction) { this.group.queueTrigger(this, direction) } /* Private */ Waypoint.prototype.trigger = function(args) { if (!this.enabled) { return } if (this.callback) { this.callback.apply(this, args) } } /* Public */ /* http://imakewebthings.com/waypoints/api/destroy */ Waypoint.prototype.destroy = function() { this.context.remove(this) this.group.remove(this) delete allWaypoints[this.key] } /* Public */ /* http://imakewebthings.com/waypoints/api/disable */ Waypoint.prototype.disable = function() { this.enabled = false return this } /* Public */ /* http://imakewebthings.com/waypoints/api/enable */ Waypoint.prototype.enable = function() { this.context.refresh() this.enabled = true return this } /* Public */ /* http://imakewebthings.com/waypoints/api/next */ Waypoint.prototype.next = function() { return this.group.next(this) } /* Public */ /* http://imakewebthings.com/waypoints/api/previous */ Waypoint.prototype.previous = function() { return this.group.previous(this) } /* Private */ Waypoint.invokeAll = function(method) { var allWaypointsArray = [] for (var waypointKey in allWaypoints) { allWaypointsArray.push(allWaypoints[waypointKey]) } for (var i = 0, end = allWaypointsArray.length; i < end; i++) { allWaypointsArray[i][method]() } } /* Public */ /* http://imakewebthings.com/waypoints/api/destroy-all */ Waypoint.destroyAll = function() { Waypoint.invokeAll('destroy') } /* Public */ /* http://imakewebthings.com/waypoints/api/disable-all */ Waypoint.disableAll = function() { Waypoint.invokeAll('disable') } /* Public */ /* http://imakewebthings.com/waypoints/api/enable-all */ Waypoint.enableAll = function() { Waypoint.Context.refreshAll() for (var waypointKey in allWaypoints) { allWaypoints[waypointKey].enabled = true } return this } /* Public */ /* http://imakewebthings.com/waypoints/api/refresh-all */ Waypoint.refreshAll = function() { Waypoint.Context.refreshAll() } /* Public */ /* http://imakewebthings.com/waypoints/api/viewport-height */ Waypoint.viewportHeight = function() { return window.innerHeight || document.documentElement.clientHeight } /* Public */ /* http://imakewebthings.com/waypoints/api/viewport-width */ Waypoint.viewportWidth = function() { return document.documentElement.clientWidth } Waypoint.adapters = [] Waypoint.defaults = { context: window, continuous: true, enabled: true, group: 'default', horizontal: false, offset: 0 } Waypoint.offsetAliases = { 'bottom-in-view': function() { return this.context.innerHeight() - this.adapter.outerHeight() }, 'right-in-view': function() { return this.context.innerWidth() - this.adapter.outerWidth() } } window.Waypoint = Waypoint }()) ;(function() { 'use strict' function requestAnimationFrameShim(callback) { window.setTimeout(callback, 1000 / 60) } var keyCounter = 0 var contexts = {} var Waypoint = window.Waypoint var oldWindowLoad = window.onload /* http://imakewebthings.com/waypoints/api/context */ function Context(element) { this.element = element this.Adapter = Waypoint.Adapter this.adapter = new this.Adapter(element) this.key = 'waypoint-context-' + keyCounter this.didScroll = false this.didResize = false this.oldScroll = { x: this.adapter.scrollLeft(), y: this.adapter.scrollTop() } this.waypoints = { vertical: {}, horizontal: {} } element.waypointContextKey = this.key contexts[element.waypointContextKey] = this keyCounter += 1 if (!Waypoint.windowContext) { Waypoint.windowContext = true Waypoint.windowContext = new Context(window) } this.createThrottledScrollHandler() this.createThrottledResizeHandler() } /* Private */ Context.prototype.add = function(waypoint) { var axis = waypoint.options.horizontal ? 'horizontal' : 'vertical' this.waypoints[axis][waypoint.key] = waypoint this.refresh() } /* Private */ Context.prototype.checkEmpty = function() { var horizontalEmpty = this.Adapter.isEmptyObject(this.waypoints.horizontal) var verticalEmpty = this.Adapter.isEmptyObject(this.waypoints.vertical) var isWindow = this.element == this.element.window if (horizontalEmpty && verticalEmpty && !isWindow) { this.adapter.off('.waypoints') delete contexts[this.key] } } /* Private */ Context.prototype.createThrottledResizeHandler = function() { var self = this function resizeHandler() { self.handleResize() self.didResize = false } this.adapter.on('resize.waypoints', function() { if (!self.didResize) { self.didResize = true Waypoint.requestAnimationFrame(resizeHandler) } }) } /* Private */ Context.prototype.createThrottledScrollHandler = function() { var self = this function scrollHandler() { self.handleScroll() self.didScroll = false } this.adapter.on('scroll.waypoints', function() { if (!self.didScroll || Waypoint.isTouch) { self.didScroll = true Waypoint.requestAnimationFrame(scrollHandler) } }) } /* Private */ Context.prototype.handleResize = function() { Waypoint.Context.refreshAll() } /* Private */ Context.prototype.handleScroll = function() { var triggeredGroups = {} var axes = { horizontal: { newScroll: this.adapter.scrollLeft(), oldScroll: this.oldScroll.x, forward: 'right', backward: 'left' }, vertical: { newScroll: this.adapter.scrollTop(), oldScroll: this.oldScroll.y, forward: 'down', backward: 'up' } } for (var axisKey in axes) { var axis = axes[axisKey] var isForward = axis.newScroll > axis.oldScroll var direction = isForward ? axis.forward : axis.backward for (var waypointKey in this.waypoints[axisKey]) { var waypoint = this.waypoints[axisKey][waypointKey] if (waypoint.triggerPoint === null) { continue } var wasBeforeTriggerPoint = axis.oldScroll < waypoint.triggerPoint var nowAfterTriggerPoint = axis.newScroll >= waypoint.triggerPoint var crossedForward = wasBeforeTriggerPoint && nowAfterTriggerPoint var crossedBackward = !wasBeforeTriggerPoint && !nowAfterTriggerPoint if (crossedForward || crossedBackward) { waypoint.queueTrigger(direction) triggeredGroups[waypoint.group.id] = waypoint.group } } } for (var groupKey in triggeredGroups) { triggeredGroups[groupKey].flushTriggers() } this.oldScroll = { x: axes.horizontal.newScroll, y: axes.vertical.newScroll } } /* Private */ Context.prototype.innerHeight = function() { /*eslint-disable eqeqeq */ if (this.element == this.element.window) { return Waypoint.viewportHeight() } /*eslint-enable eqeqeq */ return this.adapter.innerHeight() } /* Private */ Context.prototype.remove = function(waypoint) { delete this.waypoints[waypoint.axis][waypoint.key] this.checkEmpty() } /* Private */ Context.prototype.innerWidth = function() { /*eslint-disable eqeqeq */ if (this.element == this.element.window) { return Waypoint.viewportWidth() } /*eslint-enable eqeqeq */ return this.adapter.innerWidth() } /* Public */ /* http://imakewebthings.com/waypoints/api/context-destroy */ Context.prototype.destroy = function() { var allWaypoints = [] for (var axis in this.waypoints) { for (var waypointKey in this.waypoints[axis]) { allWaypoints.push(this.waypoints[axis][waypointKey]) } } for (var i = 0, end = allWaypoints.length; i < end; i++) { allWaypoints[i].destroy() } } /* Public */ /* http://imakewebthings.com/waypoints/api/context-refresh */ Context.prototype.refresh = function() { /*eslint-disable eqeqeq */ var isWindow = this.element == this.element.window /*eslint-enable eqeqeq */ var contextOffset = isWindow ? undefined : this.adapter.offset() var triggeredGroups = {} var axes this.handleScroll() axes = { horizontal: { contextOffset: isWindow ? 0 : contextOffset.left, contextScroll: isWindow ? 0 : this.oldScroll.x, contextDimension: this.innerWidth(), oldScroll: this.oldScroll.x, forward: 'right', backward: 'left', offsetProp: 'left' }, vertical: { contextOffset: isWindow ? 0 : contextOffset.top, contextScroll: isWindow ? 0 : this.oldScroll.y, contextDimension: this.innerHeight(), oldScroll: this.oldScroll.y, forward: 'down', backward: 'up', offsetProp: 'top' } } for (var axisKey in axes) { var axis = axes[axisKey] for (var waypointKey in this.waypoints[axisKey]) { var waypoint = this.waypoints[axisKey][waypointKey] var adjustment = waypoint.options.offset var oldTriggerPoint = waypoint.triggerPoint var elementOffset = 0 var freshWaypoint = oldTriggerPoint == null var contextModifier, wasBeforeScroll, nowAfterScroll var triggeredBackward, triggeredForward if (waypoint.element !== waypoint.element.window) { elementOffset = waypoint.adapter.offset()[axis.offsetProp] } if (typeof adjustment === 'function') { adjustment = adjustment.apply(waypoint) } else if (typeof adjustment === 'string') { adjustment = parseFloat(adjustment) if (waypoint.options.offset.indexOf('%') > - 1) { adjustment = Math.ceil(axis.contextDimension * adjustment / 100) } } contextModifier = axis.contextScroll - axis.contextOffset waypoint.triggerPoint = Math.floor(elementOffset + contextModifier - adjustment) wasBeforeScroll = oldTriggerPoint < axis.oldScroll nowAfterScroll = waypoint.triggerPoint >= axis.oldScroll triggeredBackward = wasBeforeScroll && nowAfterScroll triggeredForward = !wasBeforeScroll && !nowAfterScroll if (!freshWaypoint && triggeredBackward) { waypoint.queueTrigger(axis.backward) triggeredGroups[waypoint.group.id] = waypoint.group } else if (!freshWaypoint && triggeredForward) { waypoint.queueTrigger(axis.forward) triggeredGroups[waypoint.group.id] = waypoint.group } else if (freshWaypoint && axis.oldScroll >= waypoint.triggerPoint) { waypoint.queueTrigger(axis.forward) triggeredGroups[waypoint.group.id] = waypoint.group } } } Waypoint.requestAnimationFrame(function() { for (var groupKey in triggeredGroups) { triggeredGroups[groupKey].flushTriggers() } }) return this } /* Private */ Context.findOrCreateByElement = function(element) { return Context.findByElement(element) || new Context(element) } /* Private */ Context.refreshAll = function() { for (var contextId in contexts) { contexts[contextId].refresh() } } /* Public */ /* http://imakewebthings.com/waypoints/api/context-find-by-element */ Context.findByElement = function(element) { return contexts[element.waypointContextKey] } window.onload = function() { if (oldWindowLoad) { oldWindowLoad() } Context.refreshAll() } Waypoint.requestAnimationFrame = function(callback) { var requestFn = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || requestAnimationFrameShim requestFn.call(window, callback) } Waypoint.Context = Context }()) ;(function() { 'use strict' function byTriggerPoint(a, b) { return a.triggerPoint - b.triggerPoint } function byReverseTriggerPoint(a, b) { return b.triggerPoint - a.triggerPoint } var groups = { vertical: {}, horizontal: {} } var Waypoint = window.Waypoint /* http://imakewebthings.com/waypoints/api/group */ function Group(options) { this.name = options.name this.axis = options.axis this.id = this.name + '-' + this.axis this.waypoints = [] this.clearTriggerQueues() groups[this.axis][this.name] = this } /* Private */ Group.prototype.add = function(waypoint) { this.waypoints.push(waypoint) } /* Private */ Group.prototype.clearTriggerQueues = function() { this.triggerQueues = { up: [], down: [], left: [], right: [] } } /* Private */ Group.prototype.flushTriggers = function() { for (var direction in this.triggerQueues) { var waypoints = this.triggerQueues[direction] var reverse = direction === 'up' || direction === 'left' waypoints.sort(reverse ? byReverseTriggerPoint : byTriggerPoint) for (var i = 0, end = waypoints.length; i < end; i += 1) { var waypoint = waypoints[i] if (waypoint.options.continuous || i === waypoints.length - 1) { waypoint.trigger([direction]) } } } this.clearTriggerQueues() } /* Private */ Group.prototype.next = function(waypoint) { this.waypoints.sort(byTriggerPoint) var index = Waypoint.Adapter.inArray(waypoint, this.waypoints) var isLast = index === this.waypoints.length - 1 return isLast ? null : this.waypoints[index + 1] } /* Private */ Group.prototype.previous = function(waypoint) { this.waypoints.sort(byTriggerPoint) var index = Waypoint.Adapter.inArray(waypoint, this.waypoints) return index ? this.waypoints[index - 1] : null } /* Private */ Group.prototype.queueTrigger = function(waypoint, direction) { this.triggerQueues[direction].push(waypoint) } /* Private */ Group.prototype.remove = function(waypoint) { var index = Waypoint.Adapter.inArray(waypoint, this.waypoints) if (index > -1) { this.waypoints.splice(index, 1) } } /* Public */ /* http://imakewebthings.com/waypoints/api/first */ Group.prototype.first = function() { return this.waypoints[0] } /* Public */ /* http://imakewebthings.com/waypoints/api/last */ Group.prototype.last = function() { return this.waypoints[this.waypoints.length - 1] } /* Private */ Group.findOrCreate = function(options) { return groups[options.axis][options.name] || new Group(options) } Waypoint.Group = Group }()) ;(function() { 'use strict' var $ = window.jQuery var Waypoint = window.Waypoint function JQueryAdapter(element) { this.$element = $(element) } $.each([ 'innerHeight', 'innerWidth', 'off', 'offset', 'on', 'outerHeight', 'outerWidth', 'scrollLeft', 'scrollTop' ], function(i, method) { JQueryAdapter.prototype[method] = function() { var args = Array.prototype.slice.call(arguments) return this.$element[method].apply(this.$element, args) } }) $.each([ 'extend', 'inArray', 'isEmptyObject' ], function(i, method) { JQueryAdapter[method] = $[method] }) Waypoint.adapters.push({ name: 'jquery', Adapter: JQueryAdapter }) Waypoint.Adapter = JQueryAdapter }()) ;(function() { 'use strict' var Waypoint = window.Waypoint function createExtension(framework) { return function() { var waypoints = [] var overrides = arguments[0] // framework.isFunction(arguments[0]) // Change the isFunction as it's causing jQuery migrate warnings. if (typeof arguments[0] === "function") { overrides = framework.extend({}, arguments[1]) overrides.handler = arguments[0] } this.each(function() { var options = framework.extend({}, overrides, { element: this }) if (typeof options.context === 'string') { options.context = framework(this).closest(options.context)[0] } waypoints.push(new Waypoint(options)) }) return waypoints } } if (window.jQuery) { window.jQuery.fn.waypoint = createExtension(window.jQuery) } if (window.Zepto) { window.Zepto.fn.waypoint = createExtension(window.Zepto) } }()) ; (function(l){"function"===typeof define&&define.amd?define(l):"object"===typeof exports?module.exports=l():l()})(function(){var l="undefined"!==typeof window?window:this,n=l.Glider=function(a,b){if(a._glider)return a._glider;this.ele=a;this.ele.classList.add("glider");this.ele._glider=this;this.opt=Object.assign({},{slidesToScroll:1,slidesToShow:1,resizeLock:!0,duration:.5,autoplay:!1,animateDots:!1,animateDirection:"X",scrollbar:!1,trackOffset:!0,easing:function(c,d,e,f,h){return f*(d/=h)*d+e}}, b);this.animate_id=this.page=this.slide=0;this.arrows={};this._opt=this.opt;if(this.opt.skipTrack)this.track=this.ele.children[0];else for(this.track=document.createElement("div"),this.ele.appendChild(this.track);1!==this.ele.children.length;)this.track.appendChild(this.ele.children[0]);this.track.classList.add("glider-track");this.init();this.resize=this.init.bind(this,!0);this.event(this.ele,"add",{scroll:this.updateControls.bind(this)});this.event(l,"add",{resize:this.resize})},g=n.prototype;g.init= function(a,b){var c=this,d=0;c.slides=[];for(var e=0;e<c.track.children.length;++e){var f=c.track.children[e];"none"!==window.getComputedStyle(f).display&&(f.classList.add("glider-slide"),f.setAttribute("data-gslide",e),c.slides.push(f))}c.containerWidth=c.ele.clientWidth;e=c.settingsBreakpoint();b||(b=e);if("auto"===c.opt.slidesToShow||"undefined"!==typeof c.opt._autoSlide)f=c.containerWidth/c.opt.itemWidth,c.opt._autoSlide=c.opt.slidesToShow=c.opt.exactWidth?f:Math.max(1,Math.floor(f));"auto"=== c.opt.slidesToScroll&&(c.opt.slidesToScroll=Math.floor(c.opt.slidesToShow));c.itemWidth=c.opt.exactWidth?c.opt.itemWidth:c.containerWidth/c.opt.slidesToShow;[].forEach.call(c.slides,function(h){h.style.height="auto";h.style.width=c.itemWidth+"px";d+=c.itemWidth});f=0;c.opt.trackOffset&&(Number.isInteger(c.opt.slidesToShow)||(f=(c.opt.slidesToShow-Math.floor(c.opt.slidesToShow)).toPrecision(3)*c.itemWidth));c.track.style.width=d+f+"px";c.trackWidth=d;c.isDrag=!1;c.preventClick=!1;c.opt.resizeLock&& c.scrollTo(c.slide*c.itemWidth,0);c.opt.scrollbar&&(c.iosTest()?(c.ele.parentElement.classList.add("fake-scrollbar"),f=document.createElement("div"),f.classList.add("scrollbar"),c.ele.parentElement.appendChild(f),c.opt.dots=f):c.ele.parentElement.classList.add("scrollbar"));c.opt.autoplay&&(c.opt.autoplay=Object.assign({delay:5E3,disableOnInteraction:!0,repeat:!0},c.opt.autoplay),c.autoPlayDelay=c.opt.autoplay.delay);if(e||b)c.bindArrows(),c.buildDots(),c.bindDrag();c.updateControls();c.emit(a?"refresh": "loaded")};g.iosTest=function(){return-1!=="iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").indexOf(navigator.platform)||-1!==navigator.userAgent.indexOf("Mac")&&"ontouchend"in document};g.prevSlide=null;g.nextSlide=null;g.autoPlayDirection="forward";g.autoPlayTimer=0;g.autoPlayDelay=0;g.autoPlayTimeElapsed=0;g.resetAutoPlay=function(){this.autoPlayTimer&&(clearTimeout(this.autoPlayTimer),this.autoPlayTimer=null);if(this.opt.animateDots&&"undefined"!==typeof this.dots&& null!==this.dots){for(var a=0;a<this.dots.childElementCount;a++){var b=this.dots.children[a].firstElementChild.firstElementChild;b.style.transitionDuration="0s";b.style.transform=""}this.autoPlayDelay=this.opt.autoplay.delay;this.autoPlayTimeElapsed=0}};g.autoPlay=function(){var a=this;a.resetAutoPlay();if("forward"===a.autoPlayDirection){var b=a.slide+1;if(a.opt.animateDots&&"undefined"!==typeof a.dots&&null!==a.dots){var c=a.dots.children[a.slide].firstElementChild.firstElementChild;c.style.transitionDuration= (a.autoPlayDelay/1E3).toFixed(3)+"s";c.style.transform="translate"+a.opt.animateDirection+"(100%)"}a.autoPlayTimer=setTimeout(function(){b>=a.track.childElementCount?a.opt.autoplay.repeat?(b=0,a.scrollItem(b)):a.resetAutoPlay():a.scrollItem(b)},a.autoPlayDelay)}"reverse"===a.autoPlayDirection&&(b=a.slide-1,a.opt.animateDots&&"undefined"!==typeof a.dots&&null!==a.dots&&(c=a.dots.children[a.slide].firstElementChild.firstElementChild,c.style.transitionDuration=(a.autoPlayDelay/1E3).toFixed(3)+"s",c.style.transform= "translate"+a.opt.animateDirection+"(100%)"),a.autoPlayTimer=setTimeout(function(){-1>=b?a.opt.autoplay.repeat?(b=a.track.childElementCount-1,a.scrollItem(b)):a.resetAutoPlay():a.scrollItem(b)},a.autoPlayDelay))};g.bindDrag=function(){var a=this;a.mouse=a.mouse||a.handleMouse.bind(a);var b={mouseenter:function(c){a.opt.autoplay&&a.opt.autoplay.disableOnInteraction&&a.pauseAutoplay()},mouseleave:function(c){a.opt.autoplay&&a.opt.autoplay.disableOnInteraction&&a.resumeAutoplay();a.mouseDown=void 0; a.ele.classList.remove("drag");a.isDrag&&(a.preventClick=!0);a.isDrag=!1},mouseup:function(){a.mouseDown=void 0;a.ele.classList.remove("drag");a.isDrag&&(a.preventClick=!0,a.opt.scrollLock&&a.scrollItem(a.getCurrentSlide()));a.isDrag=!1},mousedown:function(c){a.opt.autoplay&&a.resetAutoPlay();c.preventDefault();c.stopPropagation();a.mouseDown=c.clientX;a.ele.classList.add("drag")},mousemove:a.mouse,click:function(c){a.preventClick&&(c.preventDefault(),c.stopPropagation());a.preventClick=!1}};!0=== a.opt.draggable?a.ele.classList.add("draggable"):a.ele.classList.remove("draggable");a.event(a.ele,"remove",b);a.opt.draggable&&a.event(a.ele,"add",b)};g.buildDots=function(){if(this.opt.dots){if(this.dots="string"===typeof this.opt.dots?document.querySelector(this.opt.dots):this.opt.dots){this.dots.innerHTML="";this.dots.classList.add("glider-dots");this.opt.animateDots&&this.opt.autoplay&&this.dots.classList.add("animate-glider-dots");for(var a=0;a<Math.ceil(this.slides.length/this.opt.slidesToShow);++a){var b= document.createElement("button");b.dataset.index=a;b.setAttribute("aria-label","Page "+(a+1));b.setAttribute("role","tab");b.className="glider-dot "+(a?"":"active");this.opt.animateDots&&this.opt.autoplay&&(b.innerHTML="\x3cspan\x3e\x3cspan\x3e\x3c/span\x3e\x3c/span\x3e");this.event(b,"add",{click:this.scrollItem.bind(this,a,!0)});this.dots.appendChild(b)}}}else this.dots&&(this.dots.innerHTML="")};g.bindArrows=function(){var a=this;a.opt.arrows?["prev","next"].forEach(function(b){var c=a.opt.arrows[b]; c&&("string"===typeof c&&(c=document.querySelector(c)),c&&(c._func=c._func||a.scrollItem.bind(a,b),a.event(c,"remove",{click:c._func}),a.event(c,"add",{click:c._func}),a.arrows[b]=c))}):Object.keys(a.arrows).forEach(function(b){b=a.arrows[b];a.event(b,"remove",{click:b._func})})};g.updateControls=function(a){var b=this;a&&!b.opt.scrollPropagate&&a.stopPropagation();var c=b.containerWidth>=b.trackWidth;b.opt.rewind||(b.arrows.prev&&(0>=b.ele.scrollLeft||c?b.arrows.prev.classList.add("disabled"):b.arrows.prev.classList.remove("disabled"), b.arrows.prev.classList.contains("disabled")?b.arrows.prev.setAttribute("aria-disabled",!0):b.arrows.prev.setAttribute("aria-disabled",!1)),b.arrows.next&&(Math.ceil(b.ele.scrollLeft+b.containerWidth)>=Math.floor(b.trackWidth)||c?b.arrows.next.classList.add("disabled"):b.arrows.next.classList.remove("disabled"),b.arrows.next.classList.contains("disabled")?b.arrows.next.setAttribute("aria-disabled",!0):b.arrows.next.setAttribute("aria-disabled",!1)));b.slide=Math.round(b.ele.scrollLeft/b.itemWidth); b.page=Math.round(b.ele.scrollLeft/b.containerWidth);var d=b.slide+Math.floor(Math.floor(b.opt.slidesToShow)/2),e=Math.floor(b.opt.slidesToShow)%2?0:d+1;1===Math.floor(b.opt.slidesToShow)&&(e=0);b.ele.scrollLeft+b.containerWidth>=Math.floor(b.trackWidth)&&(b.page=b.dots?b.dots.children.length-1:0);[].forEach.call(b.slides,function(f,h){var k=f.classList;f=k.contains("visible");var m=b.ele.scrollLeft,r=b.ele.scrollLeft+b.containerWidth,p=b.itemWidth*h,t=p+b.itemWidth;[].forEach.call(k,function(q){/^left|right/.test(q)&& k.remove(q)});b.slide===h?k.add("active"):k.remove("active");d===h||e&&e===h?k.add("center"):(k.remove("center"),k.add([h<d?"left":"right",Math.abs(h-(h<d?d:e||d))].join("-")));(m=Math.ceil(p)>=Math.floor(m)&&Math.floor(t)<=Math.ceil(r))?k.add("visible"):k.remove("visible");m!==f&&(m?b.emit("slide-visible",{slide:h,prev:b.prevSlide}):b.emit("slide-hidden",{slide:h,next:b.nextSlide}))});b.dots&&[].forEach.call(b.dots.children,function(f,h){b.page===h?f.classList.add("active"):f.classList.remove("active")}); a&&b.opt.scrollLock&&(clearTimeout(b.scrollLock),b.scrollLock=setTimeout(function(){clearTimeout(b.scrollLock);.02<Math.abs(b.ele.scrollLeft/b.itemWidth-b.slide)&&(b.mouseDown||b.trackWidth>b.containerWidth+b.ele.scrollLeft&&b.scrollItem(b.getCurrentSlide()))},b.opt.scrollLockDelay||250))};g.getCurrentSlide=function(){return this.round(this.ele.scrollLeft/this.itemWidth)};g.scrollItem=function(a,b,c){c&&c.preventDefault();var d=this;c=d.slides.length-1;d.nextSlide="next"===a?d.slide!==c?d.slide+1: 0:"prev"===a?0!==d.slide?d.slide-1:c:a;d.prevSlide=d.slide;var e=a;++d.animate_id;if(!0===b)a*=d.containerWidth,a=Math.round(a/d.itemWidth)*d.itemWidth;else{if("string"===typeof a){var f="prev"===a;a=d.opt.slidesToScroll%1||d.opt.slidesToShow%1?d.getCurrentSlide():d.slide;a=f?a-d.opt.slidesToScroll:a+d.opt.slidesToScroll}d.opt.rewind&&(c=d.ele.scrollLeft,a=f&&!c?d.slides.length:!f&&c+d.containerWidth>=Math.floor(d.trackWidth)?0:a);a=Math.max(Math.min(a,d.slides.length),0);d.slide=a;a*=d.itemWidth}d.scrollTo(a, d.opt.duration*Math.abs(d.ele.scrollLeft-a),function(){d.updateControls();d.emit("animated",{value:e,type:"string"===typeof e?"arrow":b?"dot":"slide"})});return!1};g.settingsBreakpoint=function(){var a=this._opt.responsive;if(a){a.sort(function(d,e){return e.breakpoint-d.breakpoint});for(var b=0;b<a.length;++b){var c=a[b];if(l.innerWidth>=c.breakpoint)return this.breakpoint!==c.breakpoint?(this.opt=Object.assign({},this._opt,c.settings),this.breakpoint=c.breakpoint,!0):!1}}a=0!==this.breakpoint;this.opt= Object.assign({},this._opt);this.breakpoint=0;return a};g.scrollTo=function(a,b,c){function d(){var k=(new Date).getTime()-f;e.ele.scrollLeft+=(a-e.ele.scrollLeft)*e.opt.easing(0,k,0,1,b);k<b&&h===e.animate_id?l.requestAnimationFrame(d):(e.ele.scrollLeft=a,c&&c.call(e),e.opt.autoplay&&e.autoPlay())}var e=this,f=(new Date).getTime(),h=e.animate_id;l.requestAnimationFrame(d)};g.removeItem=function(a){this.slides.length&&(this.track.removeChild(this.slides[a]),this.refresh(!0),this.emit("remove"))}; g.addItem=function(a){this.track.appendChild(a);this.refresh(!0);this.emit("add")};g.handleMouse=function(a){this.mouseDown&&(this.isDrag=!0,this.ele.scrollLeft+=(this.mouseDown-a.clientX)*(this.opt.dragVelocity||3.3),this.mouseDown=a.clientX)};g.round=function(a){var b=1/(this.opt.slidesToScroll%1||1);return Math.round(a*b)/b};g.refresh=function(a){this.init(!0,a)};g.setOption=function(a,b){var c=this;c.breakpoint&&!b?c._opt.responsive.forEach(function(d){d.breakpoint===c.breakpoint&&(d.settings= Object.assign({},d.settings,a))}):c._opt=Object.assign({},c._opt,a);c.breakpoint=0;c.settingsBreakpoint()};g.destroy=function(){var a=this.ele.cloneNode(!0),b=function(c){c.removeAttribute("style");[].forEach.call(c.classList,function(d){/^glider/.test(d)&&c.classList.remove(d)})};a.children[0].outerHTML=a.children[0].innerHTML;b(a);[].forEach.call(a.getElementsByTagName("*"),b);this.ele.parentNode.replaceChild(a,this.ele);this.event(l,"remove",{resize:this.resize});this.emit("destroy")};g.emit=function(a, b){a=new l.CustomEvent("glider-"+a,{bubbles:!this.opt.eventPropagate,detail:b});this.ele.dispatchEvent(a)};g.event=function(a,b,c){var d=a[b+"EventListener"].bind(a);Object.keys(c).forEach(function(e){d(e,c[e])})};g.pauseAutoplay=function(){clearTimeout(this.autoPlayTimer);this.autoPlayTimer=null;if(this.opt.animateDots&&"undefined"!==typeof this.dots&&null!==this.dots){var a=this.dots.children[this.slide].firstElementChild.firstElementChild,b=window.getComputedStyle(a).getPropertyValue("transform"); if("undefined"!==typeof DOMMatrixReadOnly)b=new DOMMatrixReadOnly(b),b="Y"===this.opt.animateDirection?b.m42:b.m41;else{var c=b.indexOf("("),d=b.indexOf(")");b=b.substr(c+1,d-c-1).split(",");b="Y"===this.opt.animateDirection?Number(b[5]):Number(b[4])}this.autoPlayTimeElapsed=b=(b/("Y"===this.opt.animateDirection?a.offsetHeight:a.offsetWidth)).toFixed(5);a.style.transitionDuration="0s";a.style.transform="translate"+this.opt.animateDirection+"("+100*b+"%)"}};g.resumeAutoplay=function(){if(this.opt.animateDots&& "undefined"!==typeof this.dots&&null!==this.dots){var a=this.dots.children[this.slide].firstElementChild.firstElementChild;a.style.transitionDuration=(this.autoPlayDelay/1E3).toFixed(3)+"s";a.style.transform="translate"+this.opt.animateDirection+"(100%)";this.autoPlayDelay=Number(this.opt.autoplay.delay-this.autoPlayTimeElapsed*this.opt.autoplay.delay).toFixed(3)}clearTimeout(this.autoPlayTimer);this.autoPlayTimer=null;this.autoPlay()};return n});(function(b){b(".pageAnchor").on("click",function(a){a.preventDefault();a=b(this).attr("href");a=a.substring(1);b([document.documentElement,document.body]).animate({scrollTop:b('.page-anchor[name\x3d"'+a+'"]').offset().top-100},250)})})(jQuery);/* JavaScript Cookie v2.2.0 https://github.com/js-cookie/js-cookie Copyright 2006, 2015 Klaus Hartl & Fagner Brack Released under the MIT license */ var webData={myAccount:{}};webData.myAccount.site={};webData.events=[];var userHeaderModel;function startWorker(c){if("undefined"!==typeof Worker)return c=new Blob([document.querySelector("#"+c).textContent]),new Worker(window.URL.createObjectURL(c))} if(!botSelector){if(-1!=window.location.href.indexOf("paloaltonetworks.com/resources/")||-1!=location.href.indexOf("/content/pan/en_US/resources/"))try{webData.resourceAssetFlow="true"}catch(c){console.log(c)}var userHeaderModelWorker=startWorker("worker1");userHeaderModelWorker&&(console.log("userHeaderModel worker started"),userHeaderModelWorker.postMessage(location.protocol+"//"+location.hostname+(location.port?":"+location.port:"")),userHeaderModelWorker.onmessage=function(c){userHeaderModel= JSON.parse(c.data);console.log("userHeaderModel worker finished");userHeaderModelWorker.terminate();userHeaderModel&&("anonymous"!==userHeaderModel.id&&(webData.GUID=userHeaderModel.id,webData.loggedInState="Logged-In",webData.formType="Janrain",userHeaderModel.provider?(webData.portalAccessed="Janrain: "+userHeaderModel.provider,webData.loginType="Janrain: "+userHeaderModel.provider):(webData.portalAccessed="Janrain: Profile",webData.loginType="Janrain: Profile"),userHeaderModel.eventType&&("register"=== userHeaderModel.eventType?(webData.formName="Registration / Login",webData.events.push("registers","login")):(webData.formName="Login",webData.events.push("login")))),userHeaderModel.businessEmail&&(webData.eMail=userHeaderModel.businessEmail),userHeaderModel.hashedEmail&&(webData.hashEmail=userHeaderModel.hashedEmail),userHeaderModel.company&&(webData.companyName=userHeaderModel.company,webData.userType="Palo Alto Networks"===userHeaderModel.company?"Employee":"Non-Employee"),userHeaderModel.jobRole&& (webData.jobTitle=userHeaderModel.jobRole),userHeaderModel.country&&(webData.country=userHeaderModel.country),userHeaderModel.state&&(webData.state=userHeaderModel.state),userHeaderModel.firstName&&(webData.firstName=userHeaderModel.firstName),userHeaderModel.lastName&&(webData.lastName=userHeaderModel.lastName),userHeaderModel.salesForceAccountIds&&(webData.sfaid=userHeaderModel.salesForceAccountIds))})} function getCookieHomeProduct(c){c+="\x3d";for(var g=decodeURIComponent(document.cookie).split(";"),e=0;e<g.length;e++){for(var b=g[e];" "==b.charAt(0);)b=b.substring(1);if(0==b.indexOf(c))return b.substring(c.length,b.length)}return""}function setVisitorCompanyDetailsCookieHomeProduct(c,g,e){e?(date=new Date,date.setTime(date.getTime()+6E4*e),expires="; expires\x3d"+date.toGMTString()):expires="; expires\x3d0";document.cookie=c+"\x3d"+g+expires+"; path\x3d/"} (function(c){var g=!1;"function"===typeof define&&define.amd&&(define(c),g=!0);"object"===typeof exports&&(module.exports=c(),g=!0);if(!g){var e=window.Cookies,b=window.Cookies=c();b.noConflict=function(){window.Cookies=e;return b}}})(function(){function c(){for(var e=0,b={};e<arguments.length;e++){var h=arguments[e],a;for(a in h)b[a]=h[a]}return b}function g(e){function b(h,a,d){if("undefined"!==typeof document){if(1<arguments.length){d=c({path:"/"},b.defaults,d);if("number"===typeof d.expires){var f= new Date;f.setMilliseconds(f.getMilliseconds()+864E5*d.expires);d.expires=f}d.expires=d.expires?d.expires.toUTCString():"";try{var k=JSON.stringify(a);/^[\{\[]/.test(k)&&(a=k)}catch(r){}a=e.write?e.write(a,h):encodeURIComponent(String(a)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent);h=encodeURIComponent(String(h));h=h.replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent);h=h.replace(/[\(\)]/g,escape);k="";for(var n in d)d[n]&&(k+="; "+n,!0!==d[n]&&(k+="\x3d"+ d[n]));return document.cookie=h+"\x3d"+a+k}h||(k={});n=document.cookie?document.cookie.split("; "):[];for(var l=/(%[0-9A-Z]{2})+/g,p=0;p<n.length;p++){var q=n[p].split("\x3d"),m=q.slice(1).join("\x3d");this.json||'"'!==m.charAt(0)||(m=m.slice(1,-1));try{f=q[0].replace(l,decodeURIComponent);m=e.read?e.read(m,f):e(m,f)||m.replace(l,decodeURIComponent);if(this.json)try{m=JSON.parse(m)}catch(r){}if(h===f){k=m;break}h||(k[f]=m)}catch(r){}}return k}}b.set=b;b.get=function(h){return b.call(b,h)};b.getJSON= function(){return b.apply({json:!0},[].slice.call(arguments))};b.defaults={};b.remove=function(h,a){b(h,"",c(a,{expires:-1}))};b.withConverter=g;return b}return g(function(){})}); var PAN=function(){var c={},g,e,b=!0,h=!1;c.getSkipReload=function(){return h};c.getPath=function(){return g};c.setPath=function(a){g=a};c.setCurrentPageId=function(a){e=a};c.getCurrentPageId=function(){return e};c.isIndexable=function(){return b};c.setIndexable=function(a){b=a};c.clearReturnExperience=function(){"undefined"!=typeof localStorage&&localStorage&&(localStorage.hasOwnProperty("janrainCaptureReturnExperienceData")&&localStorage.removeItem("janrainCaptureReturnExperienceData"),localStorage.hasOwnProperty("janrainCaptureReturnExperienceData_Expires")&& localStorage.removeItem("janrainCaptureReturnExperienceData_Expires"),localStorage.hasOwnProperty("janrainCaptureProfileData")&&localStorage.removeItem("janrainCaptureProfileData"),localStorage.hasOwnProperty("janrainCaptureProfileData_Expires")&&localStorage.removeItem("janrainCaptureProfileData_Expires"),localStorage.hasOwnProperty("janrainCaptureProfileData_Expires")&&localStorage.removeItem("janrainCaptureProfileData_Expires"),localStorage.hasOwnProperty("janrainLastAuthMethod")&&localStorage.removeItem("janrainLastAuthMethod"), localStorage.hasOwnProperty("janrainLastAuthMethod_Expires")&&localStorage.removeItem("janrainLastAuthMethod_Expires"),document.cookie="expected_tab\x3d; Path\x3d/; Expires\x3dThu, 01 Jan 1970 00:00:01 GMT; Domain\x3d."+document.domain+";")};c.logout=function(a){h=!0;"undefined"!=typeof a&&a||(a="/");try{SCF.Session.logout()}catch(d){}PAN.preLogout();a=encodeURIComponent(a);window.location.replace("/apps/pan/public/auth/logout?dest\x3d"+a)};c.preLogout=function(a){userHeaderModel.id="anonymous";"undefined"!= typeof janrain&&janrain&&janrain.capture.ui.endCaptureSession();PAN.clearReturnExperience()};c.hcpp="/content/pan/en_US";return c}();$(function(){("undefined"!=typeof botSelector&&!botSelector||"undefined"==typeof botSelector)&&PAN.tracking.initTracking()}); PAN.tracking=function(){function c(a){var d=$("[data-page-id\x3d'"+a+"'] .save-button"),f=$("[data-page-id\x3d'"+a+"'] .save-count"),k=d.hasClass("fa-star-o"),n=d.closest("ul").hasClass("chicklet-social-stats"),l=f.html().trim();-1<l.indexOf(" ")&&(l=l.substring(0,l.indexOf(" ")));l=parseInt(l)?parseInt(l):0;$.ajax({type:"POST",url:"/apps/public/tracking/trackSave",data:"pagePath\x3d"+a+"\x26save\x3d"+k,error:function(p,q,m){alert("Saving of page failed");f.text(l+(n?"":1==l?" save":" saves"));k? d.addClass("fa-star-o").removeClass("fa-star"):d.removeClass("fa-star-o").addClass("fa-star")}});a=l;k?a++:(a--,0>a&&(a=0));f.text(a+(n?"":1==a?" save":" saves"));k?d.removeClass("fa-star-o").addClass("fa-star"):d.addClass("fa-star-o").removeClass("fa-star")}function g(){$("body").on("click",".save-button",function(a){a.stopImmediatePropagation();a=$(this).closest("ul").data("page-id");if("anonymous"===userHeaderModel.id||"admin"===userHeaderModel.id){var d="/login";"undefined"!=typeof userHeaderModel.loginLink&& userHeaderModel.loginLink&&(d=userHeaderModel.loginLink);d+="?returnPageId\x3d"+encodeURIComponent(a)+"\x26returnAction\x3dsave";window.location=d}else c(a)})}function e(a){"undefined"!=typeof a&&a||(a=PAN.getPath());$.ajax({type:"POST",url:"/apps/public/tracking/trackView",data:"pagePath\x3d"+a,beforeSend:function(d){d.overrideMimeType("text/plain; charset\x3dUTF-8")}})}var b={},h=[];b.initTracking=function(){PAN.isIndexable()&&e();g()};b.addId=function(a){-1==h.indexOf(a)&&h.push(a)};b.getViews= function(){return 0};b.getDownloads=function(){return 0};b.didCurrentUserDownload=function(){return!1};b.getCurrentUserDownloadDate=function(){};b.getPageIds=function(){return h};b.recordView=function(a){e(a)};return b}(); function getSerializedTracking(){for(var c="",g={},e,b,h=/([^&=]+)=?([^&]*)/g;e=h.exec(window.location.search.substring(1));)b=b||0<=e[1].indexOf("utm_"),g[decodeURIComponent(e[1].replace(/\+/g," "))]=decodeURIComponent(e[2].replace(/\+/g," "));if(!b){b={csr:"source",cmd:"medium",ccn:"campaign",ctr:"term",cct:"content"};e=[];for(var a in b)e.push(a);for(h=new RegExp("utm("+e.join("|")+")\x3d([^|;]+)?","g");e=h.exec(document.cookie);)g["utm_"+b[e[1]]]=decodeURIComponent(e[2].replace(/\+/g," "))}console.log(g); ""!=getCookie("pansfdccid")&&(a=getCookie("pansfdccid"),c+="\x26Qualifying_Campaign__c\x3d"+a);for(var d in g){if("utm_source"==d)var f="utm_source__c";else"utm_medium"==d?f="utm_medium__c":"utm_term"==d?f="utm_term__c":"utm_keyword"==d?f="Google_Keyword__c":"utm_content"==d?f="utm_content__c":"utm_network"==d?f="utm_network__c":"utm_campaign"==d?f="utm_campaign__c":"utm_name"==d?f="utm_name__c":"utm_sitetarget"==d?f="Eloqua_utm_sitetarget__c":"custom1"==d?f="utm_custom1__c":"custom2"==d?f="utm_custom2__c": "CampaignId"==d?(f="Qualifying_Campaign__c",janrainLeadHandler.setCampaignId(g[d]),document.cookie="pansfdccid\x3d"+g[d]+"; path\x3d/; domain\x3d.paloaltonetworks.com"):"gclid"==d?f="GCLID__c":"lfclid"==d?f="utm_lfclid__c":"guid"==d?f="utm_guid__c":"ps"==d?f="utm_ps__c":"ts"==d&&(f="utm_ts__c");c=c+"\x26"+f+"\x3d"+g[d]}0<=document.referrer.indexOf("go.paloaltonetworks.com")&&(g=document.referrer.replace("http://go.paloaltonetworks.com/",""),c=c+"\x26utm_lfclid__c\x3d"+g);"\x26"==c.charAt(0)&&(c=c.substring(1)); return c}function getCookie(c){c+="\x3d";for(var g=document.cookie.split(";"),e=0;e<g.length;e++){for(var b=g[e];" "==b.charAt(0);)b=b.substring(1);if(0==b.indexOf(c))return b.substring(c.length,b.length)}return""};(function(){window.PAN_initializeProduct2021Nav=function(){var e=$(".productNav2021Component");if(e.length){var r=window.matchMedia("(min-width: 1200px)");window.matchMedia("(max-width: 1198.98px)");var f=e.find(".product-2021-nav"),b=e.find(".product-2021-nav-main"),c=b.find(".nav-left \x3e li");b.find(".col-tabs");b.find(".col-nav");var h=e.attr("data-type"),t="sase"===h||"cortex"===h,w="ngfw"===h||"unit"===h||"prisma"===h||"cloudcortex"===h,v=!1;e.find(".nav-open").on("click",function(g){f.addClass("open"); $("body").addClass("no-scroll")});e.find(".nav-close").on("click",function(g){g.stopPropagation();f.removeClass("open");$("body").removeClass("no-scroll");c.removeClass("open")});b.find(".nav-left").on("click","\x3e li",function(g){$(this).hasClass("link")||v||(c.removeClass("open"),$(this).addClass("open"),r.matches?f.addClass("open"):($("body").addClass("no-scroll"),b.animate({scrollTop:0},250).addClass("no-scroll")))});c.hover(function(g){if(!$(this).hasClass("link")&&!v&&r.matches&&($("body").removeClass("no-scroll"), c.removeClass("open"),$(this).addClass("open"),f.addClass("open"),w&&(g=$(this).find(".mega-dropdown-menu .col-tiles.tile-type-image .tile-image"),g.length))){var u=[];g.each(function(k,l){k=$(l).find(".text").outerHeight();u.push(k)});var p=u.reduce(function(k,l){return k>l?k:l});g.find(".text").css("height",p)}},function(g){!$(this).hasClass("link")&&r.matches&&($("body").removeClass("no-scroll"),$(this).removeClass("open"),f.removeClass("open"),w&&(g=$(this).find(".mega-dropdown-menu .col-tiles.tile-type-image .tile-image"), g.length&&g.find(".text").css("height","")))});f.find(".dropdown-overlay").on("click",function(g){f.removeClass("open");$("body").removeClass("no-scroll");$(coveoSearchEl).slideUp(250);r.matches&&c.removeClass("open")});b.find(".btn-nav-back").on("click",function(g){g.stopPropagation();c.removeClass("open");b.removeClass("no-scroll")});t&&(b.find(".nav-left \x3e .link \x3e a, .mega-dropdown-menu .col a").on("click",function(g){r.matches||"_blank"===$(this).attr("target")||(f.removeClass("open"),b.removeClass("no-scroll"), c.removeClass("open"),$("body").removeClass("no-scroll"))}),c.find('.mega-dropdown-menu[data-type\x3d"solutions"] .col-list div.title').on("click",function(g){r.matches||$(this).toggleClass("active")}),c.find('.mega-dropdown-menu[data-type\x3d"environments"] .col-list .list-sub-title').on("click",function(g){r.matches||$(this).toggleClass("active")}));if(w){var z=function(g,u,p,k){var l=g.attr("data-mobile-overview"),a=document.createElement("a"),d=g.parent().prev().attr("nav-track-breadcrumb");l|| (l=b.find(".mobile-inner-header").attr("data-mobile-overview"));$(a).attr({href:k,target:u.attr("target"),"aria-label":"to"+p.text(),"nav-track":"true","nav-track-breadcrumb":d+":"+l}).css({display:"flex","justify-content":"center","align-items":"center",gap:"16px",color:"#141414","font-weight":"500","text-decoration":"none","padding-top":"20px","text-align":"center"}).addClass("regular overview").html(l+'\x3cimg width\x3d"20" height\x3d"20" src\x3d"/etc/clientlibs/clean/imgs/arrow-right-black.svg" alt\x3d"black arrow pointing right to go to '+ p.text()+'"\x3e').insertAfter(g)};e=function(){if(!1===r.matches){b.find(".nav-left \x3e li \x3e a").click(function(u){$(this).parent().hasClass("link")||u.preventDefault()});var g=b.find(".nav-left \x3e li \x3e a");A||g.each(function(u,p){u=$(this).attr("href");p="undefined"!==typeof u&&"#"!==u;var k=$(this).parent(),l=$(this),a=k.find(".mobile-inner-header .title"),d=k.find(".mobile-inner-header");p&&z(d,l,a,u);$(this).on("click",function(q){$(this).parent().hasClass("link")||q.preventDefault(); setTimeout(function(){k.hasClass("active")?k.removeClass("active"):k.addClass("active")},0)})});b.find(".mega-dropdown-menu .col-list .title, .mega-dropdown-menu .col-list .mainTitle \x3e *").on("click",function(u){u.preventDefault();var p=$(this).attr("href"),k="undefined"!==typeof p,l=null,a=null,d=this;setTimeout(function(){$(d).hasClass("title")&&(l=$(d),a=$(d).next().find(".lists .list-unstyled:first-child \x3e li:first-child"));$(d).parent().hasClass("mainTitle")&&(l=$(d).parent(),a=l.next())}, 0);setTimeout(function(){if(l.hasClass("active"))l.removeClass("active"),k&&a.remove();else{if(k){var q=a,n=b.find(".mobile-inner-header").attr("data-mobile-overview"),m=$(d).attr("nav-track-breadcrumb"),y=document.createElement("li"),x=q.attr("data-column");$(y).attr({role:"none","data-column":x}).addClass("regular overview").html('\x3ca href\x3d"'+p+'" nav-track\x3d"true" nav-track-breadcrumb\x3d"'+m+":"+n+'" role\x3d"listitem"\x3e'+n+"\x3c/a\x3e").insertBefore(q)}l.addClass("active")}},0)});A|| (A=!0)}else b.find(".mega-dropdown-menu \x3e a").remove(),b.find(".nav-left \x3e li \x3e a").off("click")};b.find(".mega-dropdown-menu .col a").on("click",function(g){$(this).prop("hash")&&(v=!0,f.removeClass("open"),$("body").removeClass("no-scroll"),c.removeClass("open"),setTimeout(function(){v=!1},1E3))});var A=!1;r.addListener(e);e()}}}})(); (function(){window.PAN_initialize2021Nav=function(){var e=$(".nav2021Component");if(e.length){var r=function(){if("undefined"!==typeof userHeaderModel)switch(userHeaderModel.id){case "anonymous":return'\x3cli\x3e\x3ca href\x3d"'+userHeaderModel.logoutLink+'" nav-track\x3d"true" nav-track-breadcrumb\x3d"nav:userprofile:logout"\x3eSign Out\x3c/a\x3e\x3c/li\x3e';case "admin":return'\x3cli\x3e\x3ca href\x3d"'+userHeaderModel.logoutLink+'" nav-track\x3d"true" nav-track-breadcrumb\x3d"nav:userprofile:logout" \x3eSign Out\x3c/a\x3e\x3c/li\x3e'; default:return(userHeaderModel.eventsLink?'\x3cli\x3e\x3ca href\x3d"'+userHeaderModel.eventsLink+'" nav-track\x3d"true" nav-track-breadcrumb\x3d"nav:userprofile:events" \x3eEvents\x3c/a\x3e\x3c/li\x3e':"")+(userHeaderModel.profileLink?'\x3cli\x3e\x3ca href\x3d"'+userHeaderModel.profileLink+'" nav-track\x3d"true" nav-track-breadcrumb\x3d"nav:userprofile:myprofile" \x3eMy Profile\x3c/a\x3e\x3c/li\x3e':"")+(userHeaderModel.myfilesLink?'\x3cli\x3e\x3ca href\x3d"'+userHeaderModel.myfilesLink+'" nav-track\x3d"true" nav-track-breadcrumb\x3d"nav:userprofile:myfiles" \x3eMy Files\x3c/a\x3e\x3c/li\x3e': "")+((userHeaderModel.isMKTGAdmin||userHeaderModel.isSiteAdmin)&&userHeaderModel.manageSitesLink?'\x3cli\x3e\x3ca href\x3d"'+userHeaderModel.manageSitesLink+'" nav-track\x3d"true" nav-track-breadcrumb\x3d"nav:userprofile:managesite" \x3eManage Sites\x3c/a\x3e\x3c/li\x3e':"")+(userHeaderModel.isJoinee&&userHeaderModel.mySiteLink?'\x3cli\x3e\x3ca href\x3d"'+userHeaderModel.mySiteLink+'" nav-track\x3d"true" nav-track-breadcrumb\x3d"nav:userprofile:mysite" \x3eMy Site\x3c/a\x3e\x3c/li\x3e':"")+(userHeaderModel.boardsLink? '\x3cli\x3e\x3ca href\x3d"'+userHeaderModel.boardsLink+'" nav-track\x3d"true" nav-track-breadcrumb\x3d"nav:userprofile:boards" \x3eBoards\x3c/a\x3e\x3c/li\x3e':"")+(userHeaderModel.macrosLink?'\x3cli\x3e\x3ca href\x3d"'+userHeaderModel.macrosLink+'" target\x3d"_blank" nav-track\x3d"true" nav-track-breadcrumb\x3d"nav:userprofile:macros" \x3eMacros\x3c/a\x3e\x3c/li\x3e':"")+(userHeaderModel.logoutLink?'\x3cli\x3e\x3ca href\x3d"'+userHeaderModel.logoutLink+'" nav-track\x3d"true" nav-track-breadcrumb\x3d"nav:userprofile:logout" \x3eLogout\x3c/a\x3e\x3c/li\x3e': "")}},f=window.matchMedia("(min-width: 1200px)");window.matchMedia("(max-width: 767.98px)");var b=e.find(".pan-2021-nav"),c=e.find(".pan-2021-nav-main"),h=c.find(".nav-left \x3e li"),t=c.find(".col-tabs"),w=c.find(".col-nav"),v=e.hasClass("default"),z=e.hasClass("defaultRedesigned"),A=document.getElementById("coveosearch");e.find(".nav-open").on("click",function(a){setTimeout(function(){b.addClass("open");$("body").addClass("no-scroll")},0)});e.find(".nav-close").on("click",function(a){a.stopPropagation(); setTimeout(function(){b.removeClass("open");$("body").removeClass("no-scroll");h.hasClass("open")&&(t.parent().parent().hasClass("open")&&(t.removeClass("open"),t.find(".nav-info-heading .title").text(),t.parent().removeClass("no-scroll"),w.find('a[data-toggle\x3d"tab"].active').removeClass("active"),t.find(".tab-pane.show").removeClass("show")),h.removeClass("open"))},0)});if(v)c.find(".nav-left \x3e .link \x3e a, .mega-dropdown-menu .col a").on("click",function(a){f.matches||"_blank"===$(this).attr("target")|| "tab"===$(this).attr("role")||(b.removeClass("open"),$("body").removeClass("no-scroll"),h.removeClass("open"),t.removeClass("open"),t.find(".nav-info-heading .title").text(),w.parent().removeClass("no-scroll"),w.find('a[data-toggle\x3d"tab"].active').removeClass("active"),t.find(".tab-pane.show").removeClass("show"))});h.find("\x3e a").on("click mouseenter",function(a){if(!$(this).parent().hasClass("link"))if(a.preventDefault(),a=$(this).parent(),f.matches){if(t.length&&!a.find(".tab-pane.active").length){var d= a.find(".dropdown-nav-tabs \x3e li.active");d.length?(d=d.find('a[data-toggle\x3d"tab"]').attr("href"),a.find(d).addClass("active")):a.find('a[data-toggle\x3d"tab"]').first().tab("show")}}else t.removeClass("open"),t.find(".nav-info-heading .title").text(),w.parent().removeClass("no-scroll"),w.find('a[data-toggle\x3d"tab"].active').removeClass("active"),t.find(".tab-pane.show").removeClass("show")});if(z){var g=function(a,d,q,n){var m=a.attr("data-mobile-overview"),y=document.createElement("a"),x= a.parent().prev().attr("nav-track-breadcrumb");m||(m=c.find(".mobile-inner-header").attr("data-mobile-overview"));$(y).attr({href:n,target:d.attr("target"),"aria-label":"to"+q.text(),"nav-track":"true","nav-track-breadcrumb":x+":"+m}).css({display:"flex","justify-content":"center","align-items":"center",gap:"16px",color:"#141414","font-weight":"500","text-decoration":"none","padding-top":"20px","text-align":"center"}).addClass("regular overview").html(m+'\x3cimg width\x3d"20" height\x3d"20" src\x3d"/etc/clientlibs/clean/imgs/arrow-right-black.svg" alt\x3d"black arrow pointing right to go to '+ q.text()+'"\x3e').insertAfter(a)};e=function(){if(!1===f.matches){c.find(".nav-left \x3e li \x3e a").click(function(d){$(this).parent().hasClass("link")||d.preventDefault()});var a=c.find(".nav-left \x3e li \x3e a");u||a.each(function(d,q){d=$(this).attr("href");q="undefined"!==typeof d&&"#"!==d;var n=$(this).parent(),m=$(this),y=n.find(".mobile-inner-header .title"),x=n.find(".mobile-inner-header");q&&g(x,m,y,d);$(this).on("click",function(B){$(this).parent().hasClass("link")||B.preventDefault(); setTimeout(function(){n.hasClass("active")?n.removeClass("active"):n.addClass("active")},0)})});c.find(".mega-dropdown-menu .col-list .title, .mega-dropdown-menu .col-list .mainTitle \x3e *").on("click",function(d){d.preventDefault();var q=$(this).attr("href"),n="undefined"!==typeof q,m=null,y=null,x=this;setTimeout(function(){$(x).hasClass("title")&&(m=$(x),y=$(x).next().find(".lists .list-unstyled:first-child \x3e li:first-child"));$(x).parent().hasClass("mainTitle")&&(m=$(x).parent(),y=m.next())}, 0);setTimeout(function(){if(m.hasClass("active"))m.removeClass("active"),n&&y.remove();else{if(n){var B=y,C=c.find(".mobile-inner-header").attr("data-mobile-overview"),D=$(x).attr("nav-track-breadcrumb"),E=document.createElement("li"),F=B.attr("data-column");$(E).attr({role:"none","data-column":F}).addClass("regular overview").html('\x3ca href\x3d"'+q+'" nav-track\x3d"true" nav-track-breadcrumb\x3d"'+D+":"+C+'" role\x3d"listitem"\x3e'+C+"\x3c/a\x3e").insertBefore(B)}m.addClass("active")}},0)});u|| (u=!0)}else c.find(".mega-dropdown-menu \x3e a").remove(),c.find(".nav-left \x3e li \x3e a").off("click")};var u=!1;f.addListener(e);e()}c.find(".nav-left").on("click","\x3e li",function(a){if(!$(this).hasClass("link")){var d=this;setTimeout(function(){h.removeClass("open");$(d).addClass("open");f.matches?b.addClass("open"):($("body").addClass("no-scroll"),c.animate({scrollTop:0},250).addClass("no-scroll"))},0)}});h.hover(function(a){if(!$(this).hasClass("logo")&&f.matches&&($("body").removeClass("no-scroll"), h.removeClass("open"),$(this).addClass("open"),b.addClass("open"),z&&(a=$(this).find(".mega-dropdown-menu .col-tiles.tile-type-image .tile-image"),a.length))){var d=[];a.each(function(n,m){n=$(m).find(".text").outerHeight();d.push(n)});var q=d.reduce(function(n,m){return n>m?n:m});a.find(".text").css("height",q)}},function(a){!$(this).hasClass("logo")&&f.matches&&($("body").removeClass("no-scroll"),$(this).removeClass("open"),b.removeClass("open"),z&&(a=$(this).find(".mega-dropdown-menu .col-tiles.tile-type-image .tile-image"), a.length&&a.find(".text").css("height","")))});b.find(".dropdown-overlay").on("click",function(a){b.removeClass("open");$("body").removeClass("no-scroll");$(A).slideUp(250);f.matches&&h.removeClass("open")});c.find(".btn-nav-back").on("click",function(a){a.stopPropagation();setTimeout(function(){h.removeClass("open");c.removeClass("no-scroll");f.matches||c.find(".nav-mobile-toolbar .nav-left li.open").removeClass("open")},0)});c.find(".btn-tabs-back").on("click",function(a){a.stopPropagation();t.removeClass("open"); t.find(".nav-info-heading .title").text();w.parent().removeClass("no-scroll");w.find('a[data-toggle\x3d"tab"].active').removeClass("active");t.find(".tab-pane.show").removeClass("show")});c.find('a[data-toggle\x3d"tab"]').on("show.bs.tab",function(a){if(!f.matches){a=$(a.target).text();var d=$(this).closest(".mega-dropdown-menu"),q=d.find(".col-tabs");d.find(".col-nav").parent().animate({scrollTop:0},250).addClass("no-scroll");q.find(".mobile-inner-header .title").text(a);q.addClass("open")}});c.find('a[data-toggle\x3d"tab"]').on("mouseenter", function(a){if(f.matches){var d=$(this).attr("href");a=c.find('a[data-toggle\x3d"tab"]:not([href\x3d"'+d+'"])');d=d.substring(1);a.removeClass("active");c.find('.tab-pane:not([id\x3d"'+d+'"])').removeClass("active show");$(this).tab("show")}});var p=b.find(".toolbar-nav.toolbar-left");e=b.find(".nav-mobile-toolbar .nav-left").first();v=function(){if("undefined"!==typeof userHeaderModel)switch(userHeaderModel.id){case "anonymous":return{name:userHeaderModel.displayName,image:null,link:userHeaderModel.loginLink}; case "admin":return{name:userHeaderModel.displayName,image:null,link:userHeaderModel.profileLink};default:return{name:userHeaderModel.displayName,image:userHeaderModel.photoUrl?userHeaderModel.photoUrl:null,link:userHeaderModel.profileLink}}else return{name:!1,image:null,link:"/login"}}();if(v.name){var k=document.createElement("li");k.className="avatar";var l=r();$(k).html('\x3cdiv class\x3d"dropdown"\x3e\x3ca href\x3d"#" class\x3d"dropdown-toggle" data-toggle\x3d"dropdown"\x3e\x3ci class\x3d"image"'+ (v.image?"background-image:url("+v.image+")":"")+'\x3e\x3c/i\x3e\x3cspan class\x3d"user"\x3e'+v.name+'\x3c/span\x3e\x3c/a\x3e\x3cul class\x3d"dropdown-menu"\x3e'+l+"\x3c/ul\x3e\x3c/div\x3e");$(k).find(".dropdown-menu li").addClass("dropdown-item");p.find(".account").remove();p.prepend(k);p=document.createElement("li");$(p).html('\x3ca href\x3d"#"\x3eMy Account\x3c/a\x3e\x3cdiv class\x3d"mega-dropdown-menu"\x3e\x3cdiv class\x3d"mobile-inner-header"\x3e\x3cbutton class\x3d"btn btn-nav-back" aria-label\x3d"back to main navigation"\x3e\x3cimg width\x3d"24" height\x3d"24" src\x3d"/etc/clientlibs/clean/imgs/arrow-right-black.svg"/\x3e\x3c/button\x3e\x3cspan class\x3d"title"\x3e\x3cdiv class\x3d"image"\x3e\x3c/div\x3e\x3cspan class\x3d"user"\x3e'+ v.name+'\x3c/span\x3e\x3c/span\x3e\x3c/div\x3e\x3cdiv class\x3d"col col-list"\x3e\x3cdiv class\x3d"content"\x3e\x3cul class\x3d"list-unstyled"\x3e'+r()+"\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e");v.image&&$(p).find(".title .image").css("background-image",v.image);$(p).find(".btn-nav-back").get(0).addEventListener("click",function(a){a.stopPropagation();a=$(".nav2021Component").find(".pan-2021-nav-main").find(".col-tabs");a.removeClass("open");a.find(".nav-info-heading .title").text();w.parent().removeClass("no-scroll"); w.find('a[data-toggle\x3d"tab"].active').removeClass("active");a.find(".tab-pane.show").removeClass("show");$(".nav-mobile-toolbar .nav-left li.open").removeClass("open")});e.find(".account").remove();e.prepend(p)}b.find(".toolbar-nav .dropdown").on("show.bs.dropdown",function(){f.matches&&($(".mainNavigationComp .pan-page-alert").css("z-index",1),b.find(".pan-2021-nav-main").css({position:"relative","z-index":"-1"}),b.find(".pan-2021-nav-toolbar").css({position:"relative","z-index":2}),b.find(".dropdown-overlay").css({visibility:"visible", "z-index":1,top:0}))});b.find(".toolbar-nav .dropdown").on("hide.bs.dropdown",function(){f.matches&&($(".mainNavigationComp .pan-page-alert").css("z-index",""),b.find(".pan-2021-nav-main").css({position:"","z-index":""}),b.find(".pan-2021-nav-toolbar").css({position:"","z-index":""}),b.find(".dropdown-overlay").css({visibility:"","z-index":"",top:""}))})}}})(); function loadScript(e){return new Promise(function(r,f){var b=document.getElementsByTagName("head")[0],c=document.createElement("script");c.src=e;c.onload=function(){r()};c.onerror=function(){f("cannot load script "+e)};b.appendChild(c)})} (function(){window.PAN_renderCleanNavAccountMenu=function(h){if("undefined"!=typeof userHeaderModel)if(userHeaderModel.loginLink="/login",userHeaderModel.logoutLink="/system/sling/logout",userHeaderModel.janrain){userHeaderModel.profileLink="/userProfile";userHeaderModel.eventsLink="/userProfile/events";userHeaderModel.myfilesLink="/userProfile/myfiles";userHeaderModel.manageSitesLink="/userProfile/managesites";userHeaderModel.mySiteLink="/userProfile/mysite";userHeaderModel.boardsLink="/userProfile/editBoard"; if(userHeaderModel.isMacroAdmin||userHeaderModel.isMacroUser)userHeaderModel.macrosLink="/userProfile/macros";userHeaderModel.favoritesLink="/userProfile/favorites";userHeaderModel.downloadsLink="/userProfile/downloads";userHeaderModel.subscriptionLink="https://www.paloaltonetworks.com/company/subscriptions";userHeaderModel.activityLink="/userProfile/activity"}else userHeaderModel.profileLink="/ssoUserProfile",userHeaderModel.myfilesLink="/ssoUserProfile/myfiles",userHeaderModel.manageSitesLink="/ssoUserProfile/managesites", userHeaderModel.mySiteLink="/ssoUserProfile/mysite",userHeaderModel.boardsLink="/ssoUserProfile/editBoard",userHeaderModel.macrosLink="/ssoUserProfile/macros",userHeaderModel.favoritesLink="/ssoUserProfile/favorites",userHeaderModel.downloadsLink="/ssoUserProfile/downloads";h()};var e=!1,r=!1,f=!1,b=!1,c=!1;window.PAN_AttemptRenderOfNav=function(h){"adobeTarget"==h&&(e=!0);"userModel"==h&&(r=!0);"janrainInit"==h&&(f=!0);"menuAsyncLoad"==h&&(b=!0);r&&f&&b&&!c&&(c=!0,setTimeout(function(){window.PAN_initialize2021Nav&& window.PAN_renderCleanNavAccountMenu(window.PAN_initialize2021Nav);window.PAN_initializeProduct2021Nav&&window.PAN_renderCleanNavAccountMenu(window.PAN_initializeProduct2021Nav);window.location.host.split(".")},500));e&&window.PAN_renderCleanNavAccountMenu(window.PAN_initialize2021Nav)};"undefined"!==typeof PAN_RunOnPageModelLoad?PAN_RunOnPageModelLoad.push(function(){PAN_AttemptRenderOfNav("userModel")}):console.warn("cannot initialize nav because PAN_RunOnPageModelLoad is undefined")})();</script><script> if (window.Granite && Granite.I18n) Granite.I18n.setLocale('en_US'); var languageFromPath = 'en_US'; var languageFromPage = "en_US"; var shortCutURL = true; var mktoProgramId = ""; PAN.setIndexable(false); PAN.setCurrentPageId('/content/pan/en_US/resources'); PAN.tracking.addId('/content/pan/en_US/resources'); PAN.shouldRedirectDuringLogin = false; PAN.setPath("/content/pan/en_US/resources"); webData.pageName = 'en_US:resources'; webData.channel = 'resources'; webData.language = 'en_US'; webData.sectionPath = 'resources'; webData.resourceAssetID = 'ff6007c163f9056379e8d8c02a736765'; try{ webData.internalonlytags = {}; webData.internalonlytags.gtm = "X-Portfolio"; }catch(error){} try{webData.createdOn = "12/11/2024";}catch(error){} </script><script> var Coveo_organizationId = "paloaltonetworksintranet"; </script><script async> ;(function(win, doc, style, timeout) { var STYLE_ID = 'at-body-style'; function getParent() { return doc.getElementsByTagName('head')[0]; } function addStyle(parent, id, def) { if (!parent) { return; } var style = doc.createElement('style'); style.id = id; style.innerHTML = def; parent.appendChild(style); } function removeStyle(parent, id) { if (!parent) { return; } var style = doc.getElementById(id); if (!style) { return; } parent.removeChild(style); } addStyle(getParent(), STYLE_ID, style); setTimeout(function() { removeStyle(getParent(), STYLE_ID); }, timeout); }(window, document, "#at-prehide {opacity: 0 !important}", 3000)); </script><script src="//assets.adobedtm.com/9273d4aedcd2/0d76ae0322d7/launch-425c423d843b.min.js" async></script><meta name="twitter:site" content="@PaloAltoNtwks"/><meta name="twitter:creator" content="@PaloAltoNtwks"/><meta property="og:site_name" content="Palo Alto Networks"/><meta property="og:locale" content="en_US"/><meta property="og:title" content="Resources"/><meta property="og:type" content="website"/><meta property="og:description" content="Resources: In The News, Press Release, White Paper, Video, Webinar"/><meta property="og:url" content="https://www.paloaltonetworks.com/resources"/><meta name="twitter:title" content="Resources"/><meta property="twitter:description" name="twitter:description" content="Resources: In The News, Press Release, White Paper, Video, Webinar"/><meta name="twitter:card" content="summary"/><meta name="image" property="og:image" content="https://www.paloaltonetworks.com/etc/clientlibs/pan-templates/seoimages/social-resource.png"/><meta name="twitter:image" property="twitter:image" content="https://www.paloaltonetworks.com/etc/clientlibs/pan-templates/seoimages/social-resource.png"/><link rel="icon" type="image/vnd.microsoft.icon" href="/etc/designs/pan/favicon.ico"><link rel="shortcut icon" type="image/vnd.microsoft.icon" href="/etc/designs/pan/favicon.ico"><style type="text/css"> @keyframes slideHeroGridLeft { 0% { transform: translateX(0); } 100% { transform: translateX(-50%); /* The image height */ } } @keyframes slideHeroGridUp { 0% { transform: translateY(0); } 100% { transform: translateY(-50%); /* The image height */ } } @keyframes slideHeroGridDown { 0% { transform: translateY(-50%); } 100% { transform: translateY(0); /* The image height */ } } .panClean .prisma-hero .row { position: static; } .panClean .prisma-hero .sub-title.h4 { color: #fff; } .panClean .prisma-hero .hero-text { z-index: 997; } @media(max-width: 1200px){ .panClean .prisma-hero .sub-title.h4 { font-size: 12px; line-height: 18px; } .panClean .prisma-hero h1 { font-size: 32px; line-height: 40px; } } @media(max-width: 1199.98px){ .panClean .prisma-hero { padding-bottom: 152px; } } @media(max-width: 767.98px){ .panClean .prisma-hero { padding-bottom: 228px; } .panClean .prisma-hero .container-fluid:before { content:''; position: absolute; bottom: -50px; left: 0; width: 2304px; /* 1152 */ height: 278px; background-image: url('/content/dam/pan/en_US/images/resources/resources-hero-doc-grid-mobile.png'); background-size: contain; background-repeat: repeat-x; background-position: left bottom; animation: slideHeroGridLeft 7s linear infinite; } } @media(min-width: 768px){ .panClean .prisma-hero { padding-bottom: 18.619791666vw; } .panClean .prisma-hero .container-fluid:before, .panClean .prisma-hero .container-fluid:after { content: ''; position: absolute; z-index: 0; top: -100%; bottom: 0; width: 161px; /* 322/2 */ height: 1216px; /* 608 */ background-size: 100% auto; background-repeat: repeat-y; background-position: right bottom; } .panClean .prisma-hero .container-fluid:before { right: -7.14vw; animation: slideHeroGridUp 7s linear infinite; background-image: url('/content/dam/pan/en_US/images/resources/resources-hero-doc-grid-two.png'); } .panClean .prisma-hero .container-fluid:after { right: calc(161px - 7.14vw); animation: slideHeroGridDown 7s linear infinite; background-image: url('/content/dam/pan/en_US/images/resources/resources-hero-doc-grid-one.png'); } .panClean .prisma-hero::after { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 168px; z-index: 1; background-image: linear-gradient(to bottom, #000000 20%, rgba(0, 0, 0, 0) 72.66%); } .panClean .prisma-hero .container-fluid { position: relative; /* z-index: 2; */ } } @media(min-width: 992px){ .panClean .prisma-hero .container-fluid:before, .panClean .prisma-hero .container-fluid:after { width: 205px; /* 410/2 */ height: 1548px; /* 774 */ } .panClean .prisma-hero .container-fluid:after { right: calc(205px - 7.14vw); } } @media(min-width: 1200px){ .panClean .prisma-hero { padding-bottom: 14.84375vw; max-height: 725px; } .panClean .prisma-hero .container-fluid:before, .panClean .prisma-hero .container-fluid:after { width: 250px; /* 500/2 */ height: 1888px; /* 944 */ } .panClean .prisma-hero .container-fluid:after { right: calc(250px - 7.14vw); } .panClean .prisma-hero .container-fluid:before, .panClean .prisma-hero .container-fluid:after, .panClean .prisma-hero::after { top: 48px; top: -50%; } .panClean .prisma-hero .sub-title.h4 { font-size: 22px; line-height: 32px; } } @media(min-width: 1400px){ .panClean .prisma-hero .container-fluid:before, .panClean .prisma-hero .container-fluid:after { width: 291px; /* 582/2 */ height: 2198px; /* 1099 */ } .panClean .prisma-hero .container-fluid:after { right: calc(291px - 7.14vw); } .panClean .prisma-hero .hero-text { margin-left: 7.14vw; } } @media(min-width: 1600px){ .panClean .prisma-hero .container-fluid:before, .panClean .prisma-hero .container-fluid:after { width: 332px; /* 664/2 */ height: 2508px; /* 1254 */ } .panClean .prisma-hero .container-fluid:after { right: calc(332px - 7.14vw); } } @media(min-width: 1920px){ .panClean .prisma-hero .container-fluid:before, .panClean .prisma-hero .container-fluid:after { width: 400px; /* 800/2 */ height: 3022px; /* 1511 */ } .panClean .prisma-hero .container-fluid:after { right: calc(400px - 7.14vw); } } </style> <script>(window.BOOMR_mq=window.BOOMR_mq||[]).push(["addVar",{"rua.upush":"false","rua.cpush":"false","rua.upre":"false","rua.cpre":"false","rua.uprl":"false","rua.cprl":"false","rua.cprf":"false","rua.trans":"","rua.cook":"false","rua.ims":"false","rua.ufprl":"false","rua.cfprl":"false","rua.isuxp":"false","rua.texp":"norulematch","rua.ceh":"false","rua.ueh":"false","rua.ieh.st":"0"}]);</script> <script>!function(e){var n="https://s.go-mpulse.net/boomerang/";if("False"=="True")e.BOOMR_config=e.BOOMR_config||{},e.BOOMR_config.PageParams=e.BOOMR_config.PageParams||{},e.BOOMR_config.PageParams.pci=!0,n="https://s2.go-mpulse.net/boomerang/";if(window.BOOMR_API_key="6KU9W-5DTLL-AXSJY-VNWUZ-RTS7Q",function(){function e(){if(!o){var e=document.createElement("script");e.id="boomr-scr-as",e.src=window.BOOMR.url,e.async=!0,i.parentNode.appendChild(e),o=!0}}function t(e){o=!0;var n,t,a,r,d=document,O=window;if(window.BOOMR.snippetMethod=e?"if":"i",t=function(e,n){var t=d.createElement("script");t.id=n||"boomr-if-as",t.src=window.BOOMR.url,BOOMR_lstart=(new Date).getTime(),e=e||d.body,e.appendChild(t)},!window.addEventListener&&window.attachEvent&&navigator.userAgent.match(/MSIE [67]\./))return window.BOOMR.snippetMethod="s",void t(i.parentNode,"boomr-async");a=document.createElement("IFRAME"),a.src="about:blank",a.title="",a.role="presentation",a.loading="eager",r=(a.frameElement||a).style,r.width=0,r.height=0,r.border=0,r.display="none",i.parentNode.appendChild(a);try{O=a.contentWindow,d=O.document.open()}catch(_){n=document.domain,a.src="javascript:var d=document.open();d.domain='"+n+"';void(0);",O=a.contentWindow,d=O.document.open()}if(n)d._boomrl=function(){this.domain=n,t()},d.write("<bo"+"dy onload='document._boomrl();'>");else if(O._boomrl=function(){t()},O.addEventListener)O.addEventListener("load",O._boomrl,!1);else if(O.attachEvent)O.attachEvent("onload",O._boomrl);d.close()}function a(e){window.BOOMR_onload=e&&e.timeStamp||(new Date).getTime()}if(!window.BOOMR||!window.BOOMR.version&&!window.BOOMR.snippetExecuted){window.BOOMR=window.BOOMR||{},window.BOOMR.snippetStart=(new Date).getTime(),window.BOOMR.snippetExecuted=!0,window.BOOMR.snippetVersion=12,window.BOOMR.url=n+"6KU9W-5DTLL-AXSJY-VNWUZ-RTS7Q";var i=document.currentScript||document.getElementsByTagName("script")[0],o=!1,r=document.createElement("link");if(r.relList&&"function"==typeof r.relList.supports&&r.relList.supports("preload")&&"as"in r)window.BOOMR.snippetMethod="p",r.href=window.BOOMR.url,r.rel="preload",r.as="script",r.addEventListener("load",e),r.addEventListener("error",function(){t(!0)}),setTimeout(function(){if(!o)t(!0)},3e3),BOOMR_lstart=(new Date).getTime(),i.parentNode.appendChild(r);else t(!1);if(window.addEventListener)window.addEventListener("load",a,!1);else if(window.attachEvent)window.attachEvent("onload",a)}}(),"".length>0)if(e&&"performance"in e&&e.performance&&"function"==typeof e.performance.setResourceTimingBufferSize)e.performance.setResourceTimingBufferSize();!function(){if(BOOMR=e.BOOMR||{},BOOMR.plugins=BOOMR.plugins||{},!BOOMR.plugins.AK){var n=""=="true"?1:0,t="",a="bdpnbetim6jwwz5ywhtq-f-edacbb172-clientnsv4-s.akamaihd.net",i="false"=="true"?2:1,o={"ak.v":"39","ak.cp":"231409","ak.ai":parseInt("287050",10),"ak.ol":"0","ak.cr":7,"ak.ipv":4,"ak.proto":"http/1.1","ak.rid":"723f8c5","ak.r":23331,"ak.a2":n,"ak.m":"dscg","ak.n":"essl","ak.bpcip":"8.222.208.0","ak.cport":41734,"ak.gh":"184.86.250.155","ak.quicv":"","ak.tlsv":"tls1.2","ak.0rtt":"","ak.0rtt.ed":"","ak.csrc":"-","ak.acc":"reno","ak.t":"1740157415","ak.ak":"hOBiQwZUYzCg5VSAfCLimQ==pe2VBs4MXxQ9jWJ60Gsf/of2L/oWUVYJ5quOBlbdMo52frqJHtZdTawntkFTf9JAPdkV10bbcO6Lhr5/N5mt5fLRhQj7HKXYFyuK12rtHYCjd5+5PtcLVWW9+xne/v4g/L6/nXkM2xaXwhFlfRYRqp9bNJRcdvJFU5Q2kJi2g5Y7hUQLyuMjDUOUHr/X3IzVm9m32bHo+jj/zIN6ngBHi5Ar+9JH0BcYnXCb/Zd0EI/amlKKgIZaxhwneMYN41uiYNmzzYCqktlGYfG71QvY7xH69DrAgwYnPvKylFhxUKMddTjUPwkqrmquTi7NSmSxWi/QoEgtITTasN2l/w4s8C6wfQT0xiQu24cUbzzvwtmCNqPK97DIamB91X64c2VXEB7siJbVXp41GNIsSrhXlPp11hCgluBcmyZxUI+xQVY=","ak.pv":"347","ak.dpoabenc":"","ak.tf":i};if(""!==t)o["ak.ruds"]=t;var r={i:!1,av:function(n){var t="http.initiator";if(n&&(!n[t]||"spa_hard"===n[t]))o["ak.feo"]=void 0!==e.aFeoApplied?1:0,BOOMR.addVar(o)},rv:function(){var e=["ak.bpcip","ak.cport","ak.cr","ak.csrc","ak.gh","ak.ipv","ak.m","ak.n","ak.ol","ak.proto","ak.quicv","ak.tlsv","ak.0rtt","ak.0rtt.ed","ak.r","ak.acc","ak.t","ak.tf"];BOOMR.removeVar(e)}};BOOMR.plugins.AK={akVars:o,akDNSPreFetchDomain:a,init:function(){if(!r.i){var e=BOOMR.subscribe;e("before_beacon",r.av,null,null),e("onbeacon",r.rv,null,null),r.i=!0}return this},is_complete:function(){return!0}}}}()}(window);</script></head><body class="resourceredesign "><div class="panClean pan-template-resourceredesign"><div class="cleanHeader mainNavigationComp baseComponent parbase"><div class="base-component-spacer spacer-none "></div><div class="pan-page-alert pan-page-alert-black alert-2023 open" nolozad="true"><div class="container-fluid"><div class="row justify-content-center"><div class="col-12"><div class="glider-prev pan-page-alert-left-arr"></div><div class="glider-contain glider"><div class="glider-slide"><a href="https://unit42.paloaltonetworks.com/jailbreaking-generative-ai-web-products/" target="_blank" class="content align-items-center justify-content-center" nav-track="true" nav-track-breadcrumb="nav:topticker:item0:read more"><div class="pan-page-alert-text" data-truncate-lines="2" data-sm-truncate-lines="1">Investigating LLM Jailbreaking of Popular Generative AI Web Products</div></a></div><div class="glider-slide"><a href="https://unit42.paloaltonetworks.com/stately-taurus-uses-bookworm-malware/" target="_blank" class="content align-items-center justify-content-center" nav-track="true" nav-track-breadcrumb="nav:topticker:item1:read more"><div class="pan-page-alert-text" data-truncate-lines="2" data-sm-truncate-lines="1">Stately Taurus Activity in Southeast Asia Links to Bookworm Malware</div></a></div><div class="glider-slide"><a href="https://unit42.paloaltonetworks.com/nvidia-cuda-toolkit-vulnerabilities/" target="_blank" class="content align-items-center justify-content-center" nav-track="true" nav-track-breadcrumb="nav:topticker:item2:read more"><div class="pan-page-alert-text" data-truncate-lines="2" data-sm-truncate-lines="1">Multiple Vulnerabilities Discovered in NVIDIA CUDA Toolkit</div></a></div></div><div class="pan-page-alert-actions d-none d-xl-block"><a class="btn btn-primary" href="https://unit42.paloaltonetworks.com/" target="_blank" nav-track="true" nav-track-breadcrumb="nav:topticker:main-button:See all Unit 42 Threat Research"> See all Unit 42 Threat Research</a></div><div class="glider-next pan-page-alert-right-arr"></div></div></div></div></div><div class="nav2021Component dark absolute defaultRedesigned main-2023-alert" data-type="default" id="PAN_2021_NAV"><div class="pan-2021-nav initial-nav "><button class="btn nav-open" aria-label="open mobile navigation"></button><a class="mobile-header-logo" href="/" aria-label="Palo Alto Networks" nav-track="true" nav-track-breadcrumb="defaultNav:mobile:home"></a><button class="btn mobile-search" aria-label="search" nav-track="true" nav-track-breadcrumb="init-nav:mobile:search"></button><nav class="pan-2021-nav-toolbar" aria-label="toolbar"><div class="container-fluid"><ul class="toolbar-nav toolbar-left" role="list"><li class="account" role="listitem"><div class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown">Sign In</a><ul class="dropdown-menu" role="menu"><li class="dropdown-item"><a onclick="ssologin()" href="#" nav-track="true" nav-track-breadcrumb="defaultNav:Sign In:Customer">Customer</a></li><li class="dropdown-item"><a onclick="ssologin()" href="#" nav-track="true" nav-track-breadcrumb="defaultNav:Sign In:Partner">Partner</a></li><li class="dropdown-item"><a onclick="ssologin()" href="#" nav-track="true" nav-track-breadcrumb="defaultNav:Sign In:Employee">Employee</a></li><li class="dropdown-item"><a href="/login" nav-track="true" nav-track-breadcrumb="defaultNav:Sign In:logindownload">Login to download</a></li><li class="dropdown-item"><a href="/login?screenToRender=traditionalRegistration" nav-track="true" nav-track-breadcrumb="defaultNav:Create Account">Join us to become a member</a></li></ul></div></li><li role="listitem"><div class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown" >EN</a></div></li><li class="search" role="listitem"><a href="#" nav-track="true" nav-track-breadcrumb="defaultNav:Search" aria-label="search"><img width="24" height="24" src="/etc/clientlibs/clean/imgs/search-black.svg" nolozad="true" alt="magnifying glass search icon to open search field" /></a></li></ul><ul class="toolbar-nav toolbar-right" role="list"><li role="listitem"><a href="/content/pan/en_US/company/contact-sales.html" nav-track="true" nav-track-breadcrumb="defaultNav:Contact Us" class=""> Contact Us</a></li><li role="listitem"><a href="/content/pan/en_US/resources.html" nav-track="true" nav-track-breadcrumb="defaultNav:What's New" class=""> What's New</a></li><li role="listitem"><a href="https://support.paloaltonetworks.com/SupportAccount/MyAccount" target="_blank" nav-track="true" nav-track-breadcrumb="defaultNav:Get Support" class=""> Get Support</a></li><li role="listitem"><a href="https://start.paloaltonetworks.com/contact-unit42.html" target="_blank" nav-track="true" nav-track-breadcrumb="defaultNav:Under Attack?" class="under-attack"> Under Attack?</a></li></ul></div></nav><nav class="pan-2021-nav-main" aria-label="main"><div class="mobile-header"><button class="btn nav-close" nav-track="true" nav-track-breadcrumb="defaultNav:mobile:close nav" aria-label="close mobile navigation"><img width="24" height="24" src="/etc/clientlibs/clean/imgs/x-black.svg" alt="black x icon for closing mobile navigation"/></button><a href="/" class="nav-logo" nav-track="true" nav-track-breadcrumb="defaultNav:mobile:logo" aria-label="paloaltonetworks"><img width="120" height="23" src="/etc/clientlibs/clean/imgs/pan-logo-dark.svg" nolozad="true" alt="Palo Alto Networks logo"/></a><button class="btn mobile-search" nav-track="true" nav-track-breadcrumb="defaultNav:mobile:search" aria-label="search"><img width="28" height="28" src="/etc/clientlibs/clean/imgs/search-black.svg" nolozad="true" alt="magnifying glass search icon"/></button></div><div class="container-fluid"><ul class="nav-left" role="menubar"><li class="logo link" role="menuitem"><a href="/" nav-track="true" nav-track-breadcrumb="defaultNav:logo" aria-label="Palo Alto Networks"></a></li><li class=" " role="menuitem"><a href="#" id="nav_products" aria-haspopup="true" aria-expanded="false" nav-track="true" nav-track-breadcrumb="defaultNav:Products">Products</a></li><li class=" " role="menuitem"><a href="#" id="nav_solutions" aria-haspopup="true" aria-expanded="false" nav-track="true" nav-track-breadcrumb="defaultNav:Solutions">Solutions</a></li><li class=" " role="menuitem"><a href="#" id="nav_services" aria-haspopup="true" aria-expanded="false" nav-track="true" nav-track-breadcrumb="defaultNav:Services">Services</a></li><li class=" " role="menuitem"><a href="#" id="nav_partners" aria-haspopup="true" aria-expanded="false" nav-track="true" nav-track-breadcrumb="defaultNav:Partners">Partners</a></li><li class=" " role="menuitem"><a href="#" id="nav_company" aria-haspopup="true" aria-expanded="false" nav-track="true" nav-track-breadcrumb="defaultNav:Company">Company</a></li><li class=" " role="menuitem"><a href="#" id="nav_more" aria-haspopup="true" aria-expanded="false" nav-track="true" nav-track-breadcrumb="defaultNav:More">More</a></li></ul><div class="nav-mobile-toolbar"><ul class="mobile-toolbar nav-left" role="list"><li class="account" role="listitem"><a href="#" nav-track="true" nav-track-breadcrumb="defaultNav:mobile:Sign In">Sign In</a><div class="mega-dropdown-menu"><div class="mobile-inner-header"><button class="btn btn-nav-back" aria-label="back to main navigation"><img width="20" height="20" src="/etc/clientlibs/clean/imgs/arrow-right-black.svg" alt="black arrow pointing left to go back to main navigation"/></button><span class="title">Sign In</span></div><div class="col col-list"><div class="content"><ul class="list-unstyled"><li><a onclick="ssologin()" href="#" nav-track="true" nav-track-breadcrumb="defaultNav:mobile:Sign In:Customer">Customer</a></li><li><a onclick="ssologin()" href="#" nav-track="true" nav-track-breadcrumb="defaultNav:mobile:Sign In:Partner">Partner</a></li><li><a onclick="ssologin()" href="#" nav-track="true" nav-track-breadcrumb="defaultNav:mobile:Sign In:Employee">Employee</a></li><li><a href="/login" nav-track="true" nav-track-breadcrumb="defaultNav:mobile:Sign In:logindownload">Login to download</a></li><li><a href="/login?screenToRender=traditionalRegistration" nav-track="true" nav-track-breadcrumb="defaultNav:mobile:Create Account">Join us to become a member</a></li></ul></div></div></div></li><li role="listitem"><a href="#" >EN</a><div class="mega-dropdown-menu"><div class="mobile-inner-header"><button class="btn btn-nav-back" aria-label="back to main navigation"><img width="20" height="20" src="/etc/clientlibs/clean/imgs/arrow-right-black.svg" alt="black arrow pointing left to go back to main navigation"/></button><span class="title">Language</span></div><div class="col col-list"><div class="content"></div></div></div></li></ul><ul class="mobile-toolbar nav-left" role="list"><li role="listitem" class="link"><a href="/content/pan/en_US/company/contact-sales" nav-track="true" nav-track-breadcrumb="defaultNav:Contact Us">Contact Us</a></li><li role="listitem" class="link"><a href="/content/pan/en_US/resources" nav-track="true" nav-track-breadcrumb="defaultNav:Resources">What's New</a></li><li role="listitem" class="link"><a href="https://support.paloaltonetworks.com/SupportAccount/MyAccount" target="_blank" nav-track="true" nav-track-breadcrumb="defaultNav:mobile:Get support">Get support</a></li><li role="listitem" class="link"><a href="https://start.paloaltonetworks.com/contact-unit42.html" target="_blank" class="under-attack" nav-track="true" nav-track-breadcrumb="defaultNav:Under Attack?">Under Attack?</a></li></ul></div><ul class="nav-right" role="list"><li role="listitem"><a href="/content/pan/en_US/get-started.html" class="btn btn-primary" nav-track="true" nav-track-breadcrumb="defaultNav:Demos and Trials">Demos and Trials</a></li></ul></div></nav><div class="dropdown-overlay"></div><!-- coveo search --><!-- end coveo search --></div></div></div><div class="cleanPrismaHero prismaHeroComp baseComponent parbase"><div class="base-component-spacer spacer-none "></div><section class="prisma-hero hero-theme-dark hero-bg-black image-type-default " data-type="paloaltonetworks" nolozad="true"><div class="background-logo center auto to-animate" nolozad="true" style="background-image: url('/content/dam/pan/en_US/cyberpedia-redesign/cyberpedia_banner.jpg');" data-animate-type="fadeIn"></div><div class="container-fluid"><hr class="waypoint" /><div class="row"><!-- numberOfColumnsTablet --><!-- numberOfColumnsDesktop --><div class="col-12 col-md-5 col-xl-5 hero-text title-brand to-animate" data-animate-type="fadeInUp"><h1 class="title h1">Resource Center</h1><h2 class="sub-title h4">Our library of online content is here to help you learn more—no matter what format you prefer or which topic interests you most.</h2><div class="description h5"></div><div class="data-linkHelper linkHelper baseComponent parbase"><div class="base-component-spacer spacer-none "></div><!-- playIconButtonStyle --><ul class="list-unstyled" data-type=""><li><a href="#explore" class="btn pageAnchor mb-3 btn-primary light" data-page-track="true" data-page-track-value="resources:hero:Resource Center:search resources"> Search resources<i></i></a></li></ul></div></div></div></div></section><div id="prisma-hero-modal" class="prisma-hero-modal modal modal-xl fade" data-type="paloaltonetworks" data-backdrop="true"><div class="modal-dialog"><div class="modal-content"><button type="button" class="close-hero-image close" data-dismiss="modal" aria-label="Close"><img width="24" height="24" src="/etc/clientlibs/clean/imgs/x-white.svg" /></button><div class="modal-body"></div></div></div></div></div><div class="customBackgroundComp prismaCustomBackgroundComp baseComponent parbase"><div class="base-component-spacer spacer-none "></div><section class="prisma-custom-background white " style="" data-custom-type="prisma" data-theme="" nolozad="true"><div class="half-circle-svg type-4"><svg fill="none" x="0px" y="0px" viewBox="0 0 1920 180" width="1920" height="180" aria-hidden="true"><path d="M0,0v180h1920V0C1920,0,1055.7,394.4,0,0z"/></svg></div><div class="prisma-custom-background-content" style="z-index: 1;"><div class="prisma-custom-background parsys"></div></div></section></div><div class="mainParsys parsys"><div class="resourceCarouselTabs baseComponent parbase section"><div class="base-component-spacer spacer-large tablet-spacer-medium mobile-spacer-medium"></div><section class="resource-carousel-tabs"><div class="container-fluid"><div class="header theme-dark-text"><h2 class="h2 title">Discover categories relevant to your interests</h2><p class="h6 description">Browse featured lists of resources by selecting the category you’d like to see more of.</p></div></div><div class="filters-wrap"><ul class="filters"><li><button class="btn btn-outline-black cta-pills active" data-target="tab_0" data-page-track="true" data-page-track-value="en_us:resources:carousel-tabs:filter:Featured topics"> Featured topics </button></li><li><button class="btn btn-outline-black cta-pills " data-target="tab_1" data-page-track="true" data-page-track-value="en_us:resources:carousel-tabs:filter:Featured products"> Featured products </button></li><li><button class="btn btn-outline-black cta-pills " data-target="tab_2" data-page-track="true" data-page-track-value="en_us:resources:carousel-tabs:filter:Featured industries"> Featured industries </button></li><li><button class="btn btn-outline-black cta-pills " data-target="tab_3" data-page-track="true" data-page-track-value="en_us:resources:carousel-tabs:filter:Featured content types"> Featured content types </button></li></ul></div><div class="glider-contain"><div class="glider-wrapper" data-active-filter="tab_0"><div class="glider-slide " data-type="default" data-filter-id="tab_0"><button href="?q=*%3A*&_charset_=UTF-8&fq=RC_TOPIC_DFACET%3Apan%253Aresource-center%252Frc-topic%252Fzero-trust#tab_0" data-query="*:*" data-text="Zero Trust" data-tags="/content/cq:tags/pan/resource-center/rc-topic/zero-trust" data-fqs="RC_TOPIC_DFACET:"pan%3Aresource-center%2Frc-topic%2Fzero-trust"" data-page-track="true" data-track-value="en_us:resources:carousel-tabs:Featured topics:Zero Trust" class="card theme-light-text" style="background-image: url('\2f content\2f dam\2fpan\2f en_US\2fimages\2fresources\2fresources-carousel-1.jpg');"><div class="card-content"><h3 data-truncate-lines="3" class="title">Zero Trust</h3><span class="btn btn-dark">Explore category <i></i></span></div></button></div><div class="glider-slide " data-type="default" data-filter-id="tab_0"><button href="?q=*%3A*&_charset_=UTF-8&fq=RC_TOPIC_DFACET%3Apan%253Aresource-center%252Frc-topic%252Fsase#tab_0" data-query="*:*" data-text="Secure Access Service Edge (SASE)" data-tags="/content/cq:tags/pan/resource-center/rc-topic/sase" data-fqs="RC_TOPIC_DFACET:"pan%3Aresource-center%2Frc-topic%2Fsase"" data-page-track="true" data-track-value="en_us:resources:carousel-tabs:Featured topics:Secure Access Service Edge (SASE)" class="card theme-light-text" style="background-image: url('\2f content\2f dam\2fpan\2f en_US\2fimages\2fresources\2fresources-carousel-2.jpg');"><div class="card-content"><h3 data-truncate-lines="3" class="title">Secure Access Service Edge (SASE)</h3><span class="btn btn-dark">Explore category <i></i></span></div></button></div><div class="glider-slide " data-type="default" data-filter-id="tab_0"><button href="?q=*%3A*&_charset_=UTF-8&fq=RC_TOPIC_DFACET%3Apan%253Aresource-center%252Frc-topic%252Fthreat-prevention#tab_0" data-query="*:*" data-text="Threat Detection and Prevention" data-tags="/content/cq:tags/pan/resource-center/rc-topic/threat-prevention" data-fqs="RC_TOPIC_DFACET:"pan%3Aresource-center%2Frc-topic%2Fthreat-prevention"" data-page-track="true" data-track-value="en_us:resources:carousel-tabs:Featured topics:Threat Detection and Prevention" class="card theme-light-text" style="background-image: url('\2f content\2f dam\2fpan\2f en_US\2fimages\2fresources\2fresources-carousel-3.jpg');"><div class="card-content"><h3 data-truncate-lines="3" class="title">Threat Detection and Prevention</h3><span class="btn btn-dark">Explore category <i></i></span></div></button></div><div class="glider-slide " data-type="default" data-filter-id="tab_0"><button href="?q=*%3A*&_charset_=UTF-8&fq=RC_TOPIC_DFACET%3Apan%253Aresource-center%252Frc-topic%252Fsecure-remote-workforce#tab_0" data-query="*:*" data-text="Secure Remote Workforce" data-tags="/content/cq:tags/pan/resource-center/rc-topic/secure-remote-workforce" data-fqs="RC_TOPIC_DFACET:"pan%3Aresource-center%2Frc-topic%2Fsecure-remote-workforce"" data-page-track="true" data-track-value="en_us:resources:carousel-tabs:Featured topics:Secure Remote Workforce" class="card theme-light-text" style="background-image: url('\2f content\2f dam\2fpan\2f en_US\2fimages\2fresources\2fresources-carousel-4.jpg');"><div class="card-content"><h3 data-truncate-lines="3" class="title">Secure Remote Workforce</h3><span class="btn btn-dark">Explore category <i></i></span></div></button></div><div class="glider-slide hide" data-type="default" data-filter-id="tab_1"><button href="?q=*%3A*&_charset_=UTF-8&fq=PRODUCTS0_DFACET%3Apan%253Aresource-center%252Fproducts0%252Fredlock#tab_1" data-query="*:*" data-text="Prisma Cloud" data-tags="/content/cq:tags/pan/resource-center/products0/redlock" data-fqs="PRODUCTS0_DFACET:"pan%3Aresource-center%2Fproducts0%2Fredlock"" data-page-track="true" data-track-value="en_us:resources:carousel-tabs:Featured products:Prisma Cloud" class="card theme-light-text" style="background-image: url('\2f content\2f dam\2fpan\2f en_US\2fimages\2fresources\2fprisma-card-bg.jpg');"><div class="card-content"><h3 data-truncate-lines="3" class="title">Prisma Cloud</h3><span class="btn btn-dark">Explore category <i></i></span></div></button></div><div class="glider-slide hide" data-type="default" data-filter-id="tab_1"><button href="?q=*%3A*&_charset_=UTF-8&fq=PRODUCTS0_DFACET%3Apan%253Aresource-center%252Fproducts0%252Fprisma-sase#tab_1" data-query="*:*" data-text="Prisma SASE" data-tags="/content/cq:tags/pan/resource-center/products0/prisma-sase" data-fqs="PRODUCTS0_DFACET:"pan%3Aresource-center%2Fproducts0%2Fprisma-sase"" data-page-track="true" data-track-value="en_us:resources:carousel-tabs:Featured products:Prisma SASE" class="card theme-light-text" style="background-image: url('\2f content\2f dam\2fpan\2f en_US\2fimages\2fresources\2fprisma-card-bg.jpg');"><div class="card-content"><h3 data-truncate-lines="3" class="title">Prisma SASE</h3><span class="btn btn-dark">Explore category <i></i></span></div></button></div><div class="glider-slide hide" data-type="default" data-filter-id="tab_1"><button href="?q=*%3A*&_charset_=UTF-8&fq=RC_TOPIC_DFACET%3Apan%253Aresource-center%252Frc-topic%252Fnetwork-security#tab_1" data-query="*:*" data-text="NGFW" data-tags="/content/cq:tags/pan/resource-center/products0/ngfw" data-fqs="PRODUCTS0_DFACET:"pan%3Aresource-center%2Fproducts0%2Fngfw"" data-page-track="true" data-track-value="en_us:resources:carousel-tabs:Featured products:NGFW" class="card theme-light-text" style="background-image: url('\2f content\2f dam\2fpan\2f en_US\2fimages\2fresources\2fstrata-card-bg.jpg');"><div class="card-content"><h3 data-truncate-lines="3" class="title">NGFW</h3><span class="btn btn-dark">Explore category <i></i></span></div></button></div><div class="glider-slide hide" data-type="default" data-filter-id="tab_1"><button href="?q=*%3A*&_charset_=UTF-8&fq=PRODUCTS0_DFACET%3Apan%253Aresource-center%252Fproducts0%252Fxdr#tab_1" data-query="*:*" data-text="Cortex XDR" data-tags="/content/cq:tags/pan/resource-center/products0/xdr" data-fqs="PRODUCTS0_DFACET:"pan%3Aresource-center%2Fproducts0%2Fxdr"" data-page-track="true" data-track-value="en_us:resources:carousel-tabs:Featured products:Cortex XDR" class="card theme-light-text" style="background-image: url('\2f content\2f dam\2fpan\2f en_US\2fimages\2fresources\2f cortex-card-bg.jpg');"><div class="card-content"><h3 data-truncate-lines="3" class="title">Cortex XDR</h3><span class="btn btn-dark">Explore category <i></i></span></div></button></div><div class="glider-slide hide" data-type="default" data-filter-id="tab_2"><button href="?q=*%3A*&_charset_=UTF-8&fq=RC_INDUSTRY_DFACET%3Apan%253Aresource-center%252Frc-industry%252Fgovernment-federal#tab_2" data-query="*:*" data-text="Federal Government" data-tags="/content/cq:tags/pan/resource-center/rc-industry/government-federal" data-fqs="RC_INDUSTRY_DFACET:"pan%3Aresource-center%2Frc-industry%2Fgovernment-federal"" data-page-track="true" data-track-value="en_us:resources:carousel-tabs:Featured industries:Federal Government" class="card theme-light-text" style="background-image: url('\2f content\2f dam\2fpan\2f en_US\2fimages\2fresources\2f 4-3-publicsector-overview.jpg');"><div class="card-content"><h3 data-truncate-lines="3" class="title">Federal Government</h3><span class="btn btn-dark">Explore category <i></i></span></div></button></div><div class="glider-slide hide" data-type="default" data-filter-id="tab_2"><button href="?q=*%3A*&_charset_=UTF-8&fq=RC_INDUSTRY_DFACET%3Apan%253Aresource-center%252Frc-industry%252Ffinancial-services#tab_2" data-query="*:*" data-text="Financial Services" data-tags="/content/cq:tags/pan/resource-center/rc-industry/financial-services" data-fqs="RC_INDUSTRY_DFACET:"pan%3Aresource-center%2Frc-industry%2Ffinancial-services"" data-page-track="true" data-track-value="en_us:resources:carousel-tabs:Featured industries:Financial Services" class="card theme-light-text" style="background-image: url('\2f content\2f dam\2fpan\2f en_US\2fimages\2fresources\2f 4-3-financial-services.jpg');"><div class="card-content"><h3 data-truncate-lines="3" class="title">Financial Services</h3><span class="btn btn-dark">Explore category <i></i></span></div></button></div><div class="glider-slide hide" data-type="default" data-filter-id="tab_2"><button href="?q=*%3A*&_charset_=UTF-8&fq=RC_INDUSTRY_DFACET%3Apan%253Aresource-center%252Frc-industry%252Fhealthcare#tab_2" data-query="*:*" data-text="Healthcare" data-tags="/content/cq:tags/pan/resource-center/rc-industry/healthcare" data-fqs="RC_INDUSTRY_DFACET:"pan%3Aresource-center%2Frc-industry%2Fhealthcare"" data-page-track="true" data-track-value="en_us:resources:carousel-tabs:Featured industries:Healthcare" class="card theme-light-text" style="background-image: url('\2f content\2f dam\2fpan\2f en_US\2fimages\2fresources\2f 4-3-healthcare.jpg');"><div class="card-content"><h3 data-truncate-lines="3" class="title">Healthcare</h3><span class="btn btn-dark">Explore category <i></i></span></div></button></div><div class="glider-slide hide" data-type="default" data-filter-id="tab_2"><button href="?q=*%3A*&_charset_=UTF-8&fq=RC_INDUSTRY_DFACET%3Apan%253Aresource-center%252Frc-industry%252Fiot#tab_2" data-query="*:*" data-text="IoT" data-tags="/content/cq:tags/pan/resource-center/rc-industry/iot" data-fqs="RC_INDUSTRY_DFACET:"pan%3Aresource-center%2Frc-industry%2Fiot"" data-page-track="true" data-track-value="en_us:resources:carousel-tabs:Featured industries:IoT" class="card theme-light-text" style="background-image: url('\2f content\2f dam\2fpan\2f en_US\2fimages\2fresources\2f 4-3-medical.jpg');"><div class="card-content"><h3 data-truncate-lines="3" class="title">IoT</h3><span class="btn btn-dark">Explore category <i></i></span></div></button></div><div class="glider-slide hide" data-type="default" data-filter-id="tab_3"><button href="?q=*%3A*&_charset_=UTF-8&fq=RC_TYPE_DFACET%3Apan%253Aresource-center%252Frc-type%252Fvideo#tab_3" data-query="*:*" data-text="Videos" data-tags="/content/cq:tags/pan/resource-center/rc-type/video" data-fqs="RC_TYPE_DFACET:"pan%3Aresource-center%2Frc-type%2Fvideo"" data-page-track="true" data-track-value="en_us:resources:carousel-tabs:Featured content types:Videos" class="card theme-light-text" style="background-image: url('\2f content\2f dam\2fpan\2f en_US\2fimages\2fresources\2fvideos-orange-bg.jpg');"><div class="card-content"><h3 data-truncate-lines="3" class="title">Videos</h3><span class="btn btn-dark">Explore category <i></i></span></div></button></div><div class="glider-slide hide" data-type="default" data-filter-id="tab_3"><button href="?q=*%3A*&_charset_=UTF-8&fq=RC_TYPE_DFACET%3Apan%253Aresource-center%252Frc-type%252Fwhitepaper#tab_3" data-query="*:*" data-text="Whitepapers" data-tags="/content/cq:tags/pan/resource-center/rc-type/whitepaper" data-fqs="RC_TYPE_DFACET:"pan%3Aresource-center%2Frc-type%2Fwhitepaper"" data-page-track="true" data-track-value="en_us:resources:carousel-tabs:Featured content types:Whitepapers" class="card theme-light-text" style="background-image: url('\2f content\2f dam\2fpan\2f en_US\2fimages\2fresources\2fwhitepaper-orange-bg.jpg');"><div class="card-content"><h3 data-truncate-lines="3" class="title">Whitepapers</h3><span class="btn btn-dark">Explore category <i></i></span></div></button></div><div class="glider-slide hide" data-type="default" data-filter-id="tab_3"><button href="?q=*%3A*&_charset_=UTF-8&fq=RC_TYPE_DFACET%3Apan%253Aresource-center%252Frc-type%252Fdatasheet#tab_3" data-query="*:*" data-text="Datasheets" data-tags="/content/cq:tags/pan/resource-center/rc-type/datasheet" data-fqs="RC_TYPE_DFACET:"pan%3Aresource-center%2Frc-type%2Fdatasheet"" data-page-track="true" data-track-value="en_us:resources:carousel-tabs:Featured content types:Datasheets" class="card theme-light-text" style="background-image: url('\2f content\2f dam\2fpan\2f en_US\2fimages\2fresources\2f datasheets-orange-bg.jpg');"><div class="card-content"><h3 data-truncate-lines="3" class="title">Datasheets</h3><span class="btn btn-dark">Explore category <i></i></span></div></button></div><div class="glider-slide hide" data-type="default" data-filter-id="tab_3"><button href="?q=*%3A*&_charset_=UTF-8&fq=RC_TYPE_DFACET%3Apan%253Aresource-center%252Frc-type%252Fsolution-brief#tab_3" data-query="*:*" data-text="Solution Briefs" data-tags="/content/cq:tags/pan/resource-center/rc-type/solution-brief" data-fqs="RC_TYPE_DFACET:"pan%3Aresource-center%2Frc-type%2Fsolution-brief"" data-page-track="true" data-track-value="en_us:resources:carousel-tabs:Featured content types:Solution Briefs" class="card theme-light-text" style="background-image: url('\2f content\2f dam\2fpan\2f en_US\2fimages\2fresources\2fsolution-briefs-orange-bg.jpg');"><div class="card-content"><h3 data-truncate-lines="3" class="title">Solution Briefs</h3><span class="btn btn-dark">Explore category <i></i></span></div></button></div><div class="glider-slide hide" data-type="default" data-filter-id="tab_3"><button href="?q=*%3A*&_charset_=UTF-8&fq=RC_TYPE_DFACET%3Apan%253Aresource-center%252Frc-type%252Fresearch#tab_3" data-query="*:*" data-text="Research Reports" data-tags="/content/cq:tags/pan/resource-center/rc-type/research" data-fqs="RC_TYPE_DFACET:"pan%3Aresource-center%2Frc-type%2Fresearch"" data-page-track="true" data-track-value="en_us:resources:carousel-tabs:Featured content types:Research Reports" class="card theme-light-text" style="background-image: url('\2f content\2f dam\2fpan\2f en_US\2fimages\2fresources\2fresearch-reports-orange-bg.jpg');"><div class="card-content"><h3 data-truncate-lines="3" class="title">Research Reports</h3><span class="btn btn-dark">Explore category <i></i></span></div></button></div></div><div class="glider-arrows"><button class="glider-prev" aria-label="previous"></button><button class="glider-next" aria-label="next"></button></div></div></section></div></div><div class="container-fluid"><div class="cleanParsys parsys"><div class="searchcontroller parbase section"><form class="Bizible-Exclude" id="solr.form" method="get" action="resources.html"><input type="hidden" id="solr.query" name="q" value="*:*"><input type="hidden" name="_charset_" value="UTF-8"><fieldset id="solr.fq"></fieldset></form><script> $("#solr\\.form").on("submit",function(event) { // remove any blank values $("#solr\\.form > input[value='']").remove(); }); webData.events = ['internalSearch']; </script></div><div class="customTextComp baseComponent parbase section"><div class="base-component-spacer spacer-medium "></div><a name="explore" class="page-anchor"></a><section class="title-brand custom-text-comp text-center content-alignment-center theme-dark makeAlignmentCenterOnDevices reduce-desktop-title-spacing " data-type="default"><div class="container-fluid"><div class="row"><div class="col-12 col-md-10 offset-md-1 col-xl-8 offset-xl-2"><h2 class="normal-text-type h2 title-color-followTheme" style="color:">Explore resources</h2></div></div></div></section></div><div class="searchinput parbase section"><script type="text/javascript"> if (cqsearch === undefined) { var cqsearch = {}; } cqsearch.setSolrQuery = function(queryString) { $("#solr\\.query").val(queryString); // $("#solr\\.form").trigger("submit"); }; </script><form class="search-wrap Bizible-Exclude"><input class="btn" id="search-pan-search" type="submit" aria-label="submit" /><input type="search" aria-label="Search" class="resource-search-field dropdown" placeholder=" " id="solr.queryInput" name="q" value='' autocomplete="off"/><a class="btn" id="search-pan-clear" href="javascript:;" data-page-track="true" data-page-track-value="resources:: section:explore resources">Clear</a><div class="search-field-mega-dropdown"><p class="placeholdertext-mob d-lg-none"></p><div class="row"><div class="col-12 col-xxxl-4"><span class="h6 recent-search-title">Quick Links</span><ul class="list-unstyled recent-search-list h6"><li><a href="/resources?q=Cloud+Security&_charset_=UTF-8" data-page-track="true" data-track-value="en_us:resources:search-input:dropdown:quick-links:Cloud Security">Cloud Security</a></li><li><a href="/resources?q=Next+Generation+Firewall&_charset_=UTF-8" data-page-track="true" data-track-value="en_us:resources:search-input:dropdown:quick-links:Next Generation Firewall">Next Generation Firewall</a></li><li><a href="/resources?q=Wildfire&_charset_=UTF-8" data-page-track="true" data-track-value="en_us:resources:search-input:dropdown:quick-links:Wildfire">Wildfire</a></li><li><a href="/resources?q=SD-WAN&_charset_=UTF-8" data-page-track="true" data-track-value="en_us:resources:search-input:dropdown:quick-links:SD-WAN">SD-WAN</a></li><li><a href="/resources?q=Global+Protect&_charset_=UTF-8" data-page-track="true" data-track-value="en_us:resources:search-input:dropdown:quick-links:Global Protect">Global Protect</a></li></ul></div><div class="col-12 col-xxxl-8"><div class="row"><div class="col-12 col-md-6 col-xxl-4"><a href="https://start.paloaltonetworks.com/state-of-cloud-native-security-2023.html" target="_blank" data-page-track="true" data-track-value="en_us:resources:search-input:dropdown:featured-cards:State of Cloud Native Security Report 2023" rel="noopener"><div class="recent-card" data-type="prisma" data-video="no"><figure class="ar-16-9"><img data-src="/content/dam/pan/en_US/images/prisma/cloud/The-State-of-Cloud-Native-Security-Report-2023-1920x1090-01.png" alt="State of Cloud Native Security Report 2023" class="lozad "/></figure><p class="h6">State of Cloud Native Security Report 2023</p></div></a></div><div class="col-12 col-md-6 col-xxl-4"><a href="https://start.paloaltonetworks.com/unit-42-network-threat-trends-report-2022" target="_blank" data-page-track="true" data-track-value="en_us:resources:search-input:dropdown:featured-cards:2022 Unit 42 Network Threat Trends Research Report" rel="noopener"><div class="recent-card" data-type="unit42" data-video="no"><figure class="ar-16-9"><img data-src="/content/dam/pan/en_US/images/resources/unit-42-featured-bg.jpg" alt="Unit 42 Research Report" class="lozad "/></figure><p class="h6">2022 Unit 42 Network Threat Trends Research Report</p></div></a></div><div class="col-12 col-md-6 col-xxl-4"><a href="/resources/demos/cortex-xdr-3-0-demo" data-page-track="true" data-track-value="en_us:resources:search-input:dropdown:featured-cards:Cortex XDR 3.0 Demo"><div class="recent-card" data-type="cortex" data-video="no"><figure class="ar-16-9"><img data-src="/content/dam/pan/en_US/images/resources/cortex-featured-bg.jpg" alt="Cortex XDR 3.0 Demo" class="lozad "/></figure><p class="h6">Cortex XDR 3.0 Demo</p></div></a></div></div></div></div></div></form><button class="btn btn-close-mega-dropdown" aria-label="close quicklinks dropdown"><i></i></button><button class="btn btn-flyout-facets" aria-label="open mobile facets modal"><i></i></button></div><div class="resourceIconCarouselFilters baseComponent parbase section"><div class="base-component-spacer spacer-none "></div><div class="resource-icon-carousel in-container"><div class="glider-contain"><div class="glider-wrapper"><div class="glider-slide" data-type="default"><button data-query="*:*" data-text="PRESS RELEASE" data-tags="/content/cq:tags/pan/resource-center/rc-type/press-release" data-fqs="RC_TYPE_DFACET:"pan%3Aresource-center%2Frc-type%2Fpress-release"" class="content" id="resource_icon_item_0" data-page-track="true" data-track-value="en_us:resources:icon-carousel:PRESS RELEASE"><div class="image"><figure class="ar-1-1 contain"><img class="lozad hover-image" data-src="/content/dam/pan/en_US/images/resources/icon-carousel-press-release-hover.svg.svg" alt="Orange Press Release"/><img data-src="/content/dam/pan/en_US/images/resources/icon-carousel-press-release.svg" alt="Press Release" class="lozad "/></figure></div><p class="h6">PRESS RELEASE<br/><span class="loading"></span></p></button></div><div class="glider-slide" data-type="default"><button data-query="*:*" data-text="VIDEOS" data-tags="/content/cq:tags/pan/resource-center/rc-type/video" data-fqs="RC_TYPE_DFACET:"pan%3Aresource-center%2Frc-type%2Fvideo"" class="content" id="resource_icon_item_1" data-page-track="true" data-track-value="en_us:resources:icon-carousel:VIDEOS"><div class="image"><figure class="ar-1-1 contain"><img data-src="/content/dam/pan/en_US/images/resources/resource-page-icons_videos-382x434.svg" alt="Video" class="lozad "/></figure></div><p class="h6">VIDEOS<br/><span class="loading"></span></p></button></div><div class="glider-slide" data-type="default"><button data-query="*:*" data-text="PODCAST" data-tags="/content/cq:tags/pan/resource-center/rc-type/podcast" data-fqs="RC_TYPE_DFACET:"pan%3Aresource-center%2Frc-type%2Fpodcast"" class="content" id="resource_icon_item_2" data-page-track="true" data-track-value="en_us:resources:icon-carousel:PODCAST"><div class="image"><figure class="ar-1-1 contain"><img class="lozad hover-image" data-src="/content/dam/pan/en_US/images/icons/podcast.svg" alt="Podcast"/><img data-src="/content/dam/pan/en_US/images/icons/podcast.svg" alt="PODCAST" class="lozad "/></figure></div><p class="h6">PODCAST<br/><span class="loading"></span></p></button></div><div class="glider-slide" data-type="default"><button data-query="*:*" data-text="DATASHEET" data-tags="/content/cq:tags/pan/resource-center/rc-type/datasheet" data-fqs="RC_TYPE_DFACET:"pan%3Aresource-center%2Frc-type%2Fdatasheet"" class="content" id="resource_icon_item_3" data-page-track="true" data-track-value="en_us:resources:icon-carousel:DATASHEET"><div class="image"><figure class="ar-1-1 contain"><img data-src="/content/dam/pan/en_US/images/resources/resource-page-icons_datasheets-382x434.svg" alt="Datasheet" class="lozad "/></figure></div><p class="h6">DATASHEET<br/><span class="loading"></span></p></button></div><div class="glider-slide" data-type="default"><button data-query="*:*" data-text="WHITEPAPERS" data-tags="/content/cq:tags/pan/resource-center/rc-type/whitepaper" data-fqs="RC_TYPE_DFACET:"pan%3Aresource-center%2Frc-type%2Fwhitepaper"" class="content" id="resource_icon_item_4" data-page-track="true" data-track-value="en_us:resources:icon-carousel:WHITEPAPERS"><div class="image"><figure class="ar-1-1 contain"><img data-src="/content/dam/pan/en_US/images/resources/resource-page-icons_whitepapers-382x434.svg" alt="Whitepaper" class="lozad "/></figure></div><p class="h6">WHITEPAPERS<br/><span class="loading"></span></p></button></div><div class="glider-slide" data-type="default"><button data-query="*:*" data-text="WEBINAR" data-tags="/content/cq:tags/pan/resource-center/rc-type/webinar" data-fqs="RC_TYPE_DFACET:"pan%3Aresource-center%2Frc-type%2Fwebinar"" class="content" id="resource_icon_item_5" data-page-track="true" data-track-value="en_us:resources:icon-carousel:WEBINAR"><div class="image"><figure class="ar-1-1 contain"><img data-src="/content/dam/pan/en_US/images/resources/icon-carousel-webinar.svg" alt="Laptop with Webinar" class="lozad "/></figure></div><p class="h6">WEBINAR<br/><span class="loading"></span></p></button></div><div class="glider-slide" data-type="default"><button data-query="*:*" data-text="CUSTOMER STORY" data-tags="/content/cq:tags/pan/resource-center/rc-type/customer-story" data-fqs="RC_TYPE_DFACET:"pan%3Aresource-center%2Frc-type%2Fcustomer-story"" class="content" id="resource_icon_item_6" data-page-track="true" data-track-value="en_us:resources:icon-carousel:CUSTOMER STORY"><div class="image"><figure class="ar-1-1 contain"><img data-src="/content/dam/pan/en_US/images/resources/icon-carousel-customer-story.svg" alt="Customer Giving Story" class="lozad "/></figure></div><p class="h6">CUSTOMER STORY<br/><span class="loading"></span></p></button></div><div class="glider-slide" data-type="default"><button data-query="*:*" data-text="SOLUTION BRIEFS" data-tags="/content/cq:tags/pan/resource-center/rc-type/solution-brief" data-fqs="RC_TYPE_DFACET:"pan%3Aresource-center%2Frc-type%2Fsolution-brief"" class="content" id="resource_icon_item_7" data-page-track="true" data-track-value="en_us:resources:icon-carousel:SOLUTION BRIEFS"><div class="image"><figure class="ar-1-1 contain"><img data-src="/content/dam/pan/en_US/images/resources/resource-page-icons_solution-brief-382x434.svg" alt="Lightbulb" class="lozad "/></figure></div><p class="h6">SOLUTION BRIEFS<br/><span class="loading"></span></p></button></div><div class="glider-slide" data-type="strata"><button data-query="*:*" data-text="NGFW" data-tags="/content/cq:tags/pan/resource-center/products0/ngfw" data-fqs="PRODUCTS0_DFACET:"pan%3Aresource-center%2Fproducts0%2Fngfw"" class="content" id="resource_icon_item_8" data-page-track="true" data-track-value="en_us:resources:icon-carousel:NGFW"><div class="image"><figure class="ar-1-1 contain"><img data-src="/content/dam/pan/en_US/images/resources/icon-carousel-ngfw.svg" alt="NGFW Icon" class="lozad "/></figure></div><p class="h6">NGFW<br/><span class="loading"></span></p></button></div><div class="glider-slide" data-type="prisma"><button data-query="*:*" data-text="PRISMA CLOUD" data-tags="/content/cq:tags/pan/resource-center/products0/redlock" data-fqs="PRODUCTS0_DFACET:"pan%3Aresource-center%2Fproducts0%2Fredlock"" class="content" id="resource_icon_item_9" data-page-track="true" data-track-value="en_us:resources:icon-carousel:PRISMA CLOUD"><div class="image"><figure class="ar-1-1 contain"><img data-src="/content/dam/pan/en_US/images/resources/icon-carousel-prisma-cloud.svg" alt="Prisma Cloud Icon" class="lozad "/></figure></div><p class="h6">PRISMA CLOUD<br/><span class="loading"></span></p></button></div><div class="glider-slide" data-type="cortex"><button data-query="*:*" data-text="CORTEX XDR" data-tags="/content/cq:tags/pan/resource-center/products0/xdr" data-fqs="PRODUCTS0_DFACET:"pan%3Aresource-center%2Fproducts0%2Fxdr"" class="content" id="resource_icon_item_10" data-page-track="true" data-track-value="en_us:resources:icon-carousel:CORTEX XDR"><div class="image"><figure class="ar-1-1 contain"><img data-src="/content/dam/pan/en_US/images/resources/icon-carousel-cortex-xdr.svg" alt="Cortex XDR Icon" class="lozad "/></figure></div><p class="h6">CORTEX XDR<br/><span class="loading"></span></p></button></div><div class="glider-slide" data-type="cortex"><button data-query="*:*" data-text="CORTEX XSIAM" data-tags="/content/cq:tags/pan/resource-center/products0/cortex-xsiam" data-fqs="PRODUCTS0_DFACET:"pan%3Aresource-center%2Fproducts0%2Fcortex-xsiam"" class="content" id="resource_icon_item_11" data-page-track="true" data-track-value="en_us:resources:icon-carousel:CORTEX XSIAM"><div class="image"><figure class="ar-1-1 contain"><img data-src="/content/dam/pan/en_US/images/resources/icons-cortex-xsiam-black-45x45.svg" alt="Cortex XSIAM Icon" class="lozad "/></figure></div><p class="h6">CORTEX XSIAM<br/><span class="loading"></span></p></button></div><div class="glider-slide" data-type="cortex"><button data-query="*:*" data-text="CORTEX XSOAR" data-tags="/content/cq:tags/pan/resource-center/products0/demisto" data-fqs="PRODUCTS0_DFACET:"pan%3Aresource-center%2Fproducts0%2Fdemisto"" class="content" id="resource_icon_item_12" data-page-track="true" data-track-value="en_us:resources:icon-carousel:CORTEX XSOAR"><div class="image"><figure class="ar-1-1 contain"><img data-src="/content/dam/pan/en_US/images/resources/icon-carousel-cortex-xdr.svg" alt="Cortex XSOAR Icon" class="lozad "/></figure></div><p class="h6">CORTEX XSOAR<br/><span class="loading"></span></p></button></div><div class="glider-slide" data-type="default"><button data-query="*:*" data-text="FINANCIAL SERVICES" data-tags="/content/cq:tags/pan/resource-center/rc-industry/financial-services" data-fqs="RC_INDUSTRY_DFACET:"pan%3Aresource-center%2Frc-industry%2Ffinancial-services"" class="content" id="resource_icon_item_13" data-page-track="true" data-track-value="en_us:resources:icon-carousel:FINANCIAL SERVICES"><div class="image"><figure class="ar-1-1 contain"><img class="lozad hover-image" data-src="/content/dam/pan/en_US/northstar/industry/financial-services.svg" alt="Orange Financial Services"/><img data-src="/content/dam/pan/en_US/images/resources/financial-services-black.svg" alt="Financial Services" class="lozad "/></figure></div><p class="h6">FINANCIAL SERVICES<br/><span class="loading"></span></p></button></div><div class="glider-slide" data-type="default"><button data-query="*:*" data-text="MANUFACTURING" data-tags="/content/cq:tags/pan/resource-center/rc-industry/manufacturing" data-fqs="RC_INDUSTRY_DFACET:"pan%3Aresource-center%2Frc-industry%2Fmanufacturing"" class="content" id="resource_icon_item_14" data-page-track="true" data-track-value="en_us:resources:icon-carousel:MANUFACTURING"><div class="image"><figure class="ar-1-1 contain"><img class="lozad hover-image" data-src="/content/dam/pan/en_US/northstar/industry/manufacturing-icon.svg" alt="Orange box with gears"/><img data-src="/content/dam/pan/en_US/images/resources/manufacturing-icon-black.svg" alt="Box with gears" class="lozad "/></figure></div><p class="h6">MANUFACTURING<br/><span class="loading"></span></p></button></div><div class="glider-slide" data-type="default"><button data-query="*:*" data-text="HEALTHCARE" data-tags="/content/cq:tags/pan/resource-center/rc-industry/healthcare" data-fqs="RC_INDUSTRY_DFACET:"pan%3Aresource-center%2Frc-industry%2Fhealthcare"" class="content" id="resource_icon_item_15" data-page-track="true" data-track-value="en_us:resources:icon-carousel:HEALTHCARE"><div class="image"><figure class="ar-1-1 contain"><img class="lozad hover-image" data-src="/content/dam/pan/en_US/northstar/industry/healthcare-icon.svg" alt="Orange healthcare"/><img data-src="/content/dam/pan/en_US/images/resources/healthcare-icon-black.svg" alt="Healthcare" class="lozad "/></figure></div><p class="h6">HEALTHCARE<br/><span class="loading"></span></p></button></div></div><div class="glider-arrows"><button class="glider-prev" aria-label="previous"></button><div class="glider-prev-fade"></div><button class="glider-next" aria-label="next"></button><div class="glider-next-fade"></div></div></div></div></div><div class="row"><div class="col-md-12"></div><div class="col-md-12 col-12 col-xl-4 col-xxxl-3 d-none d-xl-flex"><div class="searchfacets parbase section"><div class="mobile-header"><h3 class="h3">Filters</h3><button class="btn btn-close-mobile-facets"><i></i></button></div><div class="searchbreadbox parbase"><ul id="currentsearchbreadbox" class="breadbox clearfix"></ul></div><div class="accordion" id="resources_facets_accordion"><div class="facet-section" id="facet-section-RSC_DATE"><div class="facet-header collapsed" id="RSC_DATE_header" data-toggle="collapse" data-target="#RSC_DATE_collapse" aria-controls="RSC_DATE_collapse"><h3 class="h4">Date</h3><button class="btn collapse-icon" type="button" aria-label="toggle date section"><i></i></button></div><div id="RSC_DATE_collapse" class="collapse" aria-labelledby="RSC_DATE_header" data-parent="#resources_facets_accordion"><div class="datepicker datepicker-start"><label for="datetimepicker_start_input">Start date</label><div class="input-group date" id="datetimepicker_start"><input type="text" id="datetimepicker_start_input" class="form-control" placeholder="Start date"><i class="icon-calendar"></i></div></div><div class="datepicker datepicker-end"><label for="datetimepicker_end_input">End date</label><div class="input-group date" id="datetimepicker_end"><input type="text" id="datetimepicker_end_input" class="form-control" placeholder="End date"><i class="icon-calendar"></i></div></div><div class="datepicker-actions"><button class="btn btn-black btn-sm btn-date">Search by date</button></div><script type="text/javascript"> // TODO // if(typeof isJanrainProfilePage == "undefined" || !isJanrainProfilePage) { // attachDateFilterEvents() // } cqsearch.convertDatesToFq = function(startDate, endDate) { var fq = null; if(!startDate && !endDate) { //Pop up a warning return fq; } else if(!startDate && endDate) { fq = "publishDate:[* TO " + endDate + "]"; } else if(startDate && !endDate) { fq = "publishDate:[" + startDate + " TO NOW]"; } else { fq = "publishDate:[" + startDate + " TO " + endDate + "]"; } return fq; } </script><ul class="facet-list date-options-list"><li><label data-value="publishDate:[NOW-7DAYS TO NOW]" data-title="Last week"><input type="checkbox" class="checkbox" onclick="cqsearch.addDateFq('publishDate:[NOW-7DAYS TO NOW]', this)" data-breadbox-text="Last week" /><i></i><span>Last week</span></label></li><li><label data-value="publishDate:[NOW-30DAYS TO NOW]" data-title="Last 30 days"><input type="checkbox" class="checkbox" onclick="cqsearch.addDateFq('publishDate:[NOW-30DAYS TO NOW]', this)" data-breadbox-text="Last 30 days" /><i></i><span>Last 30 days</span></label><li><label data-value="publishDate:[NOW-6MONTHS TO NOW]" data-title="Last 6 months"><input type="checkbox" class="checkbox" onclick="cqsearch.addDateFq('publishDate:[NOW-6MONTHS TO NOW]', this)" data-breadbox-text="Last 6 months" /><i></i><span>Last 6 months</span></label></li><li><label data-value="publishDate:[NOW-1YEAR TO NOW]" data-title="Last year"><input type="checkbox" class="checkbox" onclick="cqsearch.addDateFq('publishDate:[NOW-1YEAR TO NOW]', this)" data-breadbox-text="Last year" /><i></i><span>Last year</span></label></li></ul></div></div><div class="facet-section cat" id="facet-section-RC_TOPIC_DFACET"><div class="facet-header collapsed" id="RC_TOPIC_DFACET_header" data-toggle="collapse" data-target="#RC_TOPIC_DFACET_collapse" aria-controls="RC_TOPIC_DFACET_collapse"><h3 class="h4">Topic<span></span></h3><button class="btn collapse-icon" type="button" aria-label="toggle Topic section"><i></i></button></div><div id="RC_TOPIC_DFACET_collapse" class="collapse" aria-labelledby="RC_TOPIC_DFACET_header" data-parent="#resources_facets_accordion"><ul id="RC_TOPIC_DFACET" class="facet-list" data-more-text="+ Show More" data-less-text="- Show Less"><script type="text/javascript"> $('#facet-section-RC_TOPIC_DFACET').hide(); </script><script type="text/javascript"> $('#facet-section-RC_TOPIC_DFACET').show(); </script><li ><label data-value="RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fnetwork-security" data-title="Network Security"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fnetwork-security', this);"/><i></i><span>Network Security (<span class="count">542</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TOPIC_DFACET').show(); </script><li ><label data-value="RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fcloud-security" data-title="Cloud Security"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fcloud-security', this);"/><i></i><span>Cloud Security (<span class="count">504</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TOPIC_DFACET').show(); </script><li ><label data-value="RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fendpoint-security0" data-title="Security Operations"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fendpoint-security0', this);"/><i></i><span>Security Operations (<span class="count">236</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TOPIC_DFACET').show(); </script><li ><label data-value="RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fsase" data-title="Secure Access Service Edge (SASE)"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fsase', this);"/><i></i><span>Secure Access Service Edge (SASE) (<span class="count">211</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TOPIC_DFACET').show(); </script><li ><label data-value="RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fthreat-prevention" data-title="Threat Detection and Prevention"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fthreat-prevention', this);"/><i></i><span>Threat Detection and Prevention (<span class="count">193</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TOPIC_DFACET').show(); </script><li style='display: none;'><label data-value="RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fzero-trust" data-title="Zero Trust"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fzero-trust', this);"/><i></i><span>Zero Trust (<span class="count">149</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TOPIC_DFACET').show(); </script><li style='display: none;'><label data-value="RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fsecurity-operating-platform" data-title="Security Operating Platform"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fsecurity-operating-platform', this);"/><i></i><span>Security Operating Platform (<span class="count">137</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TOPIC_DFACET').show(); </script><li style='display: none;'><label data-value="RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fpublic-cloud-security" data-title="Public Cloud Security"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fpublic-cloud-security', this);"/><i></i><span>Public Cloud Security (<span class="count">133</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TOPIC_DFACET').show(); </script><li style='display: none;'><label data-value="RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fnetwork-security-management" data-title="Network Security Management"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fnetwork-security-management', this);"/><i></i><span>Network Security Management (<span class="count">110</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TOPIC_DFACET').show(); </script><li style='display: none;'><label data-value="RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fcyber-security" data-title="Cybersecurity"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fcyber-security', this);"/><i></i><span>Cybersecurity (<span class="count">86</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TOPIC_DFACET').show(); </script><li style='display: none;'><label data-value="RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fprivate-cloud-security" data-title="Private Cloud Security"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fprivate-cloud-security', this);"/><i></i><span>Private Cloud Security (<span class="count">75</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TOPIC_DFACET').show(); </script><li style='display: none;'><label data-value="RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fsecurity-ecosystem" data-title="Security Ecosystem"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fsecurity-ecosystem', this);"/><i></i><span>Security Ecosystem (<span class="count">65</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TOPIC_DFACET').show(); </script><li style='display: none;'><label data-value="RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fsaas-security" data-title="Saas Security"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fsaas-security', this);"/><i></i><span>Saas Security (<span class="count">62</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TOPIC_DFACET').show(); </script><li style='display: none;'><label data-value="RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fgoogle-cloud" data-title="Google Cloud"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fgoogle-cloud', this);"/><i></i><span>Google Cloud (<span class="count">50</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TOPIC_DFACET').show(); </script><li style='display: none;'><label data-value="RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fmicrosoft-azure" data-title="Microsoft Azure"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fmicrosoft-azure', this);"/><i></i><span>Microsoft Azure (<span class="count">49</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TOPIC_DFACET').show(); </script><li style='display: none;'><label data-value="RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Famazon-web-services" data-title="Amazon Web Services"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Famazon-web-services', this);"/><i></i><span>Amazon Web Services (<span class="count">45</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TOPIC_DFACET').show(); </script><li style='display: none;'><label data-value="RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fmobile-security" data-title="Mobile Security"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fmobile-security', this);"/><i></i><span>Mobile Security (<span class="count">40</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TOPIC_DFACET').show(); </script><li style='display: none;'><label data-value="RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fattack-surface-management" data-title="Attack Surface Management"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fattack-surface-management', this);"/><i></i><span>Attack Surface Management (<span class="count">39</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TOPIC_DFACET').show(); </script><li style='display: none;'><label data-value="RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fdatacenter-virtualization" data-title="Data Center"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fdatacenter-virtualization', this);"/><i></i><span>Data Center (<span class="count">34</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TOPIC_DFACET').show(); </script><li style='display: none;'><label data-value="RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fsecure-remote-workforce" data-title="Secure Remote Workforce"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fsecure-remote-workforce', this);"/><i></i><span>Secure Remote Workforce (<span class="count">31</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TOPIC_DFACET').show(); </script><li style='display: none;'><label data-value="RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fcompliance" data-title="Compliance"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fcompliance', this);"/><i></i><span>Compliance (<span class="count">22</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TOPIC_DFACET').show(); </script><li style='display: none;'><label data-value="RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fdata-security-posture-management" data-title="Data Security Posture Management"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fdata-security-posture-management', this);"/><i></i><span>Data Security Posture Management (<span class="count">18</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TOPIC_DFACET').show(); </script><li style='display: none;'><label data-value="RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fthreat-intel-and-incident-response" data-title="Threat Intel & Incident Response"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fthreat-intel-and-incident-response', this);"/><i></i><span>Threat Intel & Incident Response (<span class="count">17</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TOPIC_DFACET').show(); </script><li style='display: none;'><label data-value="RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fdata-security" data-title="Data Security"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fdata-security', this);"/><i></i><span>Data Security (<span class="count">15</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TOPIC_DFACET').show(); </script><li style='display: none;'><label data-value="RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fvmware-nsx" data-title="VMWare NSX"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fvmware-nsx', this);"/><i></i><span>VMWare NSX (<span class="count">12</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TOPIC_DFACET').show(); </script><li style='display: none;'><label data-value="RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fprofessional-services" data-title="Professional Services"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fprofessional-services', this);"/><i></i><span>Professional Services (<span class="count">11</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TOPIC_DFACET').show(); </script><li style='display: none;'><label data-value="RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fremote-workforce" data-title="Remote Workforce"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fremote-workforce', this);"/><i></i><span>Remote Workforce (<span class="count">10</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TOPIC_DFACET').show(); </script><li style='display: none;'><label data-value="RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fmicrosoft-hyperv" data-title="Microsoft Hyper-V"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fmicrosoft-hyperv', this);"/><i></i><span>Microsoft Hyper-V (<span class="count">6</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TOPIC_DFACET').show(); </script><li style='display: none;'><label data-value="RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fcybersecurity-fundamentals" data-title="Cybersecurity Fundamentals"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fcybersecurity-fundamentals', this);"/><i></i><span>Cybersecurity Fundamentals (<span class="count">4</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TOPIC_DFACET').show(); </script><li style='display: none;'><label data-value="RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fkvm" data-title="KVM"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TOPIC_DFACET:pan%3Aresource-center%2Frc-topic%2Fkvm', this);"/><i></i><span>KVM (<span class="count">1</span>)</span></label></li><li><button class="btn btn-link btn-toggle-facets more" onclick="cqsearch.showMoreFacets(this);"> + Show More</button></li></ul></div></div><div class="facet-section cat" id="facet-section-RC_INDUSTRY_DFACET"><div class="facet-header collapsed" id="RC_INDUSTRY_DFACET_header" data-toggle="collapse" data-target="#RC_INDUSTRY_DFACET_collapse" aria-controls="RC_INDUSTRY_DFACET_collapse"><h3 class="h4">Industry<span></span></h3><button class="btn collapse-icon" type="button" aria-label="toggle Industry section"><i></i></button></div><div id="RC_INDUSTRY_DFACET_collapse" class="collapse" aria-labelledby="RC_INDUSTRY_DFACET_header" data-parent="#resources_facets_accordion"><ul id="RC_INDUSTRY_DFACET" class="facet-list" data-more-text="+ Show More" data-less-text="- Show Less"><script type="text/javascript"> $('#facet-section-RC_INDUSTRY_DFACET').hide(); </script><script type="text/javascript"> $('#facet-section-RC_INDUSTRY_DFACET').show(); </script><li ><label data-value="RC_INDUSTRY_DFACET:pan%3Aresource-center%2Frc-industry%2Fgovernment-federal" data-title="Federal Government"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_INDUSTRY_DFACET:pan%3Aresource-center%2Frc-industry%2Fgovernment-federal', this);"/><i></i><span>Federal Government (<span class="count">86</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_INDUSTRY_DFACET').show(); </script><li ><label data-value="RC_INDUSTRY_DFACET:pan%3Aresource-center%2Frc-industry%2Fhealthcare" data-title="Healthcare"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_INDUSTRY_DFACET:pan%3Aresource-center%2Frc-industry%2Fhealthcare', this);"/><i></i><span>Healthcare (<span class="count">75</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_INDUSTRY_DFACET').show(); </script><li ><label data-value="RC_INDUSTRY_DFACET:pan%3Aresource-center%2Frc-industry%2Ffinancial-services" data-title="Financial Services"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_INDUSTRY_DFACET:pan%3Aresource-center%2Frc-industry%2Ffinancial-services', this);"/><i></i><span>Financial Services (<span class="count">64</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_INDUSTRY_DFACET').show(); </script><li ><label data-value="RC_INDUSTRY_DFACET:pan%3Aresource-center%2Frc-industry%2Fmanufacturing" data-title="Manufacturing"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_INDUSTRY_DFACET:pan%3Aresource-center%2Frc-industry%2Fmanufacturing', this);"/><i></i><span>Manufacturing (<span class="count">61</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_INDUSTRY_DFACET').show(); </script><li ><label data-value="RC_INDUSTRY_DFACET:pan%3Aresource-center%2Frc-industry%2Ftechnology" data-title="Technology"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_INDUSTRY_DFACET:pan%3Aresource-center%2Frc-industry%2Ftechnology', this);"/><i></i><span>Technology (<span class="count">40</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_INDUSTRY_DFACET').show(); </script><li style='display: none;'><label data-value="RC_INDUSTRY_DFACET:pan%3Aresource-center%2Frc-industry%2Fgovernment-state" data-title="State & Local Government"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_INDUSTRY_DFACET:pan%3Aresource-center%2Frc-industry%2Fgovernment-state', this);"/><i></i><span>State & Local Government (<span class="count">40</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_INDUSTRY_DFACET').show(); </script><li style='display: none;'><label data-value="RC_INDUSTRY_DFACET:pan%3Aresource-center%2Frc-industry%2Feducation" data-title="Education"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_INDUSTRY_DFACET:pan%3Aresource-center%2Frc-industry%2Feducation', this);"/><i></i><span>Education (<span class="count">38</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_INDUSTRY_DFACET').show(); </script><li style='display: none;'><label data-value="RC_INDUSTRY_DFACET:pan%3Aresource-center%2Frc-industry%2Fwholesale-retail" data-title="Retail"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_INDUSTRY_DFACET:pan%3Aresource-center%2Frc-industry%2Fwholesale-retail', this);"/><i></i><span>Retail (<span class="count">35</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_INDUSTRY_DFACET').show(); </script><li style='display: none;'><label data-value="RC_INDUSTRY_DFACET:pan%3Aresource-center%2Frc-industry%2Fiot" data-title="IoT"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_INDUSTRY_DFACET:pan%3Aresource-center%2Frc-industry%2Fiot', this);"/><i></i><span>IoT (<span class="count">32</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_INDUSTRY_DFACET').show(); </script><li style='display: none;'><label data-value="RC_INDUSTRY_DFACET:pan%3Aresource-center%2Frc-industry%2Futilities-energy" data-title="Utilities & Energy"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_INDUSTRY_DFACET:pan%3Aresource-center%2Frc-industry%2Futilities-energy', this);"/><i></i><span>Utilities & Energy (<span class="count">30</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_INDUSTRY_DFACET').show(); </script><li style='display: none;'><label data-value="RC_INDUSTRY_DFACET:pan%3Aresource-center%2Frc-industry%2Findustrial-control-systems" data-title="ICS SCADA"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_INDUSTRY_DFACET:pan%3Aresource-center%2Frc-industry%2Findustrial-control-systems', this);"/><i></i><span>ICS SCADA (<span class="count">23</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_INDUSTRY_DFACET').show(); </script><li style='display: none;'><label data-value="RC_INDUSTRY_DFACET:pan%3Aresource-center%2Frc-industry%2Fother-industry" data-title="Other Industries"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_INDUSTRY_DFACET:pan%3Aresource-center%2Frc-industry%2Fother-industry', this);"/><i></i><span>Other Industries (<span class="count">19</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_INDUSTRY_DFACET').show(); </script><li style='display: none;'><label data-value="RC_INDUSTRY_DFACET:pan%3Aresource-center%2Frc-industry%2Fservice-provider-telecommunications" data-title="Service Provider & Telecommunications"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_INDUSTRY_DFACET:pan%3Aresource-center%2Frc-industry%2Fservice-provider-telecommunications', this);"/><i></i><span>Service Provider & Telecommunications (<span class="count">13</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_INDUSTRY_DFACET').show(); </script><li style='display: none;'><label data-value="RC_INDUSTRY_DFACET:pan%3Aresource-center%2Frc-industry%2Finsurance" data-title="Insurance"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_INDUSTRY_DFACET:pan%3Aresource-center%2Frc-industry%2Finsurance', this);"/><i></i><span>Insurance (<span class="count">5</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_INDUSTRY_DFACET').show(); </script><li style='display: none;'><label data-value="RC_INDUSTRY_DFACET:pan%3Aresource-center%2Frc-industry%2Fprofessional-legal-services" data-title="Professional & Legal Services"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_INDUSTRY_DFACET:pan%3Aresource-center%2Frc-industry%2Fprofessional-legal-services', this);"/><i></i><span>Professional & Legal Services (<span class="count">5</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_INDUSTRY_DFACET').show(); </script><li style='display: none;'><label data-value="RC_INDUSTRY_DFACET:pan%3Aresource-center%2Frc-industry%2Fagriculture" data-title="Agriculture"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_INDUSTRY_DFACET:pan%3Aresource-center%2Frc-industry%2Fagriculture', this);"/><i></i><span>Agriculture (<span class="count">2</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_INDUSTRY_DFACET').show(); </script><li style='display: none;'><label data-value="RC_INDUSTRY_DFACET:pan%3Aresource-center%2Frc-industry%2Fnonclassifiable-establishments" data-title="Nonclassifiable Establishments"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_INDUSTRY_DFACET:pan%3Aresource-center%2Frc-industry%2Fnonclassifiable-establishments', this);"/><i></i><span>Nonclassifiable Establishments (<span class="count">2</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_INDUSTRY_DFACET').show(); </script><li style='display: none;'><label data-value="RC_INDUSTRY_DFACET:pan%3Aresource-center%2Frc-industry%2Fsoftware-geographic-information-systems" data-title="Software Geographic Information Systems"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_INDUSTRY_DFACET:pan%3Aresource-center%2Frc-industry%2Fsoftware-geographic-information-systems', this);"/><i></i><span>Software Geographic Information Systems (<span class="count">2</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_INDUSTRY_DFACET').show(); </script><li style='display: none;'><label data-value="RC_INDUSTRY_DFACET:pan%3Aresource-center%2Frc-industry%2Faerospace-defense" data-title="Aerospace & Defense"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_INDUSTRY_DFACET:pan%3Aresource-center%2Frc-industry%2Faerospace-defense', this);"/><i></i><span>Aerospace & Defense (<span class="count">2</span>)</span></label></li><li><button class="btn btn-link btn-toggle-facets more" onclick="cqsearch.showMoreFacets(this);"> + Show More</button></li></ul></div></div><div class="facet-section cat" id="facet-section-PRODUCTS0_DFACET"><div class="facet-header collapsed" id="PRODUCTS0_DFACET_header" data-toggle="collapse" data-target="#PRODUCTS0_DFACET_collapse" aria-controls="PRODUCTS0_DFACET_collapse"><h3 class="h4">Products<span></span></h3><button class="btn collapse-icon" type="button" aria-label="toggle Products section"><i></i></button></div><div id="PRODUCTS0_DFACET_collapse" class="collapse" aria-labelledby="PRODUCTS0_DFACET_header" data-parent="#resources_facets_accordion"><ul id="PRODUCTS0_DFACET" class="facet-list" data-more-text="+ Show More" data-less-text="- Show Less"><script type="text/javascript"> $('#facet-section-PRODUCTS0_DFACET').hide(); </script><script type="text/javascript"> $('#facet-section-PRODUCTS0_DFACET').show(); </script><li ><label data-value="PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fredlock" data-title="Prisma Cloud"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fredlock', this);"/><i></i><span>Prisma Cloud (<span class="count">447</span>)</span></label></li><script type="text/javascript"> $('#facet-section-PRODUCTS0_DFACET').show(); </script><li ><label data-value="PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fngfw" data-title="NGFW"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fngfw', this);"/><i></i><span>NGFW (<span class="count">430</span>)</span></label></li><script type="text/javascript"> $('#facet-section-PRODUCTS0_DFACET').show(); </script><li ><label data-value="PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fgpcs" data-title="Prisma Access"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fgpcs', this);"/><i></i><span>Prisma Access (<span class="count">261</span>)</span></label></li><script type="text/javascript"> $('#facet-section-PRODUCTS0_DFACET').show(); </script><li ><label data-value="PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fxdr" data-title="Cortex XDR"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fxdr', this);"/><i></i><span>Cortex XDR (<span class="count">255</span>)</span></label></li><script type="text/javascript"> $('#facet-section-PRODUCTS0_DFACET').show(); </script><li ><label data-value="PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fvm-series" data-title="VM-Series"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fvm-series', this);"/><i></i><span>VM-Series (<span class="count">195</span>)</span></label></li><script type="text/javascript"> $('#facet-section-PRODUCTS0_DFACET').show(); </script><li style='display: none;'><label data-value="PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fprisma-sase" data-title="Prisma SASE"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fprisma-sase', this);"/><i></i><span>Prisma SASE (<span class="count">176</span>)</span></label></li><script type="text/javascript"> $('#facet-section-PRODUCTS0_DFACET').show(); </script><li style='display: none;'><label data-value="PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fcrypsis" data-title="Unit 42"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fcrypsis', this);"/><i></i><span>Unit 42 (<span class="count">164</span>)</span></label></li><script type="text/javascript"> $('#facet-section-PRODUCTS0_DFACET').show(); </script><li style='display: none;'><label data-value="PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fsd-wan" data-title="Prisma SD-WAN"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fsd-wan', this);"/><i></i><span>Prisma SD-WAN (<span class="count">164</span>)</span></label></li><script type="text/javascript"> $('#facet-section-PRODUCTS0_DFACET').show(); </script><li style='display: none;'><label data-value="PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fdemisto" data-title="Cortex XSOAR"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fdemisto', this);"/><i></i><span>Cortex XSOAR (<span class="count">156</span>)</span></label></li><script type="text/javascript"> $('#facet-section-PRODUCTS0_DFACET').show(); </script><li style='display: none;'><label data-value="PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fapplication-framework" data-title="Cortex"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fapplication-framework', this);"/><i></i><span>Cortex (<span class="count">146</span>)</span></label></li><script type="text/javascript"> $('#facet-section-PRODUCTS0_DFACET').show(); </script><li style='display: none;'><label data-value="PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fpanorama" data-title="Panorama"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fpanorama', this);"/><i></i><span>Panorama (<span class="count">120</span>)</span></label></li><script type="text/javascript"> $('#facet-section-PRODUCTS0_DFACET').show(); </script><li style='display: none;'><label data-value="PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fwildfire" data-title="WildFire"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fwildfire', this);"/><i></i><span>WildFire (<span class="count">118</span>)</span></label></li><script type="text/javascript"> $('#facet-section-PRODUCTS0_DFACET').show(); </script><li style='display: none;'><label data-value="PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fcortex-xpanse" data-title="Cortex Xpanse"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fcortex-xpanse', this);"/><i></i><span>Cortex Xpanse (<span class="count">94</span>)</span></label></li><script type="text/javascript"> $('#facet-section-PRODUCTS0_DFACET').show(); </script><li style='display: none;'><label data-value="PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fiot-security" data-title="IoT Security"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fiot-security', this);"/><i></i><span>IoT Security (<span class="count">80</span>)</span></label></li><script type="text/javascript"> $('#facet-section-PRODUCTS0_DFACET').show(); </script><li style='display: none;'><label data-value="PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fpa-series" data-title="PA-Series"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fpa-series', this);"/><i></i><span>PA-Series (<span class="count">79</span>)</span></label></li><script type="text/javascript"> $('#facet-section-PRODUCTS0_DFACET').show(); </script><li style='display: none;'><label data-value="PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fglobalprotect" data-title="GlobalProtect"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fglobalprotect', this);"/><i></i><span>GlobalProtect (<span class="count">68</span>)</span></label></li><script type="text/javascript"> $('#facet-section-PRODUCTS0_DFACET').show(); </script><li style='display: none;'><label data-value="PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fadvanced-threat-prevention" data-title="Advanced Threat Prevention"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fadvanced-threat-prevention', this);"/><i></i><span>Advanced Threat Prevention (<span class="count">67</span>)</span></label></li><script type="text/javascript"> $('#facet-section-PRODUCTS0_DFACET').show(); </script><li style='display: none;'><label data-value="PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Faperture" data-title="SaaS Security"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Faperture', this);"/><i></i><span>SaaS Security (<span class="count">65</span>)</span></label></li><script type="text/javascript"> $('#facet-section-PRODUCTS0_DFACET').show(); </script><li style='display: none;'><label data-value="PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fcortex-xsiam" data-title="Cortex XSIAM"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fcortex-xsiam', this);"/><i></i><span>Cortex XSIAM (<span class="count">64</span>)</span></label></li><script type="text/javascript"> $('#facet-section-PRODUCTS0_DFACET').show(); </script><li style='display: none;'><label data-value="PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fdns-security-service" data-title="DNS Security service"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fdns-security-service', this);"/><i></i><span>DNS Security service (<span class="count">62</span>)</span></label></li><script type="text/javascript"> $('#facet-section-PRODUCTS0_DFACET').show(); </script><li style='display: none;'><label data-value="PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fthreat-prevention" data-title="Threat Prevention"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fthreat-prevention', this);"/><i></i><span>Threat Prevention (<span class="count">58</span>)</span></label></li><script type="text/javascript"> $('#facet-section-PRODUCTS0_DFACET').show(); </script><li style='display: none;'><label data-value="PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fadvanced-url-filtering" data-title="Advanced URL Filtering"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fadvanced-url-filtering', this);"/><i></i><span>Advanced URL Filtering (<span class="count">48</span>)</span></label></li><script type="text/javascript"> $('#facet-section-PRODUCTS0_DFACET').show(); </script><li style='display: none;'><label data-value="PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Furl-filtering-pan-db" data-title="URL Filtering"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Furl-filtering-pan-db', this);"/><i></i><span>URL Filtering (<span class="count">47</span>)</span></label></li><script type="text/javascript"> $('#facet-section-PRODUCTS0_DFACET').show(); </script><li style='display: none;'><label data-value="PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fzero-trust" data-title="Zero Trust"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fzero-trust', this);"/><i></i><span>Zero Trust (<span class="count">30</span>)</span></label></li><script type="text/javascript"> $('#facet-section-PRODUCTS0_DFACET').show(); </script><li style='display: none;'><label data-value="PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fcloud-ngfw" data-title="Cloud NGFW"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fcloud-ngfw', this);"/><i></i><span>Cloud NGFW (<span class="count">28</span>)</span></label></li><script type="text/javascript"> $('#facet-section-PRODUCTS0_DFACET').show(); </script><li style='display: none;'><label data-value="PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fpan-os-10-0" data-title="PAN-OS 10.0"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fpan-os-10-0', this);"/><i></i><span>PAN-OS 10.0 (<span class="count">28</span>)</span></label></li><script type="text/javascript"> $('#facet-section-PRODUCTS0_DFACET').show(); </script><li style='display: none;'><label data-value="PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fautofocus" data-title="Threat Intel Management"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fautofocus', this);"/><i></i><span>Threat Intel Management (<span class="count">28</span>)</span></label></li><script type="text/javascript"> $('#facet-section-PRODUCTS0_DFACET').show(); </script><li style='display: none;'><label data-value="PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fdata-security-posture-management" data-title="Data Security Posture Management"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fdata-security-posture-management', this);"/><i></i><span>Data Security Posture Management (<span class="count">18</span>)</span></label></li><script type="text/javascript"> $('#facet-section-PRODUCTS0_DFACET').show(); </script><li style='display: none;'><label data-value="PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fenterprise-dlp" data-title="Enterprise DLP"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fenterprise-dlp', this);"/><i></i><span>Enterprise DLP (<span class="count">18</span>)</span></label></li><script type="text/javascript"> $('#facet-section-PRODUCTS0_DFACET').show(); </script><li style='display: none;'><label data-value="PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fprisma-access-browser" data-title="Prisma Access Browser"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fprisma-access-browser', this);"/><i></i><span>Prisma Access Browser (<span class="count">15</span>)</span></label></li><script type="text/javascript"> $('#facet-section-PRODUCTS0_DFACET').show(); </script><li style='display: none;'><label data-value="PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fcn-series" data-title="CN Series"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fcn-series', this);"/><i></i><span>CN Series (<span class="count">13</span>)</span></label></li><script type="text/javascript"> $('#facet-section-PRODUCTS0_DFACET').show(); </script><li style='display: none;'><label data-value="PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fstrata-cloud-manager" data-title="Strata Cloud Manager"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fstrata-cloud-manager', this);"/><i></i><span>Strata Cloud Manager (<span class="count">10</span>)</span></label></li><script type="text/javascript"> $('#facet-section-PRODUCTS0_DFACET').show(); </script><li style='display: none;'><label data-value="PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Flogging-service" data-title="Strata Logging Service"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Flogging-service', this);"/><i></i><span>Strata Logging Service (<span class="count">10</span>)</span></label></li><script type="text/javascript"> $('#facet-section-PRODUCTS0_DFACET').show(); </script><li style='display: none;'><label data-value="PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fcortex-cloud" data-title="Cortex Cloud"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fcortex-cloud', this);"/><i></i><span>Cortex Cloud (<span class="count">9</span>)</span></label></li><script type="text/javascript"> $('#facet-section-PRODUCTS0_DFACET').show(); </script><li style='display: none;'><label data-value="PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fenterprise-iot-security" data-title="Enterprise IoT Security"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fenterprise-iot-security', this);"/><i></i><span>Enterprise IoT Security (<span class="count">4</span>)</span></label></li><script type="text/javascript"> $('#facet-section-PRODUCTS0_DFACET').show(); </script><li style='display: none;'><label data-value="PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fadvanced-dns-security" data-title="Advanced DNS Security"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fadvanced-dns-security', this);"/><i></i><span>Advanced DNS Security (<span class="count">4</span>)</span></label></li><script type="text/javascript"> $('#facet-section-PRODUCTS0_DFACET').show(); </script><li style='display: none;'><label data-value="PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fadvanced-wildfire" data-title="Advanced WildFire"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fadvanced-wildfire', this);"/><i></i><span>Advanced WildFire (<span class="count">4</span>)</span></label></li><script type="text/javascript"> $('#facet-section-PRODUCTS0_DFACET').show(); </script><li style='display: none;'><label data-value="PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fai-security-posture-management" data-title="AI Security Posture Management"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fai-security-posture-management', this);"/><i></i><span>AI Security Posture Management (<span class="count">2</span>)</span></label></li><script type="text/javascript"> $('#facet-section-PRODUCTS0_DFACET').show(); </script><li style='display: none;'><label data-value="PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fmedical-iot-security" data-title="Medical IoT Security"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fmedical-iot-security', this);"/><i></i><span>Medical IoT Security (<span class="count">2</span>)</span></label></li><script type="text/javascript"> $('#facet-section-PRODUCTS0_DFACET').show(); </script><li style='display: none;'><label data-value="PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fai-access-security" data-title="AI Access Security"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('PRODUCTS0_DFACET:pan%3Aresource-center%2Fproducts0%2Fai-access-security', this);"/><i></i><span>AI Access Security (<span class="count">2</span>)</span></label></li><li><button class="btn btn-link btn-toggle-facets more" onclick="cqsearch.showMoreFacets(this);"> + Show More</button></li></ul></div></div><div class="facet-section cat" id="facet-section-SERVICES_DFACET"><div class="facet-header collapsed" id="SERVICES_DFACET_header" data-toggle="collapse" data-target="#SERVICES_DFACET_collapse" aria-controls="SERVICES_DFACET_collapse"><h3 class="h4">Services<span></span></h3><button class="btn collapse-icon" type="button" aria-label="toggle Services section"><i></i></button></div><div id="SERVICES_DFACET_collapse" class="collapse" aria-labelledby="SERVICES_DFACET_header" data-parent="#resources_facets_accordion"><ul id="SERVICES_DFACET" class="facet-list" data-more-text="+ Show More" data-less-text="- Show Less"><script type="text/javascript"> $('#facet-section-SERVICES_DFACET').hide(); </script><script type="text/javascript"> $('#facet-section-SERVICES_DFACET').show(); </script><li ><label data-value="SERVICES_DFACET:pan%3Aresource-center%2Fservices%2Fincident-response" data-title="Incident Response"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('SERVICES_DFACET:pan%3Aresource-center%2Fservices%2Fincident-response', this);"/><i></i><span>Incident Response (<span class="count">54</span>)</span></label></li><script type="text/javascript"> $('#facet-section-SERVICES_DFACET').show(); </script><li ><label data-value="SERVICES_DFACET:pan%3Aresource-center%2Fservices%2Fcyber-risk-management" data-title="Cyber Risk Management"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('SERVICES_DFACET:pan%3Aresource-center%2Fservices%2Fcyber-risk-management', this);"/><i></i><span>Cyber Risk Management (<span class="count">45</span>)</span></label></li><script type="text/javascript"> $('#facet-section-SERVICES_DFACET').show(); </script><li ><label data-value="SERVICES_DFACET:pan%3Aresource-center%2Fservices%2Fproactive-assessments" data-title="Proactive Assessments"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('SERVICES_DFACET:pan%3Aresource-center%2Fservices%2Fproactive-assessments', this);"/><i></i><span>Proactive Assessments (<span class="count">25</span>)</span></label></li><script type="text/javascript"> $('#facet-section-SERVICES_DFACET').show(); </script><li ><label data-value="SERVICES_DFACET:pan%3Aresource-center%2Fservices%2Funit42-incident-response" data-title="Unit 42 Incident Response"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('SERVICES_DFACET:pan%3Aresource-center%2Fservices%2Funit42-incident-response', this);"/><i></i><span>Unit 42 Incident Response (<span class="count">24</span>)</span></label></li><script type="text/javascript"> $('#facet-section-SERVICES_DFACET').show(); </script><li ><label data-value="SERVICES_DFACET:pan%3Aresource-center%2Fservices%2Fmanaged-detection-and-response" data-title="Managed Detection & Response"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('SERVICES_DFACET:pan%3Aresource-center%2Fservices%2Fmanaged-detection-and-response', this);"/><i></i><span>Managed Detection & Response (<span class="count">19</span>)</span></label></li><script type="text/javascript"> $('#facet-section-SERVICES_DFACET').show(); </script><li style='display: none;'><label data-value="SERVICES_DFACET:pan%3Aresource-center%2Fservices%2Funit42-retainer" data-title="Unit 42 Retainer"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('SERVICES_DFACET:pan%3Aresource-center%2Fservices%2Funit42-retainer', this);"/><i></i><span>Unit 42 Retainer (<span class="count">16</span>)</span></label></li><script type="text/javascript"> $('#facet-section-SERVICES_DFACET').show(); </script><li style='display: none;'><label data-value="SERVICES_DFACET:pan%3Aresource-center%2Fservices%2Funit42-proactive-services" data-title="Unit 42 Proactive Services"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('SERVICES_DFACET:pan%3Aresource-center%2Fservices%2Funit42-proactive-services', this);"/><i></i><span>Unit 42 Proactive Services (<span class="count">15</span>)</span></label></li><script type="text/javascript"> $('#facet-section-SERVICES_DFACET').show(); </script><li style='display: none;'><label data-value="SERVICES_DFACET:pan%3Aresource-center%2Fservices%2Funit42-managed-services" data-title="Unit 42 Managed Services"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('SERVICES_DFACET:pan%3Aresource-center%2Fservices%2Funit42-managed-services', this);"/><i></i><span>Unit 42 Managed Services (<span class="count">14</span>)</span></label></li><script type="text/javascript"> $('#facet-section-SERVICES_DFACET').show(); </script><li style='display: none;'><label data-value="SERVICES_DFACET:pan%3Aresource-center%2Fservices%2Fprofessional-services" data-title="Professional Services"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('SERVICES_DFACET:pan%3Aresource-center%2Fservices%2Fprofessional-services', this);"/><i></i><span>Professional Services (<span class="count">7</span>)</span></label></li><script type="text/javascript"> $('#facet-section-SERVICES_DFACET').show(); </script><li style='display: none;'><label data-value="SERVICES_DFACET:pan%3Aresource-center%2Fservices%2Fsupport-services" data-title="Support Services"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('SERVICES_DFACET:pan%3Aresource-center%2Fservices%2Fsupport-services', this);"/><i></i><span>Support Services (<span class="count">5</span>)</span></label></li><script type="text/javascript"> $('#facet-section-SERVICES_DFACET').show(); </script><li style='display: none;'><label data-value="SERVICES_DFACET:pan%3Aresource-center%2Fservices%2Fdigital-forensics" data-title="Digital Forensics"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('SERVICES_DFACET:pan%3Aresource-center%2Fservices%2Fdigital-forensics', this);"/><i></i><span>Digital Forensics (<span class="count">4</span>)</span></label></li><script type="text/javascript"> $('#facet-section-SERVICES_DFACET').show(); </script><li style='display: none;'><label data-value="SERVICES_DFACET:pan%3Aresource-center%2Fservices%2Fcompromise-assessment" data-title="Compromise Assessment"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('SERVICES_DFACET:pan%3Aresource-center%2Fservices%2Fcompromise-assessment', this);"/><i></i><span>Compromise Assessment (<span class="count">2</span>)</span></label></li><script type="text/javascript"> $('#facet-section-SERVICES_DFACET').show(); </script><li style='display: none;'><label data-value="SERVICES_DFACET:pan%3Aresource-center%2Fservices%2Fboard-of-directors-and-ciso-advisory" data-title="Board of Directors & CISO Advisory"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('SERVICES_DFACET:pan%3Aresource-center%2Fservices%2Fboard-of-directors-and-ciso-advisory', this);"/><i></i><span>Board of Directors & CISO Advisory (<span class="count">2</span>)</span></label></li><script type="text/javascript"> $('#facet-section-SERVICES_DFACET').show(); </script><li style='display: none;'><label data-value="SERVICES_DFACET:pan%3Aresource-center%2Fservices%2Feducation-and-training" data-title="Education & Training"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('SERVICES_DFACET:pan%3Aresource-center%2Fservices%2Feducation-and-training', this);"/><i></i><span>Education & Training (<span class="count">1</span>)</span></label></li><script type="text/javascript"> $('#facet-section-SERVICES_DFACET').show(); </script><li style='display: none;'><label data-value="SERVICES_DFACET:pan%3Aresource-center%2Fservices%2Fai-security-assessment" data-title="AI Security Assessment"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('SERVICES_DFACET:pan%3Aresource-center%2Fservices%2Fai-security-assessment', this);"/><i></i><span>AI Security Assessment (<span class="count">1</span>)</span></label></li><script type="text/javascript"> $('#facet-section-SERVICES_DFACET').show(); </script><li style='display: none;'><label data-value="SERVICES_DFACET:pan%3Aresource-center%2Fservices%2Ffocussed-services" data-title="Focussed Services"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('SERVICES_DFACET:pan%3Aresource-center%2Fservices%2Ffocussed-services', this);"/><i></i><span>Focussed Services (<span class="count">1</span>)</span></label></li><li><button class="btn btn-link btn-toggle-facets more" onclick="cqsearch.showMoreFacets(this);"> + Show More</button></li></ul></div></div><div class="facet-section cat" id="facet-section-RC_TYPE_DFACET"><div class="facet-header collapsed" id="RC_TYPE_DFACET_header" data-toggle="collapse" data-target="#RC_TYPE_DFACET_collapse" aria-controls="RC_TYPE_DFACET_collapse"><h3 class="h4">Type<span></span></h3><button class="btn collapse-icon" type="button" aria-label="toggle Type section"><i></i></button></div><div id="RC_TYPE_DFACET_collapse" class="collapse" aria-labelledby="RC_TYPE_DFACET_header" data-parent="#resources_facets_accordion"><ul id="RC_TYPE_DFACET" class="facet-list" data-more-text="+ Show More" data-less-text="- Show Less"><script type="text/javascript"> $('#facet-section-RC_TYPE_DFACET').hide(); </script><script type="text/javascript"> $('#facet-section-RC_TYPE_DFACET').show(); </script><li ><label data-value="RC_TYPE_DFACET:pan%3Aresource-center%2Frc-type%2Fpress-release" data-title="Press Release"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TYPE_DFACET:pan%3Aresource-center%2Frc-type%2Fpress-release', this);"/><i></i><span>Press Release (<span class="count">732</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TYPE_DFACET').show(); </script><li ><label data-value="RC_TYPE_DFACET:pan%3Aresource-center%2Frc-type%2Farticle" data-title="Article"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TYPE_DFACET:pan%3Aresource-center%2Frc-type%2Farticle', this);"/><i></i><span>Article (<span class="count">419</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TYPE_DFACET').show(); </script><li ><label data-value="RC_TYPE_DFACET:pan%3Aresource-center%2Frc-type%2Fdatasheet" data-title="Datasheet"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TYPE_DFACET:pan%3Aresource-center%2Frc-type%2Fdatasheet', this);"/><i></i><span>Datasheet (<span class="count">411</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TYPE_DFACET').show(); </script><li ><label data-value="RC_TYPE_DFACET:pan%3Aresource-center%2Frc-type%2Fvideo" data-title="Video"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TYPE_DFACET:pan%3Aresource-center%2Frc-type%2Fvideo', this);"/><i></i><span>Video (<span class="count">324</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TYPE_DFACET').show(); </script><li ><label data-value="RC_TYPE_DFACET:pan%3Aresource-center%2Frc-type%2Fwhitepaper" data-title="White Paper"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TYPE_DFACET:pan%3Aresource-center%2Frc-type%2Fwhitepaper', this);"/><i></i><span>White Paper (<span class="count">274</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TYPE_DFACET').show(); </script><li style='display: none;'><label data-value="RC_TYPE_DFACET:pan%3Aresource-center%2Frc-type%2Fcustomer-story" data-title="Customer Story"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TYPE_DFACET:pan%3Aresource-center%2Frc-type%2Fcustomer-story', this);"/><i></i><span>Customer Story (<span class="count">243</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TYPE_DFACET').show(); </script><li style='display: none;'><label data-value="RC_TYPE_DFACET:pan%3Aresource-center%2Frc-type%2Fwebinar" data-title="Webinar"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TYPE_DFACET:pan%3Aresource-center%2Frc-type%2Fwebinar', this);"/><i></i><span>Webinar (<span class="count">234</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TYPE_DFACET').show(); </script><li style='display: none;'><label data-value="RC_TYPE_DFACET:pan%3Aresource-center%2Frc-type%2Fresearch" data-title="Research Reports"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TYPE_DFACET:pan%3Aresource-center%2Frc-type%2Fresearch', this);"/><i></i><span>Research Reports (<span class="count">147</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TYPE_DFACET').show(); </script><li style='display: none;'><label data-value="RC_TYPE_DFACET:pan%3Aresource-center%2Frc-type%2Fguides" data-title="Guide"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TYPE_DFACET:pan%3Aresource-center%2Frc-type%2Fguides', this);"/><i></i><span>Guide (<span class="count">138</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TYPE_DFACET').show(); </script><li style='display: none;'><label data-value="RC_TYPE_DFACET:pan%3Aresource-center%2Frc-type%2Fbook" data-title="Book"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TYPE_DFACET:pan%3Aresource-center%2Frc-type%2Fbook', this);"/><i></i><span>Book (<span class="count">108</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TYPE_DFACET').show(); </script><li style='display: none;'><label data-value="RC_TYPE_DFACET:pan%3Aresource-center%2Frc-type%2Finfographic" data-title="Infographic"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TYPE_DFACET:pan%3Aresource-center%2Frc-type%2Finfographic', this);"/><i></i><span>Infographic (<span class="count">94</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TYPE_DFACET').show(); </script><li style='display: none;'><label data-value="RC_TYPE_DFACET:pan%3Aresource-center%2Frc-type%2Fusecases" data-title="Use Case"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TYPE_DFACET:pan%3Aresource-center%2Frc-type%2Fusecases', this);"/><i></i><span>Use Case (<span class="count">63</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TYPE_DFACET').show(); </script><li style='display: none;'><label data-value="RC_TYPE_DFACET:pan%3Aresource-center%2Frc-type%2Fother" data-title="Other"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TYPE_DFACET:pan%3Aresource-center%2Frc-type%2Fother', this);"/><i></i><span>Other (<span class="count">58</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TYPE_DFACET').show(); </script><li style='display: none;'><label data-value="RC_TYPE_DFACET:pan%3Aresource-center%2Frc-type%2Fpodcast" data-title="Podcast"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TYPE_DFACET:pan%3Aresource-center%2Frc-type%2Fpodcast', this);"/><i></i><span>Podcast (<span class="count">51</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TYPE_DFACET').show(); </script><li style='display: none;'><label data-value="RC_TYPE_DFACET:pan%3Aresource-center%2Frc-type%2Fsolution-brief" data-title="Solution Brief"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TYPE_DFACET:pan%3Aresource-center%2Frc-type%2Fsolution-brief', this);"/><i></i><span>Solution Brief (<span class="count">29</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TYPE_DFACET').show(); </script><li style='display: none;'><label data-value="RC_TYPE_DFACET:pan%3Aresource-center%2Frc-type%2Fpresentations" data-title="Presentations"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TYPE_DFACET:pan%3Aresource-center%2Frc-type%2Fpresentations', this);"/><i></i><span>Presentations (<span class="count">16</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TYPE_DFACET').show(); </script><li style='display: none;'><label data-value="RC_TYPE_DFACET:pan%3Aresource-center%2Frc-type%2Fcyberforce-partner-assets" data-title="Cyberforce partner assets"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TYPE_DFACET:pan%3Aresource-center%2Frc-type%2Fcyberforce-partner-assets', this);"/><i></i><span>Cyberforce partner assets (<span class="count">14</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TYPE_DFACET').show(); </script><li style='display: none;'><label data-value="RC_TYPE_DFACET:pan%3Aresource-center%2Frc-type%2Ftool" data-title="Tool"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TYPE_DFACET:pan%3Aresource-center%2Frc-type%2Ftool', this);"/><i></i><span>Tool (<span class="count">8</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TYPE_DFACET').show(); </script><li style='display: none;'><label data-value="RC_TYPE_DFACET:pan%3Aresource-center%2Frc-type%2Finteractive-content" data-title="Interactive Content"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TYPE_DFACET:pan%3Aresource-center%2Frc-type%2Finteractive-content', this);"/><i></i><span>Interactive Content (<span class="count">7</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TYPE_DFACET').show(); </script><li style='display: none;'><label data-value="RC_TYPE_DFACET:pan%3Aresource-center%2Frc-type%2Fplaybook" data-title="Playbook"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TYPE_DFACET:pan%3Aresource-center%2Frc-type%2Fplaybook', this);"/><i></i><span>Playbook (<span class="count">2</span>)</span></label></li><script type="text/javascript"> $('#facet-section-RC_TYPE_DFACET').show(); </script><li style='display: none;'><label data-value="RC_TYPE_DFACET:pan%3Aresource-center%2Frc-type%2Fat-a-glance" data-title="At a Glance"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('RC_TYPE_DFACET:pan%3Aresource-center%2Frc-type%2Fat-a-glance', this);"/><i></i><span>At a Glance (<span class="count">1</span>)</span></label></li><li><button class="btn btn-link btn-toggle-facets more" onclick="cqsearch.showMoreFacets(this);"> + Show More</button></li></ul></div></div><div class="facet-section cat" id="facet-section-EDUCATION_PROFESSIONAL_SERVICES_DFACET"><div class="facet-header collapsed" id="EDUCATION_PROFESSIONAL_SERVICES_DFACET_header" data-toggle="collapse" data-target="#EDUCATION_PROFESSIONAL_SERVICES_DFACET_collapse" aria-controls="EDUCATION_PROFESSIONAL_SERVICES_DFACET_collapse"><h3 class="h4">Educational and Professional Services<span></span></h3><button class="btn collapse-icon" type="button" aria-label="toggle Educational and Professional Services section"><i></i></button></div><div id="EDUCATION_PROFESSIONAL_SERVICES_DFACET_collapse" class="collapse" aria-labelledby="EDUCATION_PROFESSIONAL_SERVICES_DFACET_header" data-parent="#resources_facets_accordion"><ul id="EDUCATION_PROFESSIONAL_SERVICES_DFACET" class="facet-list" data-more-text="+ Show More" data-less-text="- Show Less"><script type="text/javascript"> $('#facet-section-EDUCATION_PROFESSIONAL_SERVICES_DFACET').hide(); </script><script type="text/javascript"> $('#facet-section-EDUCATION_PROFESSIONAL_SERVICES_DFACET').show(); </script><li ><label data-value="EDUCATION_PROFESSIONAL_SERVICES_DFACET:pan%3Aresource-center%2Feducation-professional-services%2Fprofessional-services" data-title="Professional Services"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('EDUCATION_PROFESSIONAL_SERVICES_DFACET:pan%3Aresource-center%2Feducation-professional-services%2Fprofessional-services', this);"/><i></i><span>Professional Services (<span class="count">49</span>)</span></label></li><script type="text/javascript"> $('#facet-section-EDUCATION_PROFESSIONAL_SERVICES_DFACET').show(); </script><li ><label data-value="EDUCATION_PROFESSIONAL_SERVICES_DFACET:pan%3Aresource-center%2Feducation-professional-services%2Ftransformation-services" data-title="Transformation Services"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('EDUCATION_PROFESSIONAL_SERVICES_DFACET:pan%3Aresource-center%2Feducation-professional-services%2Ftransformation-services', this);"/><i></i><span>Transformation Services (<span class="count">11</span>)</span></label></li><script type="text/javascript"> $('#facet-section-EDUCATION_PROFESSIONAL_SERVICES_DFACET').show(); </script><li ><label data-value="EDUCATION_PROFESSIONAL_SERVICES_DFACET:pan%3Aresource-center%2Feducation-professional-services%2Fsupport" data-title="Support"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('EDUCATION_PROFESSIONAL_SERVICES_DFACET:pan%3Aresource-center%2Feducation-professional-services%2Fsupport', this);"/><i></i><span>Support (<span class="count">9</span>)</span></label></li><script type="text/javascript"> $('#facet-section-EDUCATION_PROFESSIONAL_SERVICES_DFACET').show(); </script><li ><label data-value="EDUCATION_PROFESSIONAL_SERVICES_DFACET:pan%3Aresource-center%2Feducation-professional-services%2Ftraining" data-title="Training"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('EDUCATION_PROFESSIONAL_SERVICES_DFACET:pan%3Aresource-center%2Feducation-professional-services%2Ftraining', this);"/><i></i><span>Training (<span class="count">7</span>)</span></label></li><script type="text/javascript"> $('#facet-section-EDUCATION_PROFESSIONAL_SERVICES_DFACET').show(); </script><li ><label data-value="EDUCATION_PROFESSIONAL_SERVICES_DFACET:pan%3Aresource-center%2Feducation-professional-services%2Fcustomer-success" data-title="Customer Success"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('EDUCATION_PROFESSIONAL_SERVICES_DFACET:pan%3Aresource-center%2Feducation-professional-services%2Fcustomer-success', this);"/><i></i><span>Customer Success (<span class="count">7</span>)</span></label></li><script type="text/javascript"> $('#facet-section-EDUCATION_PROFESSIONAL_SERVICES_DFACET').show(); </script><li style='display: none;'><label data-value="EDUCATION_PROFESSIONAL_SERVICES_DFACET:pan%3Aresource-center%2Feducation-professional-services%2Fcybersecurity-academy" data-title="Cybersecurity Academy"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('EDUCATION_PROFESSIONAL_SERVICES_DFACET:pan%3Aresource-center%2Feducation-professional-services%2Fcybersecurity-academy', this);"/><i></i><span>Cybersecurity Academy (<span class="count">5</span>)</span></label></li><script type="text/javascript"> $('#facet-section-EDUCATION_PROFESSIONAL_SERVICES_DFACET').show(); </script><li style='display: none;'><label data-value="EDUCATION_PROFESSIONAL_SERVICES_DFACET:pan%3Aresource-center%2Feducation-professional-services%2Fcertified-partners" data-title="Certified Partners"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('EDUCATION_PROFESSIONAL_SERVICES_DFACET:pan%3Aresource-center%2Feducation-professional-services%2Fcertified-partners', this);"/><i></i><span>Certified Partners (<span class="count">4</span>)</span></label></li><script type="text/javascript"> $('#facet-section-EDUCATION_PROFESSIONAL_SERVICES_DFACET').show(); </script><li style='display: none;'><label data-value="EDUCATION_PROFESSIONAL_SERVICES_DFACET:pan%3Aresource-center%2Feducation-professional-services%2Ffirewall-migration" data-title="Firewall Migration"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('EDUCATION_PROFESSIONAL_SERVICES_DFACET:pan%3Aresource-center%2Feducation-professional-services%2Ffirewall-migration', this);"/><i></i><span>Firewall Migration (<span class="count">2</span>)</span></label></li><script type="text/javascript"> $('#facet-section-EDUCATION_PROFESSIONAL_SERVICES_DFACET').show(); </script><li style='display: none;'><label data-value="EDUCATION_PROFESSIONAL_SERVICES_DFACET:pan%3Aresource-center%2Feducation-professional-services%2Fproactive-services" data-title="Focused Services"><input type="checkbox" class="checkbox" onclick="cqsearch.addSolrFq('EDUCATION_PROFESSIONAL_SERVICES_DFACET:pan%3Aresource-center%2Feducation-professional-services%2Fproactive-services', this);"/><i></i><span>Focused Services (<span class="count">1</span>)</span></label></li><li><button class="btn btn-link btn-toggle-facets more" onclick="cqsearch.showMoreFacets(this);"> + Show More</button></li></ul></div></div></div><div class="actions"><span class="h3"><em id="rsc_mobile_result_count"></em> Results</span><!-- <button class="btn btn-primary btn-sm" onclick="cqsearch.addSolrFq(this);">Show results<i></i></button> --></div></div></div><div class="col-md-12 col-12 col-xl-8 col-xxxl-9 col-search-results"><div class="searchpagination parbase section"><!--googleoff: index--><span class="h6 result-count-label" data-count="4595" data-curated-count="3"><span class="d-none d-md-inline">Displaying <strong class='pages'>1 to 18</strong> of <strong class='total'>4595</strong></span><strong class="d-md-none" id="top_mobile_result_count">4595</strong><span class="d-md-none"> Results</span></span><div class="sort-dropdown dropdown" id="solr-sort"><button class="btn btn-sort dropdown-toggle" data-display="static" type="button" id="rsc_sort_button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span>Sort By<em> newest</em></span></button><ul id="rsc_sort_dropdown" class="dropdown-menu dropdown-menu-right" aria-labelledby="rsc_sort_button"><li class=""><button data-value="relevance" data-page-track="true" data-page-track-value="resources:search:sort:relevance"> Relevance</button></li><li class="active"><button data-url="/content/pan/en_US/resources.html?sortDir=desc" data-value="newest" data-page-track="true" data-page-track-value="resources:search:sort:newest"> Newest</button></li><li class=""><button data-url="/content/pan/en_US/resources.html?sortDir=asc" data-value="oldest" data-page-track="true" data-page-track-value="resources:search:sort:oldest"> Oldest</button></li><li class=""><button data-url="/content/pan/en_US/resources.html?sort=recentViews&sortDir=desc" data-value="trending" data-page-track="true" data-page-track-value="resources:search:sort:trending"> Trending</button></li></ul></div></div><div class="searchresults parbase section"><script type="text/javascript"> if (cqsearch === undefined) { var cqsearch = {}; } cqsearch.showTeaser = function (target) { if ($(target).text().trim() == 'more') { $(target).siblings('.showme').show(); $(target).text('less'); } else { $(target).siblings('.showme').hide(); $(target).text('more'); } }; </script><div id="searchresults" class="row" data-desktop-card-limit="18" data-device-card-limit="8" data-resource-path="/content/pan/en_US/resources/jcr:content/cleanParsys/searchresults" data-place-holder-image="" data-show-curated="true" data-curated-count="3"><div class="col-12 col-md-6 col-xxxl-4" data-row="1" data-column="1" data-span="1"><a href="/cortex/cortex-xdr/mitre" class="curated-result theme-dark layout-backgroundImage span-one" data-type="cortex" data-page-track="true" data-page-track-value="resources:: section:educational and professional services"><div class="lozad-background bg-image" style="" data-background-image=" url('/content/dam/pan/en_US/images/cortex/mitre/cortex-xdr_mitre-round-6-detection_homepage-takeover_1920x1080.jpg')"></div><div class="content"><span class="h6 result-type"></span><h3 class="h3 result-title"><span style="color: #0c6;">19 Tested.<br> One clear<br> choice</span></h3><p class="h6 result-description">Cortex XDR delivers <b>100%</b> detection<br> in MITRE ATT&CK<sup>®</sup> Enterprise Evaluations. </p><time datetime=""></time></div><div class="actions"><span class="btn btn-outline-dark btn-sm" data-page-track="true" data-page-track-value="resource-results:promo-card:The new way to XDR-1-1">The new way to XDR</span></div></a></div><div class="col-12 col-md-6 col-xxxl-4"><script type="text/javascript"> PAN.tracking.addId('3138332'); </script><a href="https://unit42.paloaltonetworks.com/jailbreaking-generative-ai-web-products/" target="_blank" id="3138332" class="result" data-result="Unit 42" data-trending="false" data-doctype="external" data-resourcetype="unit42" data-rctype="rc.type.unit42" data-articletype="Unit42 Article" onclick="PAN.tracking.recordView('https://unit42.paloaltonetworks.com/jailbreaking-generative-ai-web-products/')" data-page-track="true" data-track-value="en_us:resources:search-results:Unit 42:Investigating LLM Jailbreaking of Popular Generative AI Web Products" rel="noopener"><figure class="ar-16-9 default-image" aria-label="Recommended Material 0"></figure><div class="content"><span class="h6 result-type">Unit 42</span><h3 data-truncate-lines="2" class="result-title">Investigating LLM Jailbreaking of Popular Generative AI Web Products</h3></div><div class="actions"><span class="btn btn-link light"> Read the story</span></div></a></div><div class="col-12 col-md-6 col-xxxl-4"><script type="text/javascript"> PAN.tracking.addId('/content/pan/en_US/resources/infographics/the-state-of-security-in-the-modern-organization'); </script><a href="/resources/infographics/the-state-of-security-in-the-modern-organization" id="/content/pan/en_US/resources/infographics/the-state-of-security-in-the-modern-organization" class="result" data-result="Infographic" data-trending="false" data-doctype="resource" data-resourcetype="infographic" data-rctype="rc.type.infographic" data-articletype="" onclick="PAN.tracking.recordView('/content/pan/en_US/resources/infographics/the-state-of-security-in-the-modern-organization.html')" data-page-track="true" data-track-value="en_us:resources:search-results:Infographic:Embrace the Browser-Driven Workspace"><figure class="ar-16-9 asset-brand-logo" aria-label="Recommended Material 1"><img data-src="/content/dam/pan/en_US/images/thumbnails/the-state-of-security-in-the-modern-organization.png" alt="asset brand logo" class="lozad "/></figure><div class="content"><span class="h6 result-type">Infographic</span><h3 data-truncate-lines="2" class="result-title">Embrace the Browser-Driven Workspace</h3></div><div class="actions"><span class="btn btn-link light"> Download the infographic</span></div></a></div><div class="col-12 col-md-6 col-xxxl-4"><script type="text/javascript"> PAN.tracking.addId('3138311'); </script><a href="https://unit42.paloaltonetworks.com/stately-taurus-uses-bookworm-malware/" target="_blank" id="3138311" class="result" data-result="Unit 42" data-trending="false" data-doctype="external" data-resourcetype="unit42" data-rctype="rc.type.unit42" data-articletype="Unit42 Article" onclick="PAN.tracking.recordView('https://unit42.paloaltonetworks.com/stately-taurus-uses-bookworm-malware/')" data-page-track="true" data-track-value="en_us:resources:search-results:Unit 42:Stately Taurus Activity in Southeast Asia Links to Bookworm Malware" rel="noopener"><figure class="ar-16-9 default-image" aria-label="Recommended Material 2"></figure><div class="content"><span class="h6 result-type">Unit 42</span><h3 data-truncate-lines="2" class="result-title">Stately Taurus Activity in Southeast Asia Links to Bookworm Malware</h3></div><div class="actions"><span class="btn btn-link light"> Read the story</span></div></a></div><div class="col-12 col-md-6 col-xxxl-4"><script type="text/javascript"> PAN.tracking.addId('/content/pan/en_US/resources/podcasts/threat-vector-transform-your-soc-and-get-ahead-of-the-threats'); </script><a href="/resources/podcasts/threat-vector-transform-your-soc-and-get-ahead-of-the-threats" id="/content/pan/en_US/resources/podcasts/threat-vector-transform-your-soc-and-get-ahead-of-the-threats" class="result" data-result="Podcast" data-trending="false" data-doctype="resource" data-resourcetype="podcast" data-rctype="rc.type.podcast" data-articletype="" onclick="PAN.tracking.recordView('/content/pan/en_US/resources/podcasts/threat-vector-transform-your-soc-and-get-ahead-of-the-threats.html')" data-page-track="true" data-track-value="en_us:resources:search-results:Podcast:Threat Vector | Transform Your SOC And Get Ahead Of The Threats"><figure class="ar-16-9 default-image" aria-label="Recommended Material 3"></figure><div class="content"><span class="h6 result-type">Podcast</span><h3 data-truncate-lines="2" class="result-title">Threat Vector | Transform Your SOC And Get Ahead Of The Threats</h3></div><div class="actions"><span class="btn btn-link light"> Listen to the podcast</span></div></a></div><div class="col-12 col-md-6 col-xxxl-4"><script type="text/javascript"> PAN.tracking.addId('3138108'); </script><a href="https://unit42.paloaltonetworks.com/nvidia-cuda-toolkit-vulnerabilities/" target="_blank" id="3138108" class="result" data-result="Unit 42" data-trending="false" data-doctype="external" data-resourcetype="unit42" data-rctype="rc.type.unit42" data-articletype="Unit42 Article" onclick="PAN.tracking.recordView('https://unit42.paloaltonetworks.com/nvidia-cuda-toolkit-vulnerabilities/')" data-page-track="true" data-track-value="en_us:resources:search-results:Unit 42:Multiple Vulnerabilities Discovered in NVIDIA CUDA Toolkit" rel="noopener"><figure class="ar-16-9 default-image" aria-label="Recommended Material 4"></figure><div class="content"><span class="h6 result-type">Unit 42</span><h3 data-truncate-lines="2" class="result-title">Multiple Vulnerabilities Discovered in NVIDIA CUDA Toolkit</h3></div><div class="actions"><span class="btn btn-link light"> Read the story</span></div></a></div><div class="col-12 col-md-6 col-xxxl-4"><script type="text/javascript"> PAN.tracking.addId('/content/pan/en_US/customers/vermont-judiciary-goes-all-in-on-platformization'); </script><a href="/customers/vermont-judiciary-goes-all-in-on-platformization" id="/content/pan/en_US/customers/vermont-judiciary-goes-all-in-on-platformization" class="result" data-result="References and Case Studies" data-trending="false" data-doctype="resource" data-resourcetype="customerStudy" data-rctype="rc.type.customerStudy" data-articletype="" onclick="PAN.tracking.recordView('/content/pan/en_US/customers/vermont-judiciary-goes-all-in-on-platformization.html')" data-page-track="true" data-track-value="en_us:resources:search-results:References and Case Studies:Vermont Judiciary platformizes with Palo Alto Networks to further Zero Trust"><figure class="ar-16-9 asset-pdf" aria-label="Recommended Material 5"><img data-src="/content/dam/pan/en_US/assets/pdf/customers/vermont-judiciary-x-gtm-case-study.pdf.transform/featureThumb/image.png" alt="asset pdf thumbnail" class="lozad "/></figure><div class="content"><span class="h6 result-type">References and Case Studies</span><h3 data-truncate-lines="2" class="result-title">Vermont Judiciary platformizes with Palo Alto Networks to further Zero Trust</h3></div><div class="actions"><span class="btn btn-link light"> Read the customer story</span></div></a></div><div class="col-12 col-md-6 col-xxxl-4" data-row="3" data-column="2" data-span="1"><a href="https://tv.paloaltonetworks.com/" target="_blank" class="curated-result theme-dark layout-backgroundImage span-one" data-type="default" rel="noopener" data-page-track="true" data-page-track-value="resources:: section:vermont judiciary platformizes with palo alto networks to further zero trust"><div class="lozad-background bg-image" style="" data-background-image=" url('/content/dam/pan/en_US/images/banners/panw-pan-tv-web-banner-650x970-bottom.jpg')"></div><div class="content"><span class="h6 result-type"></span><h3 class="h3 result-title">Binge-watch cybersecurity content all in one place.</h3><p class="h6 result-description">Introducing Palo Alto Networks TV.</p><time datetime=""></time></div><div class="actions"><span class="btn btn-outline-dark btn-sm" data-page-track="true" data-page-track-value="resource-results:promo-card:Start streaming-3-2">Start streaming</span></div></a></div><div class="col-12 col-md-6 col-xxxl-4"><script type="text/javascript"> PAN.tracking.addId('/content/pan/en_US/company/press/2025/palo-alto-networks-to-present-at-upcoming-investor-event'); </script><a href="/company/press/2025/palo-alto-networks-to-present-at-upcoming-investor-event" id="/content/pan/en_US/company/press/2025/palo-alto-networks-to-present-at-upcoming-investor-event" class="result" data-result="Press Release" data-trending="false" data-doctype="resource" data-resourcetype="pressRelease" data-rctype="rc.type.pressRelease" data-articletype="" onclick="PAN.tracking.recordView('/content/pan/en_US/company/press/2025/palo-alto-networks-to-present-at-upcoming-investor-event.html')" data-page-track="true" data-track-value="en_us:resources:search-results:Press Release:Palo Alto Networks to Present at Upcoming Investor Event"><figure class="ar-16-9 default-image" aria-label="Recommended Material 6"></figure><div class="content"><span class="h6 result-type">Press Release</span><h3 data-truncate-lines="2" class="result-title">Palo Alto Networks to Present at Upcoming Investor Event</h3><time class="h6 result-meta" datetime="2025-02-18T05:30:00.000-0800">February 18, 2025</time></div><div class="actions"><span class="btn btn-link light"> Press Release</span></div></a></div><div class="col-12 col-md-6 col-xxxl-4"><script type="text/javascript"> PAN.tracking.addId('/content/pan/en_US/resources/datasheets/runtime-security-product-brief'); </script><a href="/resources/datasheets/runtime-security-product-brief" id="/content/pan/en_US/resources/datasheets/runtime-security-product-brief" class="result" data-result="Datasheet" data-trending="false" data-doctype="resource" data-resourcetype="datasheet" data-rctype="rc.type.datasheet" data-articletype="" onclick="PAN.tracking.recordView('/content/pan/en_US/resources/datasheets/runtime-security-product-brief.html')" data-page-track="true" data-track-value="en_us:resources:search-results:Datasheet:Cortex Cloud Runtime Security - Real Time Defense Against Cloud Attacks "><figure class="ar-16-9 asset-brand-logo" aria-label="Recommended Material 7"><img data-src="/content/dam/pan/en_US/assets/pdf/datasheets/runtime-security-product-brief.pdf/_jcr_content/renditions/runtime-security-product-brief.jpg" alt="asset brand logo" class="lozad "/></figure><div class="content"><span class="h6 result-type">Datasheet</span><h3 data-truncate-lines="2" class="result-title">Cortex Cloud Runtime Security - Real Time Defense Against Cloud Attacks </h3></div><div class="actions"><span class="btn btn-link light"> Download the datasheet</span></div></a></div><div class="col-12 col-md-6 col-xxxl-4"><script type="text/javascript"> PAN.tracking.addId('/content/pan/en_US/customers/iron-mountain-shifts-left-enabling-nonstop-compliance-and-unprecedented-efficiencies'); </script><a href="/customers/iron-mountain-shifts-left-enabling-nonstop-compliance-and-unprecedented-efficiencies" id="/content/pan/en_US/customers/iron-mountain-shifts-left-enabling-nonstop-compliance-and-unprecedented-efficiencies" class="result" data-result="References and Case Studies" data-trending="false" data-doctype="resource" data-resourcetype="customerStudy" data-rctype="rc.type.customerStudy" data-articletype="" onclick="PAN.tracking.recordView('/content/pan/en_US/customers/iron-mountain-shifts-left-enabling-nonstop-compliance-and-unprecedented-efficiencies.html')" data-page-track="true" data-track-value="en_us:resources:search-results:References and Case Studies:Iron Mountain shifts left, enabling nonstop compliance and unprecedented efficiencies"><figure class="ar-16-9 asset-brand-logo" aria-label="Recommended Material 8"><img data-src="/content/dam/pan/en_US/images/logos/customer/iron-mountain.png" alt="asset brand logo" class="lozad "/></figure><div class="content"><span class="h6 result-type">References and Case Studies</span><h3 data-truncate-lines="2" class="result-title">Iron Mountain shifts left, enabling nonstop compliance and unprecedented efficiencies</h3></div><div class="actions"><span class="btn btn-link light"> Read the customer story</span></div></a></div><div class="col-12 col-md-6 col-xxxl-4"><script type="text/javascript"> PAN.tracking.addId('/content/pan/en_US/resources/datasheets/sd-deployment-service-for-cloud-runtime-security'); </script><a href="/resources/datasheets/sd-deployment-service-for-cloud-runtime-security" id="/content/pan/en_US/resources/datasheets/sd-deployment-service-for-cloud-runtime-security" class="result" data-result="Services" data-trending="false" data-doctype="resource" data-resourcetype="serviceDescription" data-rctype="rc.type.serviceDescription" data-articletype="" onclick="PAN.tracking.recordView('/content/pan/en_US/resources/datasheets/sd-deployment-service-for-cloud-runtime-security.html')" data-page-track="true" data-track-value="en_us:resources:search-results:Services:Deployment Service for Cloud Runtime Security"><figure class="ar-16-9 asset-pdf" aria-label="Recommended Material 9"><img data-src="/content/dam/pan/en_US/assets/pdf/datasheets/sd-deployment-service-for-cloud-runtime-security.pdf.transform/featureThumb/image.png" alt="asset pdf thumbnail" class="lozad "/></figure><div class="content"><span class="h6 result-type">Services</span><h3 data-truncate-lines="2" class="result-title">Deployment Service for Cloud Runtime Security</h3></div><div class="actions"><span class="btn btn-link light"> Read the story</span></div></a></div><div class="col-12 col-md-6 col-xxxl-4"><script type="text/javascript"> PAN.tracking.addId('/content/pan/en_US/resources/datasheets/sd-deployment-service-for-application-security'); </script><a href="/resources/datasheets/sd-deployment-service-for-application-security" id="/content/pan/en_US/resources/datasheets/sd-deployment-service-for-application-security" class="result" data-result="Services" data-trending="false" data-doctype="resource" data-resourcetype="serviceDescription" data-rctype="rc.type.serviceDescription" data-articletype="" onclick="PAN.tracking.recordView('/content/pan/en_US/resources/datasheets/sd-deployment-service-for-application-security.html')" data-page-track="true" data-track-value="en_us:resources:search-results:Services:Deployment Service for Application Security"><figure class="ar-16-9 asset-pdf" aria-label="Recommended Material 10"><img data-src="/content/dam/pan/en_US/assets/pdf/datasheets/sd-deployment-service-for-application-security.pdf.transform/featureThumb/image.png" alt="asset pdf thumbnail" class="lozad "/></figure><div class="content"><span class="h6 result-type">Services</span><h3 data-truncate-lines="2" class="result-title">Deployment Service for Application Security</h3></div><div class="actions"><span class="btn btn-link light"> Read the story</span></div></a></div><div class="col-12 col-md-6 col-xxxl-4"><script type="text/javascript"> PAN.tracking.addId('/content/pan/en_US/resources/datasheets/sd-deployment-service-for-cloud-posture-security'); </script><a href="/resources/datasheets/sd-deployment-service-for-cloud-posture-security" id="/content/pan/en_US/resources/datasheets/sd-deployment-service-for-cloud-posture-security" class="result" data-result="Services" data-trending="false" data-doctype="resource" data-resourcetype="serviceDescription" data-rctype="rc.type.serviceDescription" data-articletype="" onclick="PAN.tracking.recordView('/content/pan/en_US/resources/datasheets/sd-deployment-service-for-cloud-posture-security.html')" data-page-track="true" data-track-value="en_us:resources:search-results:Services:Deployment Service for Cloud Posture Security"><figure class="ar-16-9 asset-pdf" aria-label="Recommended Material 11"><img data-src="/content/dam/pan/en_US/assets/pdf/datasheets/sd-deployment-service-for-cloud-posture-security.pdf.transform/featureThumb/image.png" alt="asset pdf thumbnail" class="lozad "/></figure><div class="content"><span class="h6 result-type">Services</span><h3 data-truncate-lines="2" class="result-title">Deployment Service for Cloud Posture Security</h3></div><div class="actions"><span class="btn btn-link light"> Read the story</span></div></a></div><div class="col-12 col-md-6 col-xxxl-4"><script type="text/javascript"> PAN.tracking.addId('/content/pan/en_US/company/press/2025/palo-alto-networks-reports-fiscal-second-quarter-2025-financial-results'); </script><a href="/company/press/2025/palo-alto-networks-reports-fiscal-second-quarter-2025-financial-results" id="/content/pan/en_US/company/press/2025/palo-alto-networks-reports-fiscal-second-quarter-2025-financial-results" class="result" data-result="Press Release" data-trending="false" data-doctype="resource" data-resourcetype="pressRelease" data-rctype="rc.type.pressRelease" data-articletype="" onclick="PAN.tracking.recordView('/content/pan/en_US/company/press/2025/palo-alto-networks-reports-fiscal-second-quarter-2025-financial-results.html')" data-page-track="true" data-track-value="en_us:resources:search-results:Press Release:Palo Alto Networks Reports Fiscal Second Quarter 2025 Financial Results"><figure class="ar-16-9 default-image" aria-label="Recommended Material 12"></figure><div class="content"><span class="h6 result-type">Press Release</span><h3 data-truncate-lines="2" class="result-title">Palo Alto Networks Reports Fiscal Second Quarter 2025 Financial Results</h3><time class="h6 result-meta" datetime="2025-02-13T13:05:00.000-0800">February 13, 2025</time></div><div class="actions"><span class="btn btn-link light"> Press Release</span></div></a></div><div class="col-12 col-md-6 col-xxxl-4"><script type="text/javascript"> PAN.tracking.addId('/content/pan/en_US/company/press/2025/palo-alto-networks-appoints-two-new-members-to-board-of-directors'); </script><a href="/company/press/2025/palo-alto-networks-appoints-two-new-members-to-board-of-directors" id="/content/pan/en_US/company/press/2025/palo-alto-networks-appoints-two-new-members-to-board-of-directors" class="result" data-result="Press Release" data-trending="false" data-doctype="resource" data-resourcetype="pressRelease" data-rctype="rc.type.pressRelease" data-articletype="" onclick="PAN.tracking.recordView('/content/pan/en_US/company/press/2025/palo-alto-networks-appoints-two-new-members-to-board-of-directors.html')" data-page-track="true" data-track-value="en_us:resources:search-results:Press Release:Palo Alto Networks Appoints Two New Members to Board of Directors"><figure class="ar-16-9 default-image" aria-label="Recommended Material 13"></figure><div class="content"><span class="h6 result-type">Press Release</span><h3 data-truncate-lines="2" class="result-title">Palo Alto Networks Appoints Two New Members to Board of Directors</h3><time class="h6 result-meta" datetime="2025-02-13T13:02:00.000-0800">February 13, 2025</time></div><div class="actions"><span class="btn btn-link light"> Press Release</span></div></a></div><div class="col-12 col-md-6 col-xxxl-4"><script type="text/javascript"> PAN.tracking.addId('/content/pan/en_US/resources/datasheets/cortex-cloud-overview'); </script><a href="/resources/datasheets/cortex-cloud-overview" id="/content/pan/en_US/resources/datasheets/cortex-cloud-overview" class="result" data-result="Datasheet" data-trending="false" data-doctype="resource" data-resourcetype="datasheet" data-rctype="rc.type.datasheet" data-articletype="" onclick="PAN.tracking.recordView('/content/pan/en_US/resources/datasheets/cortex-cloud-overview.html')" data-page-track="true" data-track-value="en_us:resources:search-results:Datasheet:Secure Your Enterprise from Code to Cloud to SOC"><figure class="ar-16-9 asset-pdf" aria-label="Recommended Material 14"><img data-src="/content/dam/pan/en_US/assets/pdf/datasheets/cortex-cloud-overview.pdf.transform/featureThumb/image.png" alt="asset pdf thumbnail" class="lozad "/></figure><div class="content"><span class="h6 result-type">Datasheet</span><h3 data-truncate-lines="2" class="result-title">Secure Your Enterprise from Code to Cloud to SOC</h3></div><div class="actions"><span class="btn btn-link light"> Download the datasheet</span></div></a></div><div class="col-12 col-md-6 col-xxxl-4" data-row="6" data-column="3" data-span="1"><a href="https://start.paloaltonetworks.com/2024-asm-threat-report.html" target="_blank" class="curated-result theme-dark layout-backgroundImage span-one" data-type="cortex" rel="noopener" data-page-track="true" data-page-track-value="resources:: section:secure your enterprise from code to cloud to soc"><div class="lozad-background bg-image" style="" data-background-image=" url('/content/dam/pan/en_US/images/cortex/xdr/Cortex_hero_1920x1080.jpg')"></div><div class="content"><span class="h6 result-type"></span><h3 class="h3 result-title">How to secure a moving target.</h3><p class="h6 result-description">Explore dynamic attack surfaces and how to secure them.</p><time datetime=""></time></div><div class="actions"><span class="btn btn-outline-dark btn-sm" data-page-track="true" data-page-track-value="resource-results:promo-card:Download report-6-3">Download report</span></div></a></div></div><div class="col-12 d-flex justify-content-center loadingCol mt-5"><div class="loading-spinner"></div></div><div id="solrContainer" class="row"></div></div><div class="searchpagination parbase section"><!--googleoff: index--><nav class="pagination-wrap"><ul class="list-unstyled pagination"><li class="disabled"><span aria-hidden="true"><i class="icon-chevron-left"></i></span></li><li class="active"><button data-page-track="true" data-page-track-value="resources:search:pagination:active">1</button></li><li><button data-start="18" data-page-track="true" data-page-track-value="resources:search:pagination:18">2</button></li><li class="pager-gap"><span class="pager-gap">…</span></li><li><button data-start="4572" data-page-track="true" data-page-track-value="resources:search:pagination:4572">255</button></li><li><button data-start="4590" data-page-track="true" data-page-track-value="resources:search:pagination:4590">256</button></li><li><button rel="next" aria-label="next" data-start="18" data-page-track="true" data-page-track-value="resources:search:pagination:next"><i class="icon-chevron-right"></i></button></li></ul></nav></div></div></div></div></div><div class="cleanDynamicFooter mainFooterComp baseComponent parbase"><!-- custom spacing --><a class="page-anchor" name="footer"></a><section class="lozad-background footer-form" style="" data-background-image=" url('\2f etc\2f clientlibs\2f clean\2fimgs\2f 2023\2f footer-form-bg.svg')"><div class="container-fluid"><div class="row"><div class="col-12 col-md-4 col-xl-6"><h2 class="h4 form-title text-white mb-0">Get the latest news, invites to events, and threat alerts</h2></div><div class="col-12 col-md-8 col-xl-6 col-xxxl-5 offset-xxxl-1"><form id="footer_form_manage_subscriptions" name="footer_form_manage_subscriptions" class="form d-flex flex-wrap" action="/apps/pan/public/formsubmithandler.submitform.json" method="POST" novalidate data-lang="en_US"><input type="hidden" name="mktoOptIn" value="true"/><input type="hidden" name="Qualifying_Campaign__c" value="7010g000001J5shAAC"/><input type="hidden" name="emailFormMask" value=""/><input type="hidden" name="Company" id="Company" value=""/><input type="hidden" name="FormName" value="subscription-all-corp-site-us"/><input type="hidden" name="formid" value="1086"/><input type="hidden" name="formVid" value="1086"/><input type="hidden" name="munchkinId" value="531-OCS-018"/><input type="hidden" name="programId" value="5373"/><div class="footer-form-input-container d-flex flex-column"><div class="d-flex"><label class="form-field" aria-label="Enter your email now to subscribe!" for="PAN_FOOTER_EMAIL_FIELD"><span class="sr-only" style="display: none;">Enter your email now to subscribe!</span><input type="text" name="Email" required class="mb-md-3 body-serif-1 text-white" placeholder="Enter your email now to subscribe!" id="PAN_FOOTER_EMAIL_FIELD" pattern="[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}$"/><div class="form-validation validation body-serif-4"></div><div class="validation-icon"></div></label><div class="actions d-none d-md-block"><button type="submit" class="btn btn-primary flex-grow-0 flex-shrink-0 ml-md-4" disabled data-page-track="true" data-page-track-value="resources:footer:Sign up">Sign up <i></i></button></div></div><div id="PAN_FOOTER_CAPTCHA_HOLDER" class="mb-2 mt-sm-2 mt-xl-0"><div class="g-recaptcha" data-expired-callback="recaptchaExpired" data-callback="captchaComplete" data-sitekey="6Lc5EhgTAAAAAJa-DzE7EeWABasWg4LKv-R3ao6o"></div></div><div class="legal"><p class="label-3 text-400 text-white form-legal"> By submitting this form, you agree to our <a class="text-white" href="/legal-notices/terms-of-use" data-page-track="true" data-page-track-value="resources:footer:terms-of-use">Terms of Use</a> and acknowledge our <a class="text-white" href="/legal-notices/privacy" data-page-track="true" data-page-track-value="resources:footer:privacy">Privacy Statement</a>. </p></div><div class="mobile-actions d-block d-md-none"><button type="submit" class="btn btn-primary flex-grow-0 flex-shrink-0 ml-0" disabled data-page-track="true" data-page-track-value="resources:footer:mobile:Sign up">Sign up <i></i></button></div></div></form></div></div></div></section><section class="mega-footer accordion" id="footer_accordion"><div class="container-fluid"><div class="row"><div class="col-12 col-md-16 col-xxl-8"><div class="heading-col collapsed pr-4 pr-md-0" data-toggle="collapse" data-target="#collapse_col_0"><h2 class="nav-headline mb-0">Products and Services</h2></div><div id="collapse_col_0" class="columns collapse d-md-flex flex-nowrap" data-parent="#footer_accordion"><ul class="list-unstyled nav-list mb-0"><li class="sub-title nav-subheader"><a href="/network-security" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-0:link-0:network security platform" rel="noopener"> Network Security Platform </a></li><li class="sub-title nav-subheader"><a href="/network-security/security-subscriptions" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-0:link-1:cloud delivered security services" rel="noopener"> CLOUD DELIVERED SECURITY SERVICES </a></li><li class="link"><a href="/network-security/advanced-threat-prevention" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-0:link-2:advanced threat prevention" rel="noopener"> Advanced Threat Prevention </a></li><li class="link"><a href="/network-security/advanced-wildfire" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-0:link-3:advanced wildfire" rel="noopener"> Advanced WildFire </a></li><li class="link"><a href="/network-security/advanced-dns-security" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-0:link-4:dns security" rel="noopener"> DNS Security </a></li><li class="link"><a href="/network-security/enterprise-data-loss-prevention" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-0:link-5:data loss prevention" rel="noopener"> Data Loss Prevention </a></li><li class="link"><a href="/network-security/enterprise-iot-security" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-0:link-6:iot security" rel="noopener"> IoT Security </a></li><li class="sub-title nav-subheader"><a href="/network-security/next-generation-firewall" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-0:link-7:next-generation firewalls" rel="noopener"> Next-Generation Firewalls </a></li><li class="link"><a href="/network-security/next-generation-firewall-hardware" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-0:link-8:hardware firewalls" rel="noopener"> Hardware Firewalls </a></li><li class="link"><a href="/network-security/strata-cloud-manager" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-0:link-9:strata cloud manager" rel="noopener"> Strata Cloud Manager </a></li><li class="sub-title nav-subheader"><a href="/sase" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-0:link-10:secure access service edge" rel="noopener"> SECURE ACCESS SERVICE EDGE </a></li><li class="link"><a href="/sase/access" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-0:link-11:prisma access" rel="noopener"> Prisma Access </a></li><li class="link"><a href="/sase/sd-wan" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-0:link-12:prisma sd-wan" rel="noopener"> Prisma SD-WAN </a></li><li class="link"><a href="/sase/adem" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-0:link-13:autonomous digital experience management" rel="noopener"> Autonomous Digital Experience Management </a></li><li class="link"><a href="/sase/next-gen-casb" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-0:link-14:cloud access security broker" rel="noopener"> Cloud Access Security Broker </a></li><li class="link"><a href="/sase/ztna" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-0:link-15:zero trust network access" rel="noopener"> Zero Trust Network Access </a></li></ul><ul class="list-unstyled nav-list mb-0"><li class="sub-title nav-subheader"><a href="/cortex/cloud" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-0:link-0:cloud security" rel="noopener"> Cloud Security </a></li><li class="link"><a href="/cortex/cloud" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-0:link-1:cortex cloud" rel="noopener"> Cortex Cloud </a></li><li class="link"><a href="/prisma/cloud" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-0:link-2:prisma cloud" rel="noopener"> Prisma Cloud </a></li></ul><ul class="list-unstyled nav-list mb-0"><li class="sub-title nav-subheader"><a href="/cortex" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-0:link-0:ai-driven security operations platform" rel="noopener"> AI-Driven Security Operations Platform </a></li><li class="link"><a href="/cortex/cortex-xdr" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-0:link-1:cortex xdr" rel="noopener"> Cortex XDR </a></li><li class="link"><a href="/cortex/cortex-xsoar" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-0:link-2:cortex xsoar" rel="noopener"> Cortex XSOAR </a></li><li class="link"><a href="/cortex/cortex-xpanse" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-0:link-3:cortex xpanse" rel="noopener"> Cortex Xpanse </a></li><li class="link"><a href="/cortex/cortex-xsiam" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-0:link-4:cortex xsiam" rel="noopener"> Cortex XSIAM </a></li><li class="link"><a href="/cortex/cortex-xpanse/attack-surface-management" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-0:link-5:external attack surface protection" rel="noopener"> External Attack Surface Protection </a></li><li class="link"><a href="/cortex/security-operations-automation" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-0:link-6:security automation" rel="noopener"> Security Automation </a></li><li class="link"><a href="/cortex/detection-and-response" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-0:link-7:threat prevention detection &amp; response" rel="noopener"> Threat Prevention, Detection & Response </a></li></ul><ul class="list-unstyled nav-list mb-0"><li class="sub-title nav-subheader"><a href="/unit42" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-0:link-0:threat intel and incident response services" rel="noopener"> Threat Intel and Incident Response Services </a></li><li class="link"><a href="/unit42/assess" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-0:link-1:proactive assessments" rel="noopener"> Proactive Assessments </a></li><li class="link"><a href="/unit42/respond" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-0:link-2:incident response" rel="noopener"> Incident Response </a></li><li class="link"><a href="/unit42/transform" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-0:link-3:transform your security strategy" rel="noopener"> Transform Your Security Strategy </a></li><li class="link"><a href="/unit42/threat-intelligence-partners" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-0:link-4:discover threat intelligence" rel="noopener"> Discover Threat Intelligence </a></li></ul></div></div><div class="col-12 col-md-4 col-xxl-2"><div class="heading-col collapsed pr-4 pr-md-0" data-toggle="collapse" data-target="#collapse_col_1"><h2 class="nav-headline mb-0">Company</h2></div><div id="collapse_col_1" class="columns collapse d-md-flex flex-nowrap" data-parent="#footer_accordion"><ul class="list-unstyled nav-list mb-0"><li class="link"><a href="/about-us" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-1:link-0:about us" rel="noopener"> About Us </a></li><li class="link"><a href="https://jobs.paloaltonetworks.com/en/" class="d-flex d-md-inline text-black" target="_blank" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-1:link-1:careers" rel="noopener"> Careers </a></li><li class="link"><a href="/company/contact-sales" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-1:link-2:contact us" rel="noopener"> Contact Us </a></li><li class="link"><a href="/about-us/corporate-responsibility" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-1:link-3:corporate responsiblity" rel="noopener"> Corporate Responsiblity </a></li><li class="link"><a href="/customers" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-1:link-4:customers" rel="noopener"> Customers </a></li><li class="link"><a href="https://investors.paloaltonetworks.com/" class="d-flex d-md-inline text-black" target="_blank" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-1:link-5:investor relations" rel="noopener"> Investor Relations </a></li><li class="link"><a href="/about-us/locations" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-1:link-6:location" rel="noopener"> Location </a></li><li class="link"><a href="/company/newsroom" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-1:link-7:newsroom" rel="noopener"> Newsroom </a></li></ul></div></div><div class="col-12 col-md-4 col-xxl-2"><div class="heading-col collapsed pr-4 pr-md-0" data-toggle="collapse" data-target="#collapse_col_2"><h2 class="nav-headline mb-0">Popular Links</h2></div><div id="collapse_col_2" class="columns collapse d-md-flex flex-nowrap" data-parent="#footer_accordion"><ul class="list-unstyled nav-list mb-0"><li class="link"><a href="/blog/" class="d-flex d-md-inline text-black" target="_blank" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-2:link-0:blog" rel="noopener"> Blog </a></li><li class="link"><a href="/communities" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-2:link-1:communities" rel="noopener"> Communities </a></li><li class="link"><a href="/resources" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-2:link-2:content library" rel="noopener"> Content Library </a></li><li class="link"><a href="/cyberpedia" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-2:link-3:cyberpedia" rel="noopener"> Cyberpedia </a></li><li class="link"><a href="https://events.paloaltonetworks.com/" class="d-flex d-md-inline text-black" target="_blank" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-2:link-4:event center" rel="noopener"> Event Center </a></li><li class="link"><a href="https://start.paloaltonetworks.com/preference-center" class="d-flex d-md-inline text-black" target="_blank" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-2:link-5:manage email preferences" rel="noopener"> Manage Email Preferences </a></li><li class="link"><a href="/products/products-a-z" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-2:link-6:products a-z" rel="noopener"> Products A-Z </a></li><li class="link"><a href="/legal-notices/trust-center/compliance" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-2:link-7:product certifications" rel="noopener"> Product Certifications </a></li><li class="link"><a href="/security-disclosure" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-2:link-8:report a vulnerability" rel="noopener"> Report a Vulnerability </a></li><li class="link"><a href="/sitemap" class="d-flex d-md-inline text-black" target="_self" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-2:link-9:sitemap" rel="noopener"> Sitemap </a></li><li class="link"><a href="https://docs.paloaltonetworks.com/" class="d-flex d-md-inline text-black" target="_blank" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-2:link-10:tech docs" rel="nofollow noopener"> Tech Docs </a></li><li class="link"><a href="https://unit42.paloaltonetworks.com/" class="d-flex d-md-inline text-black" target="_blank" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-2:link-11:unit 42" rel="noopener"> Unit 42 </a></li><li class="link"><a href="https://panwedd.exterro.net/portal/dsar.htm?target=panwedd" class="d-flex d-md-inline text-black" target="_blank" data-page-track="true" data-page-track-value="resources:mainfootercomp:col-2:link-12:do not sell or share my personal information" onclick="noSell(event)" rel="noopener"> Do Not Sell or Share My Personal Information </a></li></ul></div></div></div></div></section><footer class="footer-bottom"><div class="container-fluid"><div class="row align-items-center"><div class="col-12 col-md-6 order-md-1 col-xxl-12"><div class="pan-logo d-flex"><img data-src="/etc/clientlibs/clean/imgs/pan-logo-dark.svg" alt="PAN logo" class="lozad "/></div></div><div class="col-12 col-md-12 order-md-3 col-xxl-8 order-xxl-2"><ul class="list-unstyled bottom-links nav-list d-flex flex-column flex-md-row"><li><a href="/legal-notices/privacy" class="text-black" data-page-track="true" data-page-track-value="resources:mainfootercomp:bottomlinks-0:privacy"> Privacy </a></li><li><a href="/legal-notices/trust-center" class="text-black" data-page-track="true" data-page-track-value="resources:mainfootercomp:bottomlinks-1:trust center"> Trust Center </a></li><li><a href="/legal-notices/terms-of-use" class="text-black" data-page-track="true" data-page-track-value="resources:mainfootercomp:bottomlinks-2:terms of use"> Terms of Use </a></li><li><a href="/legal" class="text-black" data-page-track="true" data-page-track-value="resources:mainfootercomp:bottomlinks-3:documents"> Documents </a></li></ul><p class="copyright text-black nav-list mb-3 mb-md-0">Copyright © 2025 Palo Alto Networks. All Rights Reserved</p></div><div class="col-12 col-md-6 order-md-2 col-xxl-4 order-xxl-3"><ul class="list-unstyled social-icons d-flex justify-content-start justify-content-md-end align-items-center"><li><a href="https://www.youtube.com/user/paloaltonetworks" target="_blank" class="social-icon d-flex" aria-label="social link" data-page-track="true" data-page-track-value="resources:mainfootercomp:socials-0:youtube" rel="noopener"><img data-src="/etc/clientlibs/clean/imgs/social/youtube-black.svg" alt="Youtube" class="lozad "/></a></li><li><a href="https://twitter.com/PaloAltoNtwks" target="_blank" class="social-icon d-flex" aria-label="social link" data-page-track="true" data-page-track-value="resources:mainfootercomp:socials-1:twitter" rel="noopener"><img data-src="/etc/clientlibs/clean/imgs/social/twitter-x-black.svg" alt="Twitter" class="lozad "/></a></li><li><a href="https://www.facebook.com/PaloAltoNetworks/" target="_blank" class="social-icon d-flex" aria-label="social link" data-page-track="true" data-page-track-value="resources:mainfootercomp:socials-2:facebook" rel="noopener"><img data-src="/etc/clientlibs/clean/imgs/social/facebook-black.svg" alt="Facebook" class="lozad "/></a></li><li><a href="https://www.linkedin.com/company/palo-alto-networks" target="_blank" class="social-icon d-flex" aria-label="social link" data-page-track="true" data-page-track-value="resources:mainfootercomp:socials-3:linkedin" rel="noopener"><img data-src="/etc/clientlibs/clean/imgs/social/linkedin-black.svg" alt="LinkedIn" class="lozad "/></a></li><li><a href="https://unit42.paloaltonetworks.com/unit-42-threat-vector-podcast/" target="_blank" class="social-icon d-flex" aria-label="social link" data-page-track="true" data-page-track-value="resources:mainfootercomp:socials-4:podcast" rel="noopener"><img data-src="/content/dam/pan/en_US/images/icons/podcast.svg" alt="Podcast" class="lozad "/></a></li><li><div class="dropdown" data-language-json="[{'localTitle':'USA (ENGLISH)', 'localLink':'#'}, {'localTitle':'AUSTRALIA (ENGLISH)', 'localLink':'https://www.paloaltonetworks.com.au'}, {'localTitle':'BRAZIL (PORTUGUÉS)', 'localLink':'https://www.paloaltonetworks.com.br'}, {'localTitle':'CANADA (ENGLISH)', 'localLink':'https://www.paloaltonetworks.ca'}, {'localTitle':'CHINA (简体中文)', 'localLink':'https://www.paloaltonetworks.cn'}, {'localTitle':'FRANCE (FRANÇAIS)', 'localLink':'https://www.paloaltonetworks.fr'}, {'localTitle':'GERMANY (DEUTSCH)', 'localLink':'https://www.paloaltonetworks.de'}, {'localTitle':'INDIA (ENGLISH)', 'localLink':'https://www.paloaltonetworks.in'}, {'localTitle':'ITALY (ITALIANO)', 'localLink':'https://www.paloaltonetworks.it'}, {'localTitle':'JAPAN (日本語)', 'localLink':'https://www.paloaltonetworks.jp'}, {'localTitle':'KOREA (한국어)', 'localLink':'https://www.paloaltonetworks.co.kr'}, {'localTitle':'LATIN AMERICA (ESPAÑOL)', 'localLink':'https://www.paloaltonetworks.lat'}, {'localTitle':'MEXICO (ESPAÑOL)', 'localLink':'https://www.paloaltonetworks.com.mx'}, {'localTitle':'SINGAPORE (ENGLISH)', 'localLink':'https://www.paloaltonetworks.sg'}, {'localTitle':'SPAIN (ESPAÑOL)', 'localLink':'https://www.paloaltonetworks.es'}, {'localTitle':'TAIWAN (繁體中文)', 'localLink':'https://www.paloaltonetworks.tw'}, {'localTitle':'UK (ENGLISH)', 'localLink':'https://www.paloaltonetworks.co.uk'}]"><button class="btn btn-language d-inline-flex align-items-center lozad-background" type="button" id="language_dropdown_menu_button" data-toggle="dropdown" aria-expanded="false" data-offset="30" data-background-image="url('/etc/clientlibs/clean/imgs/globe-black.svg')"><span class="d-inline-flex">EN</span><i class="d-inline-flex"></i></button><div class="dropdown-menu dropdown-menu-right" aria-labelledby="language_dropdown_menu_button"><span class="h8 title d-flex pb-2">Select your language</span><ul class="list-unstyled nav-list p-0 d-block d-md-flex flex-wrap"></ul></div></div></li></ul></div></div></div></footer></div><div class="cleanBottomHtml htmlComp baseComponent parbase"><div class="base-component-spacer spacer-none "></div></div><div class="cloudservices servicecomponents"><div id="at-prehide"></div></div></div><script type="text/javascript"> window.PAN_MainNavAsyncUrl = '/_jcr_content/globals/cleanHeader.fullRenderer.html'; window.initialContainer = "General"; window.supportedContainer = ["Prisma","Sase","CloudCortex","Cortex","Cdss","Ngfw","Unit"]; if (cqsearch === undefined) { var cqsearch = {}; } cqsearch.getUserDates = function () { var startEl = document.getElementById('datetimepicker_start_input') var endEl = document.getElementById('datetimepicker_end_input') var fmtStart = false if(startEl.value){ var start = $(startEl).attr('data-date') fmtStart = start + 'T12:00:00Z' } var fmtEnd = false if(endEl.value){ var end = $(endEl).attr('data-date') fmtEnd = end + 'T12:00:00Z' } // manually set time for start and end dates to match previous implementation format // console.log('fmtStart: ', fmtStart) // console.log('fmtEnd: ', fmtEnd) var fq = cqsearch.convertDatesToFq(fmtStart, fmtEnd) return fq } cqsearch.addSolrFq = function (fq, e) { // clear previous query in url // cqsearch.removeAllSolrQueries() if (null == fq) return; if (e.checked === true) { $("<input type='hidden'/>") .attr("name", "fq") .val(fq) .appendTo("#solr\\.fq"); } else { $("#solr\\.fq").find("input[value='" + fq + "']").remove(); } // $("#solr\\.form").trigger("submit"); // var vals = [] // // add dates // var userDates = cqsearch.getUserDates() // console.log('userDates: ', userDates) // if(userDates) { // vals.push(userDates) // } // var $items = $('#resources_facets_accordion .facet-list > li label') // $items.each(function(index, el){ // var isChecked = $(el).find('input').prop('checked') // if(isChecked){ // var val = $(el).attr('data-value') // vals.push(val) // } // }) // var $date = $("#solr\\.fq .datefilter").clone(); // if (vals.length){ // $("#solr\\.fq")[0].innerHTML = ""; // if ($date.length && !userDates) { // date.appendTo("#solr\\.fq"); // } // vals.forEach(function(fq, index){ // $("<input type='hidden'/>") // .attr("name", "fq") // .val(fq) // .appendTo("#solr\\.fq"); // }) // $("#solr\\.form").trigger("submit"); // } else { // // No facets are checked // var prevVal = $("#solr\\.query").val(); // var currentVal = $("#solr\\.queryInput").val(); // if (date.length && !userDates) { // date.appendTo("#solr\\.fq"); // } // if (prevVal != currentVal) { // $("#solr\\.query").val(currentVal); // $("#solr\\.form").trigger("submit"); // } // } }; cqsearch.addDateFq = function (fq, e) { if (null == fq) return; $(".datefilter").remove(); if (e.checked === true) { $("#solr\\.fq").find(".datefq").remove(); $("<input type='hidden'/>") .attr("name", "fq") .addClass("datefq") .val(fq) .appendTo("#solr\\.fq"); } else { $("#solr\\.fq").find("input[value='" + fq + "']").remove(); } // $("#solr\\.form").trigger("submit"); }; cqsearch.showMoreFacets = function (target) { if ($(target).text().trim() == '+ Show More') { // Targrting the li only, as otherwise it will make the script tag visible $(target).closest('ul').children('li:hidden').each( function() { $(this).addClass('hideme').show(); } ); $(target).text('- Show Less'); } else { $(target).closest('ul').children('.hideme').each( function() { $(this).removeClass('hideme').hide(); } ); $(target).text('+ Show More'); } }; cqsearch.removeAllSolrQueries = function() { $("#solr\\.query").val("*:*"); $("#solr\\.fq").empty(); // $("#solr\\.form").trigger("submit"); }; if (cqsearch === undefined) { var cqsearch = {}; } cqsearch.removeAllSolrQueries = function() { // $("#solr\\.query").val("*:*"); $("#solr\\.fq").empty(); // $("#solr\\.form").trigger("submit"); }; cqsearch.removeSolrQuery = function () { $("#solr\\.query").val("*:*"); // $("#solr\\.form").trigger("submit"); }; cqsearch.removeSolrFq = function (value) { var $inputElement = $( "#solr\\.fq > input[value='" + value + "']" ); if ($inputElement.length) { $inputElement.remove(); // $("#solr\\.form").trigger("submit"); } }; </script><!-- Should inline or normal include criticalBottom? --><script>(function(){window.PAN_Clean_Util.animateCSS=function(a,b,c){function d(){a.classList.remove("animate__animated","animate__"+b);a.removeEventListener("animationend",d);"function"===typeof c&&c()}a.classList.add("animate__animated","animate__"+b);a.addEventListener("animationend",d)};window.PAN_Clean_Util.$animateCSS=function(a,b,c){function d(){a.removeClass("animate__animated animate__"+b);a.off("animationend",d);"function"===typeof c&&c()}a.addClass("animate__animated animate__"+b);a.on("animationend", d)}})();var cbVarMap={},locationDetails={},default_logo,logo,container; try{$(window).on("load",function(){function a(d){$(document).on("keydown.autocomplete",'input[name\x3d"Company"]',function(){$(this).autoComplete({minChars:1,source:function(b,c){$.getJSON("https://autocomplete.clearbit.com/v1/companies/suggest",{query:b},function(e){c(e)})},renderItem:function(b,c){default_logo="https://www.paloaltonetworks.com/content/dam/pan/en_US/includes/unknown.gif";logo=null==b.logo?default_logo:b.logo+"?size\x3d25";container='\x3cdiv class\x3d"autocomplete-suggestion" data-name\x3d"'+ b.name+'" data-val\x3d"'+c+'"\x3e';container+='\x3cspan class\x3d"icon"\x3e\x3cimg align\x3d"center" src\x3d"'+logo+'" onerror\x3d"this.src\x3d\'/content/dam/pan/en_US/includes/unknown.gif\';"/\x3e\x3c/span\x3e';return container+=b.name+'\x3cspan class\x3d"domain"\x3e'+b.domain+"\x3c/span\x3e\x3c/div\x3e"},onSelect:function(b,c,e){$('input[name\x3d"Company"]').val(e.data("name"));$(".autocomplete-suggestions").is(":visible")&&$(".autocomplete-suggestions:visible").css("display","none")}})})}$(document).on("focus", 'input[name\x3d"Company"]',function(){var d=(new Date).getTime(),b=$(this).data("prevActionTime");$(this).data("prevActionTime",d);(!b||1E3<d-b)&&"undefined"===typeof jQuery.fn.autoComplete&&loadScript("/content/dam/pan/en_US/includes/jquery.auto-complete.min.js").then(a)});if(-1==window.location.href.indexOf("unit42-preview.paloaltonetworks.com")||-1==window.location.href.indexOf("blog.paloaltonetworks.com")&&-1==window.location.href.indexOf("blog-test.paloaltonetworks.com")&&-1==window.location.href.indexOf("unit42.paloaltonetworks.com")&& -1==window.location.href.indexOf("unit42-test.paloaltonetworks.com")&&-1==window.location.href.indexOf("unit42-test2.paloaltonetworks.com"))$("#field3[name~\x3d'Company']").on("focus",function(){$("link[href\x3d'/etc/clientlibs/pan-clearbit.min.css']").length||$("\x3clink/\x3e",{rel:"stylesheet",type:"text/css",href:"/etc/clientlibs/pan-clearbit.min.css",preload:!0}).appendTo("head")})})}catch(a){console.log(a)} function populateCompanyData(a){var d="",b="";if("undefined"!=typeof cbVarMap){for(var c in cbVarMap)"undefined"!=typeof cbVarMap[c]&&String.prototype.trim.call(null==cbVarMap[c]?"":cbVarMap[c])||(cbVarMap[c]=""),d=d+"\x26"+c+"\x3d"+cbVarMap[c],b=b+'\x3cinput type\x3d"hidden" name\x3d"'+c+'" value\x3d"'+cbVarMap[c]+'"\x3e';"undefined"!==typeof a&&0<$("form[name\x3d'"+a+"']").length&&$("form[name\x3d'"+a+"']").append(b)}return d} function retrieveMktVisitorCompanyDetails(){var a=decodeURI(getCookie("mktVisitorCompanyDetails"));""!=a&&"undefined"!=a&&deleteCookie("mktVisitorCompanyDetails");a=window.Dmdbase_CDC;console.log("companyDataiptocompany",a);"undefined"!=typeof a&&"undefined"!=typeof a.CompanyProfile&&a.CompanyProfile&&(a=a.CompanyProfile,0==a.isp&&(cbVarMap={Company_From_IP__c:a.company_name||"",Industry:a.industry||"",Sub_Industry__c:a.sub_industry||"",RL_Primary_Sic__c:a.primary_sic||"",RL_Primary_Naics__c:a.primary_naics|| "",RL_Address__c:a.street_address||"",RL_City__c:a.city||"",RL_State__c:a.state||"",RL_ZIP_Postal_Code__c:a.zip||"",RL_Country_from_IP__c:a.country?a.country:a.country_name,RL_Phone__c:a.phone||"",Website:a.web_site||"",RL_Annual_Revenue_Range__c:a.revenue_range||"",RL_Employee_Range__c:a.employee_range||"",Latitude_based_on_IP__c:a.latitude||"",Longitude_based_on_IP__c:a.longitude||"",IP_Address__c:a.ip||"",RL_Company_LegalName__c:a.company_name||"",RL_Provider__c:"demandbase"}))} $(document).on("getDmdbaseCompanyData",{},function(a,d){"undefined"!=typeof d&&retrieveMktVisitorCompanyDetails()});function setVisitorCompanyDetailsCookie(a,d,b){b?(date=new Date,date.setTime(date.getTime()+6E4*b),expires="; expires\x3d"+date.toGMTString()):expires="; expires\x3d0";document.cookie=a+"\x3d"+d+expires+"; path\x3d/"} function getCookie(a){a+="\x3d";for(var d=decodeURIComponent(document.cookie).split(";"),b=0;b<d.length;b++){for(var c=d[b];" "==c.charAt(0);)c=c.substring(1);if(0==c.indexOf(a))return c.substring(a.length,c.length)}return""}function deleteCookie(a){document.cookie=a+"\x3d; Path\x3d/; Expires\x3dThu, 01 Jan 1970 00:00:01 GMT;";console.log("cookie is deleted "+a)};</script><script type="text/javascript" src="/etc/clientlibs/panClean/components/library/bundle.dresourceredesign.poperlityybscolbsdroddebaddelhddepgddetxddybadmftcdprcbdprhedrcsfdrcsrdrectdreicdresiddemn.min.a3e629ae3412173c438c0c0742bd3aa3.js" defer></script><script type="text/javascript"> if (window.PAN_deferedCssList) { PAN_deferedCssList.push('/etc/clientlibs/panClean/components/library/bundle.dresourceredesign.poperlityybscolbsdroddebaddelhddepgddetxddybadmftcdprcbdprhedrcsfdrcsrdrectdreicdresiddemn.min.a3e629ae3412173c438c0c0742bd3aa3.css'); var noScriptNode = document.getElementsByTagName('body')[0]; var index; for (index=0; index<PAN_deferedCssList.length; index++) { var nonCriticalCss = document.createElement('link'); nonCriticalCss.rel = 'stylesheet'; nonCriticalCss.href = PAN_deferedCssList[index]; nonCriticalCss.type = 'text/css'; noScriptNode.appendChild(nonCriticalCss); } } if (window.PAN_jsAfterDeferedCssFunctionList) { setTimeout(function() { var index; for (index=0; index<PAN_jsAfterDeferedCssFunctionList.length; index++) { PAN_jsAfterDeferedCssFunctionList[index](); } }, 2000); } // use the function if not present for a particular template. if (typeof populateCompanyData == "undefined") { function populateCompanyData(regFormName) { var serialized = ""; var fields = ""; if(typeof cbVarMap != 'undefined'){ for(i in cbVarMap){ if (typeof cbVarMap[i] == 'undefined' || !String.prototype.trim.call(cbVarMap[i] == null ? "" : cbVarMap[i])) { cbVarMap[i] = ''; } serialized = serialized + "&" + i + "=" + cbVarMap[i]; fields = fields + '<input type="hidden" name="' + i + '" value="' + cbVarMap[i] + '">'; } if (typeof regFormName !== "undefined") { if ($("form[name='" + regFormName + "']").length > 0) { $("form[name='"+ regFormName + "']").append(fields); } } } return serialized; } } </script></body></html>