.BorlabsCookie *{box-sizing:border-box}.BorlabsCookie *::before,.BorlabsCookie *::after{box-sizing:inherit}.BorlabsCookie * div,.BorlabsCookie * span,.BorlabsCookie * h1,.BorlabsCookie * h2,.BorlabsCookie * h3,.BorlabsCookie * h4,.BorlabsCookie * h5,.BorlabsCookie * h6,.BorlabsCookie * p,.BorlabsCookie * a,.BorlabsCookie * em,.BorlabsCookie * img,.BorlabsCookie * small,.BorlabsCookie * strike,.BorlabsCookie * strong,.BorlabsCookie * sub,.BorlabsCookie * sup,.BorlabsCookie * b,.BorlabsCookie * u,.BorlabsCookie * i,.BorlabsCookie * center,.BorlabsCookie * ol,.BorlabsCookie * ul,.BorlabsCookie * li,.BorlabsCookie * fieldset,.BorlabsCookie * form,.BorlabsCookie * label,.BorlabsCookie * legend{margin:0;padding:0;border:0;color:inherit;vertical-align:baseline;font-family:inherit;font-size:inherit;font-style:initial;font-weight:initial;letter-spacing:initial;line-height:initial;text-decoration:initial;text-transform:initial;word-spacing:initial}.borlabs-hide{display:none}.borlabs-position-fix{position:initial !important;transform:unset !important}._brlbs-btn-cookie-preference{display:inline-block;font-family:inherit;font-size:inherit;padding:.5em 1em;text-decoration:none;transition:background-color 125ms linear}.BorlabsCookie ._brlbs-cursor{cursor:pointer}.BorlabsCookie .text-left{text-align:left !important}.BorlabsCookie .text-center{text-align:center !important}.BorlabsCookie .text-right{text-align:right !important}.BorlabsCookie table._brlbs th{text-align:left}.BorlabsCookie table._brlbs td,.BorlabsCookie table._brlbs th{padding:.3rem}.BorlabsCookie ._brlbs-responsive-table{min-height:.01%;overflow:auto}.BorlabsCookie label._brlbs-focused{outline:Highlight;outline-color:-webkit-focus-ring-color;outline-style:solid;outline-width:2px}.BorlabsCookie .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}.BorlabsCookie .sr-only-focusable:active,.BorlabsCookie .sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.BorlabsCookie .container,.BorlabsCookie .container-fluid,.BorlabsCookie .container-xl,.BorlabsCookie .container-lg,.BorlabsCookie .container-md,.BorlabsCookie .container-sm{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media(min-width: 576px){.BorlabsCookie .container-sm,.BorlabsCookie .container{max-width:540px}}@media(min-width: 768px){.BorlabsCookie .container-md,.BorlabsCookie .container-sm,.BorlabsCookie .container{max-width:720px}}@media(min-width: 992px){.BorlabsCookie .container-lg,.BorlabsCookie .container-md,.BorlabsCookie .container-sm,.BorlabsCookie .container{max-width:960px}}@media(min-width: 1200px){.BorlabsCookie .container-xl,.BorlabsCookie .container-lg,.BorlabsCookie .container-md,.BorlabsCookie .container-sm,.BorlabsCookie .container{max-width:1140px}}.BorlabsCookie .row{display:flex;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.BorlabsCookie .no-gutters{margin-right:0;margin-left:0}.BorlabsCookie .no-gutters>.col,.BorlabsCookie .no-gutters>[class*=col-]{padding-right:0;padding-left:0}.BorlabsCookie .col-xl,.BorlabsCookie .col-xl-12,.BorlabsCookie .col-xl-11,.BorlabsCookie .col-xl-10,.BorlabsCookie .col-xl-9,.BorlabsCookie .col-xl-8,.BorlabsCookie .col-xl-7,.BorlabsCookie .col-xl-6,.BorlabsCookie .col-xl-5,.BorlabsCookie .col-xl-4,.BorlabsCookie .col-xl-3,.BorlabsCookie .col-xl-2,.BorlabsCookie .col-xl-1,.BorlabsCookie .col-lg,.BorlabsCookie .col-lg-12,.BorlabsCookie .col-lg-11,.BorlabsCookie .col-lg-10,.BorlabsCookie .col-lg-9,.BorlabsCookie .col-lg-8,.BorlabsCookie .col-lg-7,.BorlabsCookie .col-lg-6,.BorlabsCookie .col-lg-5,.BorlabsCookie .col-lg-4,.BorlabsCookie .col-lg-3,.BorlabsCookie .col-lg-2,.BorlabsCookie .col-lg-1,.BorlabsCookie .col-md,.BorlabsCookie .col-md-12,.BorlabsCookie .col-md-11,.BorlabsCookie .col-md-10,.BorlabsCookie .col-md-9,.BorlabsCookie .col-md-8,.BorlabsCookie .col-md-7,.BorlabsCookie .col-md-6,.BorlabsCookie .col-md-5,.BorlabsCookie .col-md-4,.BorlabsCookie .col-md-3,.BorlabsCookie .col-md-2,.BorlabsCookie .col-md-1,.BorlabsCookie .col-sm,.BorlabsCookie .col-sm-12,.BorlabsCookie .col-sm-11,.BorlabsCookie .col-sm-10,.BorlabsCookie .col-sm-9,.BorlabsCookie .col-sm-8,.BorlabsCookie .col-sm-7,.BorlabsCookie .col-sm-6,.BorlabsCookie .col-sm-5,.BorlabsCookie .col-sm-4,.BorlabsCookie .col-sm-3,.BorlabsCookie .col-sm-2,.BorlabsCookie .col-sm-1,.BorlabsCookie .col,.BorlabsCookie .col-12,.BorlabsCookie .col-11,.BorlabsCookie .col-10,.BorlabsCookie .col-9,.BorlabsCookie .col-8,.BorlabsCookie .col-7,.BorlabsCookie .col-6,.BorlabsCookie .col-5,.BorlabsCookie .col-4,.BorlabsCookie .col-3,.BorlabsCookie .col-2,.BorlabsCookie .col-1{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.BorlabsCookie .col{flex-basis:0;flex-grow:1;max-width:100%}.BorlabsCookie .col-1{flex:0 0 8.33333333%;max-width:8.33333333%}.BorlabsCookie .col-2{flex:0 0 16.66666667%;max-width:16.66666667%}.BorlabsCookie .col-3{flex:0 0 25%;max-width:25%}.BorlabsCookie .col-4{flex:0 0 33.33333333%;max-width:33.33333333%}.BorlabsCookie .col-5{flex:0 0 41.66666667%;max-width:41.66666667%}.BorlabsCookie .col-6{flex:0 0 50%;max-width:50%}.BorlabsCookie .col-7{flex:0 0 58.33333333%;max-width:58.33333333%}.BorlabsCookie .col-8{flex:0 0 66.66666667%;max-width:66.66666667%}.BorlabsCookie .col-9{flex:0 0 75%;max-width:75%}.BorlabsCookie .col-10{flex:0 0 83.33333333%;max-width:83.33333333%}.BorlabsCookie .col-11{flex:0 0 91.66666667%;max-width:91.66666667%}.BorlabsCookie .col-12{flex:0 0 100%;max-width:100%}@media(min-width: 576px){.BorlabsCookie .col-sm{flex-basis:0;flex-grow:1;max-width:100%}.BorlabsCookie .col-sm-1{flex:0 0 8.33333333%;max-width:8.33333333%}.BorlabsCookie .col-sm-2{flex:0 0 16.66666667%;max-width:16.66666667%}.BorlabsCookie .col-sm-3{flex:0 0 25%;max-width:25%}.BorlabsCookie .col-sm-4{flex:0 0 33.33333333%;max-width:33.33333333%}.BorlabsCookie .col-sm-5{flex:0 0 41.66666667%;max-width:41.66666667%}.BorlabsCookie .col-sm-6{flex:0 0 50%;max-width:50%}.BorlabsCookie .col-sm-7{flex:0 0 58.33333333%;max-width:58.33333333%}.BorlabsCookie .col-sm-8{flex:0 0 66.66666667%;max-width:66.66666667%}.BorlabsCookie .col-sm-9{flex:0 0 75%;max-width:75%}.BorlabsCookie .col-sm-10{flex:0 0 83.33333333%;max-width:83.33333333%}.BorlabsCookie .col-sm-11{flex:0 0 91.66666667%;max-width:91.66666667%}.BorlabsCookie .col-sm-12{flex:0 0 100%;max-width:100%}}@media(min-width: 768px){.BorlabsCookie .col-md{flex-basis:0;flex-grow:1;max-width:100%}.BorlabsCookie .col-md-1{flex:0 0 8.33333333%;max-width:8.33333333%}.BorlabsCookie .col-md-2{flex:0 0 16.66666667%;max-width:16.66666667%}.BorlabsCookie .col-md-3{flex:0 0 25%;max-width:25%}.BorlabsCookie .col-md-4{flex:0 0 33.33333333%;max-width:33.33333333%}.BorlabsCookie .col-md-5{flex:0 0 41.66666667%;max-width:41.66666667%}.BorlabsCookie .col-md-6{flex:0 0 50%;max-width:50%}.BorlabsCookie .col-md-7{flex:0 0 58.33333333%;max-width:58.33333333%}.BorlabsCookie .col-md-8{flex:0 0 66.66666667%;max-width:66.66666667%}.BorlabsCookie .col-md-9{flex:0 0 75%;max-width:75%}.BorlabsCookie .col-md-10{flex:0 0 83.33333333%;max-width:83.33333333%}.BorlabsCookie .col-md-11{flex:0 0 91.66666667%;max-width:91.66666667%}.BorlabsCookie .col-md-12{flex:0 0 100%;max-width:100%}}@media(min-width: 992px){.BorlabsCookie .col-lg{flex-basis:0;flex-grow:1;max-width:100%}.BorlabsCookie .col-lg-1{flex:0 0 8.33333333%;max-width:8.33333333%}.BorlabsCookie .col-lg-2{flex:0 0 16.66666667%;max-width:16.66666667%}.BorlabsCookie .col-lg-3{flex:0 0 25%;max-width:25%}.BorlabsCookie .col-lg-4{flex:0 0 33.33333333%;max-width:33.33333333%}.BorlabsCookie .col-lg-5{flex:0 0 41.66666667%;max-width:41.66666667%}.BorlabsCookie .col-lg-6{flex:0 0 50%;max-width:50%}.BorlabsCookie .col-lg-7{flex:0 0 58.33333333%;max-width:58.33333333%}.BorlabsCookie .col-lg-8{flex:0 0 66.66666667%;max-width:66.66666667%}.BorlabsCookie .col-lg-9{flex:0 0 75%;max-width:75%}.BorlabsCookie .col-lg-10{flex:0 0 83.33333333%;max-width:83.33333333%}.BorlabsCookie .col-lg-11{flex:0 0 91.66666667%;max-width:91.66666667%}.BorlabsCookie .col-lg-12{flex:0 0 100%;max-width:100%}}@media(min-width: 1200px){.BorlabsCookie .col-xl{flex-basis:0;flex-grow:1;max-width:100%}.BorlabsCookie .col-xl-1{flex:0 0 8.33333333%;max-width:8.33333333%}.BorlabsCookie .col-xl-2{flex:0 0 16.66666667%;max-width:16.66666667%}.BorlabsCookie .col-xl-3{flex:0 0 25%;max-width:25%}.BorlabsCookie .col-xl-4{flex:0 0 33.33333333%;max-width:33.33333333%}.BorlabsCookie .col-xl-5{flex:0 0 41.66666667%;max-width:41.66666667%}.BorlabsCookie .col-xl-6{flex:0 0 50%;max-width:50%}.BorlabsCookie .col-xl-7{flex:0 0 58.33333333%;max-width:58.33333333%}.BorlabsCookie .col-xl-8{flex:0 0 66.66666667%;max-width:66.66666667%}.BorlabsCookie .col-xl-9{flex:0 0 75%;max-width:75%}.BorlabsCookie .col-xl-10{flex:0 0 83.33333333%;max-width:83.33333333%}.BorlabsCookie .col-xl-11{flex:0 0 91.66666667%;max-width:91.66666667%}.BorlabsCookie .col-xl-12{flex:0 0 100%;max-width:100%}}.BorlabsCookie .d-block{display:block !important}.BorlabsCookie .d-flex{display:flex !important}@media(min-width: 576px){.BorlabsCookie .d-sm-block{display:block !important}.BorlabsCookie .d-sm-flex{display:flex !important}}@media(min-width: 768px){.BorlabsCookie .d-md-block{display:block !important}.BorlabsCookie .d-md-flex{display:flex !important}}@media(min-width: 992px){.BorlabsCookie .d-lg-block{display:block !important}.BorlabsCookie .d-lg-flex{display:flex !important}}@media(min-width: 1200px){.BorlabsCookie .d-xl-block{display:block !important}.BorlabsCookie .d-xl-flex{display:flex !important}}.BorlabsCookie .flex-row{flex-direction:row !important}.BorlabsCookie .flex-fill{flex:1 1 auto !important}.BorlabsCookie .justify-content-between{justify-content:space-between !important}.BorlabsCookie .align-items-start{align-items:flex-start !important}.BorlabsCookie .align-items-end{align-items:flex-end !important}.BorlabsCookie .align-items-center{align-items:center !important}.BorlabsCookie .align-items-baseline{align-items:baseline !important}.BorlabsCookie .align-items-stretch{align-items:stretch !important}@media(min-width: 576px){.BorlabsCookie .flex-sm-row{flex-direction:row !important}.BorlabsCookie .flex-sm-fill{flex:1 1 auto !important}.BorlabsCookie .justify-content-sm-between{justify-content:space-between !important}.BorlabsCookie .align-items-sm-start{align-items:flex-start !important}.BorlabsCookie .align-items-sm-end{align-items:flex-end !important}.BorlabsCookie .align-items-sm-center{align-items:center !important}.BorlabsCookie .align-items-sm-baseline{align-items:baseline !important}.BorlabsCookie .align-items-sm-stretch{align-items:stretch !important}}@media(min-width: 768px){.BorlabsCookie .flex-md-row{flex-direction:row !important}.BorlabsCookie .flex-md-fill{flex:1 1 auto !important}.BorlabsCookie .justify-content-md-between{justify-content:space-between !important}.BorlabsCookie .align-items-md-start{align-items:flex-start !important}.BorlabsCookie .align-items-md-end{align-items:flex-end !important}.BorlabsCookie .align-items-md-center{align-items:center !important}.BorlabsCookie .align-items-md-baseline{align-items:baseline !important}.BorlabsCookie .align-items-md-stretch{align-items:stretch !important}}@media(min-width: 992px){.BorlabsCookie .flex-lg-row{flex-direction:row !important}.BorlabsCookie .flex-lg-fill{flex:1 1 auto !important}.BorlabsCookie .justify-content-lg-between{justify-content:space-between !important}.BorlabsCookie .align-items-lg-start{align-items:flex-start !important}.BorlabsCookie .align-items-lg-end{align-items:flex-end !important}.BorlabsCookie .align-items-lg-center{align-items:center !important}.BorlabsCookie .align-items-lg-baseline{align-items:baseline !important}.BorlabsCookie .align-items-lg-stretch{align-items:stretch !important}}@media(min-width: 1200px){.BorlabsCookie .flex-xl-row{flex-direction:row !important}.BorlabsCookie .flex-xl-fill{flex:1 1 auto !important}.BorlabsCookie .justify-content-xl-between{justify-content:space-between !important}.BorlabsCookie .align-items-xl-start{align-items:flex-start !important}.BorlabsCookie .align-items-xl-end{align-items:flex-end !important}.BorlabsCookie .align-items-xl-center{align-items:center !important}.BorlabsCookie .align-items-xl-baseline{align-items:baseline !important}.BorlabsCookie .align-items-xl-stretch{align-items:stretch !important}}.BorlabsCookie .w-25{width:25% !important}.BorlabsCookie .w-50{width:50% !important}.BorlabsCookie .w-75{width:75% !important}.BorlabsCookie .w-100{width:100% !important}.BorlabsCookie .w-auto{width:auto !important}.BorlabsCookie .h-25{height:25% !important}.BorlabsCookie .h-50{height:50% !important}.BorlabsCookie .h-75{height:75% !important}.BorlabsCookie .h-100{height:100% !important}.BorlabsCookie .h-auto{height:auto !important}.BorlabsCookie .mw-100{max-width:100% !important}.BorlabsCookie .mh-100{max-height:100% !important}.BorlabsCookie .min-vw-100{min-width:100vw !important}.BorlabsCookie .min-vh-100{min-height:100vh !important}.BorlabsCookie .vw-100{width:100vw !important}.BorlabsCookie .vh-100{height:100vh !important}.BorlabsCookie ._brlbs-animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.BorlabsCookie ._brlbs-animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.BorlabsCookie ._brlbs-animated.delay-1s{-webkit-animation-delay:1s;animation-delay:1s}.BorlabsCookie ._brlbs-animated.delay-2s{-webkit-animation-delay:2s;animation-delay:2s}.BorlabsCookie ._brlbs-animated.delay-3s{-webkit-animation-delay:3s;animation-delay:3s}.BorlabsCookie ._brlbs-animated.delay-4s{-webkit-animation-delay:4s;animation-delay:4s}.BorlabsCookie ._brlbs-animated.delay-5s{-webkit-animation-delay:5s;animation-delay:5s}.BorlabsCookie ._brlbs-animated.fast{-webkit-animation-duration:800ms;animation-duration:800ms}.BorlabsCookie ._brlbs-animated.faster{-webkit-animation-duration:500ms;animation-duration:500ms}.BorlabsCookie ._brlbs-animated.slow{-webkit-animation-duration:2s;animation-duration:2s}.BorlabsCookie ._brlbs-animated.slower{-webkit-animation-duration:3s;animation-duration:3s}@media(print), (prefers-reduced-motion: reduce){.BorlabsCookie ._brlbs-animated{-webkit-animation-duration:1ms !important;animation-duration:1ms !important;transition-duration:1ms !important;-webkit-animation-iteration-count:1 !important;animation-iteration-count:1 !important}}.BorlabsCookie._brlbs-switch-consent{align-items:center;display:flex;font-size:inherit}.BorlabsCookie._brlbs-switch-consent ._brlbs-btn-switch--textRight{margin-right:2em}.BorlabsCookie ._brlbs-title{display:inline-block;vertical-align:middle;margin-bottom:0}.BorlabsCookie ._brlbs-title::before{content:"|";display:inline-block;margin:0 .25rem 0 0}.BorlabsCookie ._brlbs-checkbox{color:inherit;cursor:pointer;display:block;padding-left:2em;position:relative}.BorlabsCookie ._brlbs-checkbox input{position:absolute;opacity:0 !important;width:auto;z-index:-1}.BorlabsCookie ._brlbs-checkbox input:checked~._brlbs-checkbox-indicator::after{opacity:1}.BorlabsCookie ._brlbs-checkbox input:disabled~._brlbs-checkbox-indicator::after{opacity:1}.BorlabsCookie ._brlbs-checkbox ._brlbs-checkbox-indicator{border-style:solid;border-width:2px;padding:0 !important;position:absolute;left:0;top:0;height:20px;width:20px;transition:.25s}.BorlabsCookie ._brlbs-checkbox ._brlbs-checkbox-indicator::after{content:"";border-style:solid;border-width:0 2px 2px 0;border-radius:1px;position:absolute;left:5px;top:1px;height:11px;width:6px;transform:rotate(45deg);opacity:0}.BorlabsCookie ._brlbs-btn-switch{position:relative;display:inline-block;margin:0;width:50px;height:26px;vertical-align:middle}.BorlabsCookie ._brlbs-btn-switch input{opacity:0;width:0;height:0}.BorlabsCookie ._brlbs-btn-switch input:checked+._brlbs-slider{background-color:#2295f3}.BorlabsCookie ._brlbs-btn-switch input:checked+._brlbs-slider:before{transform:translateX(24px)}.BorlabsCookie ._brlbs-btn-switch ._brlbs-slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#bbc0c7;transition:.4s}.BorlabsCookie ._brlbs-btn-switch ._brlbs-slider::before{position:absolute;content:"";height:18px;width:18px;left:4px;bottom:4px;background-color:#fff;transition:.4s}.BorlabsCookie ._brlbs-btn-switch-status{position:absolute;top:50%;right:calc(100% + 6px);transform:translateY(-50%)}.BorlabsCookie ._brlbs-btn-switch--textRight ._brlbs-btn-switch-status{right:auto;left:calc(100% + 6px)}.BorlabsCookie ._brlbs-btn-switch-status::before{content:attr(data-inactive);white-space:nowrap}.BorlabsCookie ._brlbs-btn-switch>input:checked~._brlbs-btn-switch-status::before{content:attr(data-active)}#BorlabsCookieBox a{font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;text-decoration:inherit;text-transform:inherit;word-spacing:inherit}#BorlabsCookieBox a:focus{outline:Highlight !important;outline-color:-webkit-focus-ring-color !important;outline-style:solid !important;outline-width:2px !important}#BorlabsCookieBox:not(._brlbs-keyboard) a:focus{outline:0 !important}#BorlabsCookieBox ._brlbs-animated{visibility:visible}#BorlabsCookieBox .container{background:inherit;display:block;float:none;padding-left:15px;padding-right:15px;margin-left:auto;margin-right:auto;min-height:auto;position:inherit}#BorlabsCookieBox ._brlbs-bar .container{overflow:auto !important;width:100% !important;max-width:none !important;margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px}#BorlabsCookieBox ._brlbs-box .container{overflow:auto !important;width:auto !important}#BorlabsCookieBox .container::before{display:initial}#BorlabsCookieBox .container::after{content:" ";display:block;height:2px}#BorlabsCookieBox .container .row{background:inherit;color:inherit;display:flex;min-width:1px;pointer-events:inherit;width:auto;max-width:none}#BorlabsCookieBox .container .row.no-gutters{margin-left:0;margin-right:0}#BorlabsCookieBox .container .row::before,#BorlabsCookieBox .container .row::after{display:initial}#BorlabsCookieBox .bcac-item{margin:.5em 0;padding:.5em}#BorlabsCookieBox .bcac-item ._brlbs-h4{font-size:1.25em;margin:0 0 .25em 0}#BorlabsCookieBox .bcac-item p{font-size:.875em}#BorlabsCookieBox .bcac-item p,#BorlabsCookieBox .bcac-item span{color:inherit}#BorlabsCookieBox>div{display:none}#BorlabsCookieBox>div.show-cookie-box{display:flex}#BorlabsCookieBox>div:not(._brlbs-block-content){position:absolute;width:100%;z-index:999999}#BorlabsCookieBox>div:not(._brlbs-block-content).top-left{top:0}#BorlabsCookieBox>div:not(._brlbs-block-content).top-center{top:0}#BorlabsCookieBox>div:not(._brlbs-block-content).top-right{top:0}#BorlabsCookieBox>div:not(._brlbs-block-content).middle-left{top:50%}#BorlabsCookieBox>div:not(._brlbs-block-content).middle-center{top:50%}#BorlabsCookieBox>div:not(._brlbs-block-content).middle-right{top:50%}#BorlabsCookieBox>div:not(._brlbs-block-content).bottom-left{bottom:0}#BorlabsCookieBox>div:not(._brlbs-block-content).bottom-center{bottom:0}#BorlabsCookieBox>div:not(._brlbs-block-content).bottom-right{bottom:0}#BorlabsCookieBox h3,#BorlabsCookieBox ._brlbs-h3{background:inherit;color:inherit;font-family:inherit;font-size:1.625em;line-height:1.125em;word-break:break-all}#BorlabsCookieBox ul{display:flex;flex-flow:wrap;justify-content:center;list-style:none;margin:.9375em 0;padding:0}#BorlabsCookieBox ul li{color:inherit;font-family:inherit;font-size:1em;line-height:1.25em;list-style:none;margin:0 .9375em .375em 0}#BorlabsCookieBox ul li:last-child{margin:0}#BorlabsCookieBox ul li::before{content:"●";margin:0 4px 0 0}#BorlabsCookieBox p{color:inherit;font-family:inherit;font-size:1em;line-height:1.4em;margin:.9375em 0}#BorlabsCookieBox p:last-child{margin:0}#BorlabsCookieBox p ._brlbs-paragraph:last-child{margin-bottom:0}#BorlabsCookieBox ._brlbs-flex-center{display:flex;align-items:center;justify-content:center}#BorlabsCookieBox ._brlbs-flex-center p{margin-bottom:0}#BorlabsCookieBox ._brlbs-flex-left{display:flex;align-items:center;justify-content:left;margin:0 0 .9375em 0}#BorlabsCookieBox ._brlbs-actions{display:inline}#BorlabsCookieBox ._brlbs-accept{font-family:inherit;text-align:center}#BorlabsCookieBox ._brlbs-block-content{background:rgba(0,0,0,0);left:0;position:fixed;height:100%;top:0;width:100%;z-index:999999}#BorlabsCookieBox ._brlbs-block-content._brlbs-bg-animation{transition:background-color 250ms linear}#BorlabsCookieBox ._brlbs-block-content._brlbs-bg-dark{background:rgba(0,0,0,.6)}#BorlabsCookieBox ._brlbs-branding{font-family:inherit;font-size:.75em;margin:0}#BorlabsCookieBox ._brlbs-branding a{text-decoration:none}#BorlabsCookieBox ._brlbs-branding img{display:inline-block;max-height:16px;max-width:16px;vertical-align:middle}#BorlabsCookieBox ._brlbs-btn{display:inline-block;font-family:inherit;font-size:1.25em;padding:.75em 2em;text-decoration:none;transition:background-color 125ms linear}#BorlabsCookieBox ._brlbs-paragraph{display:block;margin-bottom:.6em}#BorlabsCookieBox ._brlbs-paragraph._brlbs-text-technology{display:inline}#BorlabsCookieBox ._brlbs-paragraph._brlbs-text-personal-data{display:inline}#BorlabsCookieBox ._brlbs-paragraph._brlbs-text-more-information{display:inline}#BorlabsCookieBox ._brlbs-paragraph._brlbs-text-no-commitment{display:inline}#BorlabsCookieBox ._brlbs-paragraph._brlbs-text-revoke{display:inline}#BorlabsCookieBox ._brlbs-paragraph._brlbs-text-individual-settings{display:inline}#BorlabsCookieBox ._brlbs-paragraph._brlbs-text-non-eu-data-transfer{margin-top:.6em}#BorlabsCookieBox .cookie-logo{height:auto;max-width:48px;padding:0 8px 0 0;vertical-align:middle;width:100%}#BorlabsCookieBox ._brlbs-legal{font-family:inherit;font-size:.75em;text-align:center}#BorlabsCookieBox ._brlbs-manage{font-family:inherit;font-size:.75em;text-align:center}#BorlabsCookieBox ._brlbs-refuse{font-family:inherit;font-size:.75em;text-align:center}#BorlabsCookieBox ._brlbs-refuse a{color:inherit}#BorlabsCookieBox ._brlbs-manage-btn{font-family:inherit;text-align:center}#BorlabsCookieBox ._brlbs-manage-btn a{font-size:1.25em;color:inherit}#BorlabsCookieBox ._brlbs-manage-btn a:hover{color:inherit}#BorlabsCookieBox ._brlbs-refuse-btn{font-family:inherit;text-align:center}#BorlabsCookieBox ._brlbs-refuse-btn a{font-size:1.25em;color:inherit}#BorlabsCookieBox ._brlbs-refuse-btn a:hover{color:inherit}#BorlabsCookieBox .top-left{align-items:flex-start;justify-content:flex-start}#BorlabsCookieBox .top-center{align-items:flex-start;justify-content:center}#BorlabsCookieBox .top-right{align-items:flex-start;justify-content:flex-end}#BorlabsCookieBox .middle-left{align-items:center;justify-content:flex-start}#BorlabsCookieBox .middle-center{align-items:center;justify-content:center}#BorlabsCookieBox .middle-right{align-items:center;justify-content:flex-end}#BorlabsCookieBox .bottom-left{align-items:flex-end;justify-content:flex-start}#BorlabsCookieBox .bottom-center{align-items:flex-end;justify-content:center}#BorlabsCookieBox .bottom-right{align-items:flex-end;justify-content:flex-end}#BorlabsCookieBox ._brlbs-box,#BorlabsCookieBox ._brlbs-bar{box-shadow:0 4px 8px rgba(0,0,0,.2);padding:15px 0;max-height:100vh;overflow:auto}#BorlabsCookieBox ._brlbs-bar-wrap{display:block;max-width:100%;width:100%;z-index:1000000}#BorlabsCookieBox ._brlbs-bar-wrap._brlbs-position-fixed{position:fixed}#BorlabsCookieBox ._brlbs-bar-wrap .cookie-preference ._brlbs-flex-center{justify-content:left}#BorlabsCookieBox ._brlbs-bar._brlbs-bar-slim .cookie-box p{margin:0}#BorlabsCookieBox ._brlbs-bar._brlbs-bar-slim .cookie-box p._brlbs-accept{margin:.9375em 0}#BorlabsCookieBox ._brlbs-bar._brlbs-bar-slim ._brlbs-actions-mobile{display:none}#BorlabsCookieBox ._brlbs-bar ul{justify-content:center;margin:.5em 0}#BorlabsCookieBox ._brlbs-bar ._brlbs-no-padding-right{padding-right:0}#BorlabsCookieBox ._brlbs-bar ._brlbs-separator::before{content:"|";display:inline-block;margin:0 2px}#BorlabsCookieBox ._brlbs-bar .cookie-logo{padding:0 8px 0 0;vertical-align:middle;width:100%}#BorlabsCookieBox ._brlbs-bar ._brlbs-legal{text-align:center}#BorlabsCookieBox ._brlbs-box-wrap{display:block;max-width:550px;width:100%;z-index:1000000}#BorlabsCookieBox ._brlbs-box-wrap._brlbs-position-fixed{position:fixed}#BorlabsCookieBox ._brlbs-box._brlbs-box-slim>.container ._brlbs-manage{margin:0}#BorlabsCookieBox ._brlbs-box._brlbs-box-slim>.container ._brlbs-refuse{margin:.5em 0 0 0}#BorlabsCookieBox ._brlbs-box ._brlbs-separator::before{content:"|";display:inline-block;margin:0 2px}#BorlabsCookieBox .cookie-preference .container.not-visible{height:0}#BorlabsCookieBox .cookie-preference table{margin:1em 0 0 0;width:100%}#BorlabsCookieBox .cookie-preference table tr td,#BorlabsCookieBox .cookie-preference table tr th{border-bottom:1px solid}#BorlabsCookieBox .cookie-preference table tr:last-child td,#BorlabsCookieBox .cookie-preference table tr:last-child th{border-bottom:0}#BorlabsCookieBox .cookie-preference table th{text-align:left;width:40%}#BorlabsCookieBox .cookie-preference table td{text-align:left}#BorlabsCookieBox .cookie-preference table td,#BorlabsCookieBox .cookie-preference table th{font-size:.875em;padding:.25em .5em}#BorlabsCookieBox .cookie-preference ._brlbs-accept{text-align:left}#BorlabsCookieBox .cookie-preference ._brlbs-btn{font-size:1em;margin:0 0 .9375em 0;padding:.75em 1.5em}#BorlabsCookieBox .cookie-preference ._brlbs-legal{text-align:right}#BorlabsCookieBox .cookie-preference ._brlbs-pp-url{overflow:hidden;text-overflow:ellipsis;width:100%;max-width:0}#BorlabsCookieBox .cookie-preference ._brlbs-refuse{margin:0 0 .9375em 0;text-align:right}#BorlabsCookieBox .cookie-preference ._brlbs-separator::before{content:"|";display:inline-block;margin:0 2px}#BorlabsCookieBox ._brlbs-bar-advanced ul,#BorlabsCookieBox ._brlbs-box-advanced ul{justify-content:space-between}#BorlabsCookieBox ._brlbs-bar-advanced ul li,#BorlabsCookieBox ._brlbs-box-advanced ul li{line-height:1.375em;margin:0 .9375em .875em 0}#BorlabsCookieBox ._brlbs-bar-advanced ul li::before,#BorlabsCookieBox ._brlbs-box-advanced ul li::before{content:"";margin:0}#BorlabsCookieBox ._brlbs-box-plus-wrap{max-width:768px}#BorlabsCookieBox ._brlbs-box-plus #CookieBoxTextDescription{padding-top:10px;overflow:visible;max-height:100%}#BorlabsCookieBox ._brlbs-box-plus ._brlbs-legal{padding-top:10px}#BorlabsCookieBox ._brlbs-box-plus ._brlbs-button-area{padding-top:.475em}#BorlabsCookieBox ._brlbs-box-plus ._brlbs-button-area p:last-child{margin:.475em 0}#BorlabsCookieBox ._brlbs-box-plus ul{display:block}#BorlabsCookieBox ._brlbs-box-plus ul li{line-height:1.375em;padding:.475em .9375em .475em 0}#BorlabsCookieBox ._brlbs-box-plus ul li ._brlbs-checkbox{font-weight:600}#BorlabsCookieBox ._brlbs-box-plus ul li ._brlbs-service-group-description{padding-top:8px}#BorlabsCookieBox ._brlbs-box-plus ul li::before{content:"";margin:0}#CookieBoxTextDescription{overflow:auto;max-height:50vh}#CookiePrefDescription{overflow:auto;max-height:40vh}.BorlabsCookie ._brlbs-content-blocker{line-height:1.5em}.BorlabsCookie ._brlbs-content-blocker ._brlbs-caption{padding:1em}.BorlabsCookie ._brlbs-content-blocker ._brlbs-caption label{color:inherit}.BorlabsCookie ._brlbs-content-blocker ._brlbs-caption label input{background:none;border:0;display:inline-block;height:auto;margin:inherit;position:static;vertical-align:middle;width:auto;-webkit-appearance:auto}.BorlabsCookie ._brlbs-content-blocker ._brlbs-caption label input::before{content:""}.BorlabsCookie ._brlbs-content-blocker ._brlbs-caption label small{vertical-align:middle}.BorlabsCookie ._brlbs-content-blocker ._brlbs-caption p{margin-bottom:1em}.BorlabsCookie ._brlbs-content-blocker ._brlbs-caption p:last-child{margin:0}.BorlabsCookie ._brlbs-content-blocker ._brlbs-caption small{font-size:.875em}.BorlabsCookie ._brlbs-content-blocker ._brlbs-default{background:#efefef;margin-bottom:1em;padding:1em;text-align:center}.BorlabsCookie ._brlbs-content-blocker ._brlbs-default label input{vertical-align:middle;width:auto}.BorlabsCookie ._brlbs-content-blocker ._brlbs-default p{margin-bottom:1em}.BorlabsCookie ._brlbs-content-blocker ._brlbs-default p:last-child{margin:0}.BorlabsCookie ._brlbs-content-blocker ._brlbs-default small{font-size:.875em}.BorlabsCookie ._brlbs-content-blocker ._brlbs-embed{margin-bottom:1em;position:relative;display:inline-block;overflow:hidden}.BorlabsCookie ._brlbs-content-blocker ._brlbs-embed ._brlbs-thumbnail{display:block;max-width:100%}.BorlabsCookie ._brlbs-content-blocker ._brlbs-embed ._brlbs-caption{top:50%;left:0;position:absolute;width:100%;text-align:center;transform:translateY(-50%)}.BorlabsCookie ._brlbs-content-blocker ._brlbs-embed a._brlbs-btn{display:inline-flex;align-items:center;justify-content:center}.BorlabsCookie ._brlbs-content-blocker ._brlbs-embed a._brlbs-btn._brlbs-icon-play-black::before{background:url("data:image/svg+xml,%3Csvg version=%271.1%27 xmlns=%27http://www.w3.org/2000/svg%27 xmlns:xlink=%27http://www.w3.org/1999/xlink%27 x=%270%27 y=%270%27 width=%2778%27 height=%2778%27 viewBox=%270, 0, 78, 78%27%3E%3Cg id=%27Layer_1%27%3E%3Cg%3E%3Cpath d=%27M7.5,71.5 L7.5,7.5 L55.5,37.828 L7.5,71.5%27 fill=%27%23000000%27/%3E%3Cpath d=%27M7.5,71.5 L7.5,7.5 L55.5,37.828 L7.5,71.5%27 fill-opacity=%270%27 stroke=%27%23000000%27 stroke-width=%2712%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27/%3E%3C/g%3E%3C/g%3E%3C/svg%3E") no-repeat center;background-size:contain;content:" ";display:inline-block;margin-right:4px;height:1.142857143em;width:.857142857em}.BorlabsCookie ._brlbs-content-blocker ._brlbs-embed a._brlbs-btn._brlbs-icon-play-white::before{background:url("data:image/svg+xml,%3Csvg version=%271.1%27 xmlns=%27http://www.w3.org/2000/svg%27 xmlns:xlink=%27http://www.w3.org/1999/xlink%27 x=%270%27 y=%270%27 width=%2778%27 height=%2778%27 viewBox=%270, 0, 78, 78%27%3E%3Cg id=%27Layer_1%27%3E%3Cg%3E%3Cpath d=%27M7.5,71.5 L7.5,7.5 L55.5,37.828 L7.5,71.5%27 fill=%27%23ffffff%27/%3E%3Cpath d=%27M7.5,71.5 L7.5,7.5 L55.5,37.828 L7.5,71.5%27 fill-opacity=%270%27 stroke=%27%23ffffff%27 stroke-width=%2712%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27/%3E%3C/g%3E%3C/g%3E%3C/svg%3E") no-repeat center;background-size:contain;content:" ";display:inline-block;margin-right:4px;height:1.142857143em;width:.857142857em}.BorlabsCookie ._brlbs-content-blocker ._brlbs-btn{display:inline-block;font-family:inherit;padding:.5em 1em;text-decoration:none;transition:background-color 125ms linear}._brlbs-fluid-width-video-wrapper{padding:56.2963% 0 0 0;position:relative;width:100%}._brlbs-fluid-width-video-wrapper iframe{position:absolute;top:0;left:0;width:100%;height:100%}.fusion-video .BorlabsCookie{top:0;left:0;position:absolute}.bricks-video-wrapper .BorlabsCookie,.brxe-video .BorlabsCookie{position:absolute;width:100%;height:100%;top:0}.bricks-video-wrapper .BorlabsCookie ._brlbs-embed,.brxe-video .BorlabsCookie ._brlbs-embed{width:100%}.bricks-video-wrapper .BorlabsCookie ._brlbs-embed ._brlbs-thumbnail,.brxe-video .BorlabsCookie ._brlbs-embed ._brlbs-thumbnail{width:100%}.wp-embed-responsive .wp-embed-aspect-16-9 .wp-block-embed__wrapper .BorlabsCookie{top:0;left:0;position:absolute}.wpb_video_widget .wpb_video_wrapper .BorlabsCookie{display:block;height:100%;left:0;margin:0;position:absolute;top:0;width:100%}.wpb_wrapper .fb_type_standard{height:auto}#BorlabsCookieBoxWidget{position:fixed;transition:all 500ms ease;opacity:1;line-height:0;z-index:999998;padding:20px}#BorlabsCookieBoxWidget:hover{opacity:.8}#BorlabsCookieBoxWidget svg{width:48px;height:48px;filter:drop-shadow(0 0 4px rgba(0, 0, 0, 0.2))}#BorlabsCookieBoxWidget.bottom-left{left:0;bottom:0}#BorlabsCookieBoxWidget.bottom-right{bottom:0;right:0}@media(max-width: 424px){#BorlabsCookieBox ._brlbs-bar._brlbs-bar-slim ._brlbs-separator::before{content:"";display:block;margin:0}}@media(min-width: 576px){#BorlabsCookieBox ._brlbs-bar ul.show-cookie-logo{margin:.5em 0 0 16.6666666667%}}@media(max-width: 767px){#BorlabsCookieBox ._brlbs-box,#BorlabsCookieBox ._brlbs-bar{max-height:85vh}#BorlabsCookieBox ._brlbs-box-plus-wrap{max-width:550px}#BorlabsCookieBox ._brlbs-bar._brlbs-bar-slim p{margin:0 0 .5em 0}#BorlabsCookieBox ._brlbs-bar._brlbs-bar-slim ._brlbs-actions{display:none}#BorlabsCookieBox ._brlbs-bar._brlbs-bar-slim p._brlbs-actions-mobile{display:block;margin:.9375em 0;text-align:center}#BorlabsCookieBox ._brlbs-bar .align-items-center{align-items:flex-start !important}#BorlabsCookieBox .cookie-preference ._brlbs-accept,#BorlabsCookieBox .cookie-preference ._brlbs-refuse{text-align:ceng $separator HTML or text to separate the tags. Default "\n" (newline). * @type string $orderby Value to order tags by. Accepts 'name' or 'count'. * Default 'name'. The {@see 'tag_cloud_sort'} filter * can also affect how tags are sorted. * @type string $order How to order the tags. Accepts 'ASC' (ascending), * 'DESC' (descending), or 'RAND' (random). Default 'ASC'. * @type int|bool $filter Whether to enable filtering of the final output * via {@see 'wp_generate_tag_cloud'}. Default 1. * @type array $topic_count_text Nooped plural text from _n_noop() to supply to * tag counts. Default null. * @type callable $topic_count_text_callback Callback used to generate nooped plural text for * tag counts based on the count. Default null. * @type callable $topic_count_scale_callback Callback used to determine the tag count scaling * value. Default default_topic_count_scale(). * @type bool|int $show_count Whether to display the tag counts. Default 0. Accepts * 0, 1, or their bool equivalents. * } * @return string|string[] Tag cloud as a string or an array, depending on 'format' argument. */ function wp_generate_tag_cloud( $tags, $args = '' ) { $defaults = array( 'smallest' => 8, 'largest' => 22, 'unit' => 'pt', 'number' => 0, 'format' => 'flat', 'separator' => "\n", 'orderby' => 'name', 'order' => 'ASC', 'topic_count_text' => null, 'topic_count_text_callback' => null, 'topic_count_scale_callback' => 'default_topic_count_scale', 'filter' => 1, 'show_count' => 0, ); $args = wp_parse_args( $args, $defaults ); $return = ( 'array' === $args['format'] ) ? array() : ''; if ( empty( $tags ) ) { return $return; } // Juggle topic counts. if ( isset( $args['topic_count_text'] ) ) { // First look for nooped plural support via topic_count_text. $translate_nooped_plural = $args['topic_count_text']; } elseif ( ! empty( $args['topic_count_text_callback'] ) ) { // Look for the alternative callback style. Ignore the previous default. if ( 'default_topic_count_text' === $args['topic_count_text_callback'] ) { /* translators: %s: Number of items (tags). */ $translate_nooped_plural = _n_noop( '%s item', '%s items' ); } else { $translate_nooped_plural = false; } } elseif ( isset( $args['single_text'] ) && isset( $args['multiple_text'] ) ) { // If no callback exists, look for the old-style single_text and multiple_text arguments. // phpcs:ignore WordPress.WP.I18n.NonSingularStringLiteralSingular,WordPress.WP.I18n.NonSingularStringLiteralPlural $translate_nooped_plural = _n_noop( $args['single_text'], $args['multiple_text'] ); } else { // This is the default for when no callback, plural, or argument is passed in. /* translators: %s: Number of items (tags). */ $translate_nooped_plural = _n_noop( '%s item', '%s items' ); } /** * Filters how the items in a tag cloud are sorted. * * @since 2.8.0 * * @param WP_Term[] $tags Ordered array of terms. * @param array $args An array of tag cloud arguments. */ $tags_sorted = apply_filters( 'tag_cloud_sort', $tags, $args ); if ( empty( $tags_sorted ) ) { return $return; } if ( $tags_sorted !== $tags ) { $tags = $tags_sorted; unset( $tags_sorted ); } else { if ( 'RAND' === $args['order'] ) { shuffle( $tags ); } else { // SQL cannot save you; this is a second (potentially different) sort on a subset of data. if ( 'name' === $args['orderby'] ) { uasort( $tags, '_wp_object_name_sort_cb' ); } else { uasort( $tags, '_wp_object_count_sort_cb' ); } if ( 'DESC' === $args['order'] ) { $tags = array_reverse( $tags, true ); } } } if ( $args['number'] > 0 ) { $tags = array_slice( $tags, 0, $args['number'] ); } $counts = array(); $real_counts = array(); // For the alt tag. foreach ( (array) $tags as $key => $tag ) { $real_counts[ $key ] = $tag->count; $counts[ $key ] = call_user_func( $args['topic_count_scale_callback'], $tag->count ); } $min_count = min( $counts ); $spread = max( $counts ) - $min_count; if ( $spread <= 0 ) { $spread = 1; } $font_spread = $args['largest'] - $args['smallest']; if ( $font_spread < 0 ) { $font_spread = 1; } $font_step = $font_spread / $spread; $aria_label = false; /* * Determine whether to output an 'aria-label' attribute with the tag name and count. * When tags have a different font size, they visually convey an important information * that should be available to assistive technologies too. On the other hand, sometimes * themes set up the Tag Cloud to display all tags with the same font size (setting * the 'smallest' and 'largest' arguments to the same value). * In order to always serve the same content to all users, the 'aria-label' gets printed out: * - when tags have a different size * - when the tag count is displayed (for example when users check the checkbox in the * Tag Cloud widget), regardless of the tags font size */ if ( $args['show_count'] || 0 !== $font_spread ) { $aria_label = true; } // Assemble the data that will be used to generate the tag cloud markup. $tags_data = array(); foreach ( $tags as $key => $tag ) { $tag_id = $tag->id ?? $key; $count = $counts[ $key ]; $real_count = $real_counts[ $key ]; if ( $translate_nooped_plural ) { $formatted_count = sprintf( translate_nooped_plural( $translate_nooped_plural, $real_count ), number_format_i18n( $real_count ) ); } else { $formatted_count = call_user_func( $args['topic_count_text_callback'], $real_count, $tag, $args ); } $tags_data[] = array( 'id' => $tag_id, 'url' => $tag->link, 'role' => ( '#' !== $tag->link ) ? '' : ' role="button"', 'name' => $tag->name, 'formatted_count' => $formatted_count, 'slug' => $tag->slug, 'real_count' => $real_count, 'class' => 'tag-cloud-link tag-link-' . $tag_id, 'font_size' => $args['smallest'] + ( $count - $min_count ) * $font_step, 'aria_label' => $aria_label ? sprintf( ' aria-label="%1$s (%2$s)"', esc_attr( $tag->name ), esc_attr( $formatted_count ) ) : '', 'show_count' => $args['show_count'] ? ' (' . $real_count . ')' : '', ); } /** * Filters the data used to generate the tag cloud. * * @since 4.3.0 * * @param array[] $tags_data An array of term data arrays for terms used to generate the tag cloud. */ $tags_data = apply_filters( 'wp_generate_tag_cloud_data', $tags_data ); $a = array(); // Generate the output links array. foreach ( $tags_data as $key => $tag_data ) { $class = $tag_data['class'] . ' tag-link-position-' . ( $key + 1 ); $a[] = sprintf( '%6$s%7$s', esc_url( $tag_data['url'] ), $tag_data['role'], esc_attr( $class ), esc_attr( str_replace( ',', '.', $tag_data['font_size'] ) . $args['unit'] ), $tag_data['aria_label'], esc_html( $tag_data['name'] ), $tag_data['show_count'] ); } switch ( $args['format'] ) { case 'array': $return =& $a; break; case 'list': /* * Force role="list", as some browsers (sic: Safari 10) don't expose to assistive * technologies the default role when the list is styled with `list-style: none`. * Note: this is redundant but doesn't harm. */ $return = "\n"; break; default: $return = implode( $args['separator'], $a ); break; } if ( $args['filter'] ) { /** * Filters the generated output of a tag cloud. * * The filter is only evaluated if a true value is passed * to the $filter argument in wp_generate_tag_cloud(). * * @since 2.3.0 * * @see wp_generate_tag_cloud() * * @param string[]|string $return String containing the generated HTML tag cloud output * or an array of tag links if the 'format' argument * equals 'array'. * @param WP_Term[] $tags An array of terms used in the tag cloud. * @param array $args An array of wp_generate_tag_cloud() arguments. */ return apply_filters( 'wp_generate_tag_cloud', $return, $tags, $args ); } else { return $return; } } /** * Serves as a callback for comparing objects based on name. * * Used with `uasort()`. * * @since 3.1.0 * @access private * * @param object $a The first object to compare. * @param object $b The second object to compare. * @return int Negative number if `$a->name` is less than `$b->name`, zero if they are equal, * or greater than zero if `$a->name` is greater than `$b->name`. */ function _wp_object_name_sort_cb( $a, $b ) { return strnatcasecmp( $a->name, $b->name ); } /** * Serves as a callback for comparing objects based on count. * * Used with `uasort()`. * * @since 3.1.0 * @access private * * @param object $a The first object to compare. * @param object $b The second object to compare. * @return int Negative number if `$a->count` is less than `$b->count`, zero if they are equal, * or greater than zero if `$a->count` is greater than `$b->count`. */ function _wp_object_count_sort_cb( $a, $b ) { return ( $a->count - $b->count ); } // // Helper functions. // /** * Retrieves HTML list content for category list. * * @since 2.1.0 * @since 5.3.0 Formalized the existing `...$args` parameter by adding it * to the function signature. * * @uses Walker_Category to create HTML list content. * @see Walker::walk() for parameters and return description. * * @param mixed ...$args Elements array, maximum hierarchical depth and optional additional arguments. * @return string */ function walk_category_tree( ...$args ) { // The user's options are the third parameter. if ( empty( $args[2]['walker'] ) || ! ( $args[2]['walker'] instanceof Walker ) ) { $walker = new Walker_Category(); } else { /** * @var Walker $walker */ $walker = $args[2]['walker']; } return $walker->walk( ...$args ); } /** * Retrieves HTML dropdown (select) content for category list. * * @since 2.1.0 * @since 5.3.0 Formalized the existing `...$args` parameter by adding it * to the function signature. * * @uses Walker_CategoryDropdown to create HTML dropdown content. * @see Walker::walk() for parameters and return description. * * @param mixed ...$args Elements array, maximum hierarchical depth and optional additional arguments. * @return string */ function walk_category_dropdown_tree( ...$args ) { // The user's options are the third parameter. if ( empty( $args[2]['walker'] ) || ! ( $args[2]['walker'] instanceof Walker ) ) { $walker = new Walker_CategoryDropdown(); } else { /** * @var Walker $walker */ $walker = $args[2]['walker']; } return $walker->walk( ...$args ); } // // Tags. // /** * Retrieves the link to the tag. * * @since 2.3.0 * * @see get_term_link() * * @param int|object $tag Tag ID or object. * @return string Link on success, empty string if tag does not exist. */ function get_tag_link( $tag ) { return get_category_link( $tag ); } /** * Retrieves the tags for a post. * * @since 2.3.0 * * @param int|WP_Post $post Post ID or object. * @return WP_Term[]|false|WP_Error Array of WP_Term objects on success, false if there are no terms * or the post does not exist, WP_Error on failure. */ function get_the_tags( $post = 0 ) { $terms = get_the_terms( $post, 'post_tag' ); /** * Filters the array of tags for the given post. * * @since 2.3.0 * * @see get_the_terms() * * @param WP_Term[]|false|WP_Error $terms Array of WP_Term objects on success, false if there are no terms * or the post does not exist, WP_Error on failure. */ return apply_filters( 'get_the_tags', $terms ); } /** * Retrieves the tags for a post formatted as a string. * * @since 2.3.0 * * @param string $before Optional. String to use before the tags. Default empty. * @param string $sep Optional. String to use between the tags. Default empty. * @param string $after Optional. String to use after the tags. Default empty. * @param int $post_id Optional. Post ID. Defaults to the current post ID. * @return string|false|WP_Error A list of tags on success, false if there are no terms, * WP_Error on failure. */ function get_the_tag_list( $before = '', $sep = '', $after = '', $post_id = 0 ) { $tag_list = get_the_term_list( $post_id, 'post_tag', $before, $sep, $after ); /** * Filters the tags list for a given post. * * @since 2.3.0 * * @param string $tag_list List of tags. * @param string $before String to use before the tags. * @param string $sep String to use between the tags. * @param string $after String to use after the tags. * @param int $post_id Post ID. */ return apply_filters( 'the_tags', $tag_list, $before, $sep, $after, $post_id ); } /** * Displays the tags for a post. * * @since 2.3.0 * * @param string $before Optional. String to use before the tags. Defaults to 'Tags:'. * @param string $sep Optional. String to use between the tags. Default ', '. * @param string $after Optional. String to use after the tags. Default empty. */ function the_tags( $before = null, $sep = ', ', $after = '' ) { if ( null === $before ) { $before = __( 'Tags:' ) . ' '; } $the_tags = get_the_tag_list( $before, $sep, $after ); if ( ! is_wp_error( $the_tags ) ) { echo $the_tags; } } /** * Retrieves tag description. * * @since 2.8.0 * * @param int $tag Optional. Tag ID. Defaults to the current tag ID. * @return string Tag description, if available. */ function tag_description( $tag = 0 ) { return term_description( $tag ); } /** * Retrieves term description. * * @since 2.8.0 * @since 4.9.2 The `$taxonomy` parameter was deprecated. * * @param int $term Optional. Term ID. Defaults to the current term ID. * @param mixed $deprecated Not used. * @return string Term description, if available. */ function term_description( $term = 0, $deprecated = null ) { if ( ! $term && ( is_tax() || is_tag() || is_category() ) ) { $term = get_queried_object(); if ( $term ) { $term = $term->term_id; } } $description = get_term_field( 'description', $term ); return is_wp_error( $description ) ? '' : $description; } /** * Retrieves the terms of the taxonomy that are attached to the post. * * @since 2.5.0 * * @param int|WP_Post $post Post ID or object. * @param string $taxonomy Taxonomy name. * @return WP_Term[]|false|WP_Error Array of WP_Term objects on success, false if there are no terms * or the post does not exist, WP_Error on failure. */ function get_the_terms( $post, $taxonomy ) { $post = get_post( $post ); if ( ! $post ) { return false; } $terms = get_object_term_cache( $post->ID, $taxonomy ); if ( false === $terms ) { $terms = wp_get_object_terms( $post->ID, $taxonomy ); if ( ! is_wp_error( $terms ) ) { $term_ids = wp_list_pluck( $terms, 'term_id' ); wp_cache_add( $post->ID, $term_ids, $taxonomy . '_relationships' ); } } /** * Filters the list of terms attached to the given post. * * @since 3.1.0 * * @param WP_Term[]|WP_Error $terms Array of attached terms, or WP_Error on failure. * @param int $post_id Post ID. * @param string $taxonomy Name of the taxonomy. */ $terms = apply_filters( 'get_the_terms', $terms, $post->ID, $taxonomy ); if ( empty( $terms ) ) { return false; } return $terms; } /** * Retrieves a post's terms as a list with specified format. * * Terms are linked to their respective term listing pages. * * @since 2.5.0 * * @param int $post_id Post ID. * @param string $taxonomy Taxonomy name. * @param string $before Optional. String to use before the terms. Default empty. * @param string $sep Optional. String to use between the terms. Default empty. * @param string $after Optional. String to use after the terms. Default empty. * @return string|false|WP_Error A list of terms on success, false if there are no terms, * WP_Error on failure. */ function get_the_term_list( $post_id, $taxonomy, $before = '', $sep = '', $after = '' ) { $terms = get_the_terms( $post_id, $taxonomy ); if ( is_wp_error( $terms ) ) { return $terms; } if ( empty( $terms ) ) { return false; } $links = array(); foreach ( $terms as $term ) { $link = get_term_link( $term, $taxonomy ); if ( is_wp_error( $link ) ) { return $link; } $links[] = ''; } /** * Filters the term links for a given taxonomy. * * The dynamic portion of the hook name, `$taxonomy`, refers * to the taxonomy slug. * * Possible hook names include: * * - `term_links-category` * - `term_links-post_tag` * - `term_links-post_format` * * @since 2.5.0 * * @param string[] $links An array of term links. */ $term_links = apply_filters( "term_links-{$taxonomy}", $links ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores return $before . implode( $sep, $term_links ) . $after; } /** * Retrieves term parents with separator. * * @since 4.8.0 * * @param int $term_id Term ID. * @param string $taxonomy Taxonomy name. * @param string|array $args { * Array of optional arguments. * * @type string $format Use term names or slugs for display. Accepts 'name' or 'slug'. * Default 'name'. * @type string $separator Separator for between the terms. Default '/'. * @type bool $link Whether to format as a link. Default true. * @type bool $inclusive Include the term to get the parents for. Default true. * } * @return string|WP_Error A list of term parents on success, WP_Error or empty string on failure. */ function get_term_parents_list( $term_id, $taxonomy, $args = array() ) { $list = ''; $term = get_term( $term_id, $taxonomy ); if ( is_wp_error( $term ) ) { return $term; } if ( ! $term ) { return $list; } $term_id = $term->term_id; $defaults = array( 'format' => 'name', 'separator' => '/', 'link' => true, 'inclusive' => true, ); $args = wp_parse_args( $args, $defaults ); foreach ( array( 'link', 'inclusive' ) as $bool ) { $args[ $bool ] = wp_validate_boolean( $args[ $bool ] ); } $parents = get_ancestors( $term_id, $taxonomy, 'taxonomy' ); if ( $args['inclusive'] ) { array_unshift( $parents, $term_id ); } foreach ( array_reverse( $parents ) as $term_id ) { $parent = get_term( $term_id, $taxonomy ); $name = ( 'slug' === $args['format'] ) ? $parent->slug : $parent->name; if ( $args['link'] ) { $list .= '' . $name . '' . $args['separator']; } else { $list .= $name . $args['separator']; } } return $list; } /** * Displays the terms for a post in a list. * * @since 2.5.0 * * @param int $post_id Post ID. * @param string $taxonomy Taxonomy name. * @param string $before Optional. String to use before the terms. Default empty. * @param string $sep Optional. String to use between the terms. Default ', '. * @param string $after Optional. String to use after the terms. Default empty. * @return void|false Void on success, false on failure. */ function the_terms( $post_id, $taxonomy, $before = '', $sep = ', ', $after = '' ) { $term_list = get_the_term_list( $post_id, $taxonomy, $before, $sep, $after ); if ( is_wp_error( $term_list ) ) { return false; } /** * Filters the list of terms to display. * * @since 2.9.0 * * @param string $term_list List of terms to display. * @param string $taxonomy The taxonomy name. * @param string $before String to use before the terms. * @param string $sep String to use between the terms. * @param string $after String to use after the terms. */ echo apply_filters( 'the_terms', $term_list, $taxonomy, $before, $sep, $after ); } /** * Checks if the current post has any of given category. * * The given categories are checked against the post's categories' term_ids, names and slugs. * Categories given as integers will only be checked against the post's categories' term_ids. * * If no categories are given, determines if post has any categories. * * @since 3.1.0 * * @param string|int|array $category Optional. The category name/term_id/slug, * or an array of them to check for. Default empty. * @param int|WP_Post|null $post Optional. Post to check. Defaults to the current post. * @return bool True if the current post has any of the given categories * (or any category, if no category specified). False otherwise. */ function has_category( $category = '', $post = null ) { return has_term( $category, 'category', $post ); } /** * Checks if the current post has any of given tags. * * The given tags are checked against the post's tags' term_ids, names and slugs. * Tags given as integers will only be checked against the post's tags' term_ids. * * If no tags are given, determines if post has any tags. * * For more information on this and similar theme functions, check out * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ * Conditional Tags} article in the Theme Developer Handbook. * * @since 2.6.0 * @since 2.7.0 Tags given as integers are only checked against * the post's tags' term_ids, not names or slugs. * @since 2.7.0 Can be used outside of the WordPress Loop if `$post` is provided. * * @param string|int|array $tag Optional. The tag name/term_id/slug, * or an array of them to check for. Default empty. * @param int|WP_Post|null $post Optional. Post to check. Defaults to the current post. * @return bool True if the current post has any of the given tags * (or any tag, if no tag specified). False otherwise. */ function has_tag( $tag = '', $post = null ) { return has_term( $tag, 'post_tag', $post ); } /** * Checks if the current post has any of given terms. * * The given terms are checked against the post's terms' term_ids, names and slugs. * Terms given as integers will only be checked against the post's terms' term_ids. * * If no terms are given, determines if post has any terms. * * @since 3.1.0 * * @param string|int|array $term Optional. The term name/term_id/slug, * or an array of them to check for. Default empty. * @param string $taxonomy Optional. Taxonomy name. Default empty. * @param int|WP_Post|null $post Optional. Post to check. Defaults to the current post. * @return bool True if the current post has any of the given terms * (or any term, if no term specified). False otherwise. */ function has_term( $term = '', $taxonomy = '', $post = null ) { $post = get_post( $post ); if ( ! $post ) { return false; } $r = is_object_in_term( $post->ID, $taxonomy, $term ); if ( is_wp_error( $r ) ) { return false; } return $r; }