Cookie Notice by dFactory - Version 2.2.2

Version Description

  • Fix: Uncrawlable close notice link
  • Tweak: WordPress 5.9 compatibility
  • Tweak: Prevent displaying the notice in an iframe
  • Tweak: Send site language to a web app on signup
Download this release

Release Info

Developer dfactory
Plugin Icon 128x128 Cookie Notice by dFactory
Version 2.2.2
Comparing to
See all releases

Code changes from version 2.2.1 to 2.2.2

assets/chartjs/chart.min.js ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Chart.js v3.7.0
3
+ * https://www.chartjs.org
4
+ * (c) 2021 Chart.js Contributors
5
+ * Released under the MIT License
6
+ */
7
+ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).Chart=e()}(this,(function(){"use strict";const t="undefined"==typeof window?function(t){return t()}:window.requestAnimationFrame;function e(e,i,s){const n=s||(t=>Array.prototype.slice.call(t));let o=!1,a=[];return function(...s){a=n(s),o||(o=!0,t.call(window,(()=>{o=!1,e.apply(i,a)})))}}function i(t,e){let i;return function(...s){return e?(clearTimeout(i),i=setTimeout(t,e,s)):t.apply(this,s),e}}const s=t=>"start"===t?"left":"end"===t?"right":"center",n=(t,e,i)=>"start"===t?e:"end"===t?i:(e+i)/2,o=(t,e,i,s)=>t===(s?"left":"right")?i:"center"===t?(e+i)/2:e;var a=new class{constructor(){this._request=null,this._charts=new Map,this._running=!1,this._lastDate=void 0}_notify(t,e,i,s){const n=e.listeners[s],o=e.duration;n.forEach((s=>s({chart:t,initial:e.initial,numSteps:o,currentStep:Math.min(i-e.start,o)})))}_refresh(){this._request||(this._running=!0,this._request=t.call(window,(()=>{this._update(),this._request=null,this._running&&this._refresh()})))}_update(t=Date.now()){let e=0;this._charts.forEach(((i,s)=>{if(!i.running||!i.items.length)return;const n=i.items;let o,a=n.length-1,r=!1;for(;a>=0;--a)o=n[a],o._active?(o._total>i.duration&&(i.duration=o._total),o.tick(t),r=!0):(n[a]=n[n.length-1],n.pop());r&&(s.draw(),this._notify(s,i,t,"progress")),n.length||(i.running=!1,this._notify(s,i,t,"complete"),i.initial=!1),e+=n.length})),this._lastDate=t,0===e&&(this._running=!1)}_getAnims(t){const e=this._charts;let i=e.get(t);return i||(i={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,i)),i}listen(t,e,i){this._getAnims(t).listeners[e].push(i)}add(t,e){e&&e.length&&this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){const e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce(((t,e)=>Math.max(t,e._duration)),0),this._refresh())}running(t){if(!this._running)return!1;const e=this._charts.get(t);return!!(e&&e.running&&e.items.length)}stop(t){const e=this._charts.get(t);if(!e||!e.items.length)return;const i=e.items;let s=i.length-1;for(;s>=0;--s)i[s].cancel();e.items=[],this._notify(t,e,Date.now(),"complete")}remove(t){return this._charts.delete(t)}};
8
+ /*!
9
+ * @kurkle/color v0.1.9
10
+ * https://github.com/kurkle/color#readme
11
+ * (c) 2020 Jukka Kurkela
12
+ * Released under the MIT License
13
+ */const r={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},l="0123456789ABCDEF",h=t=>l[15&t],c=t=>l[(240&t)>>4]+l[15&t],d=t=>(240&t)>>4==(15&t);function u(t){var e=function(t){return d(t.r)&&d(t.g)&&d(t.b)&&d(t.a)}(t)?h:c;return t?"#"+e(t.r)+e(t.g)+e(t.b)+(t.a<255?e(t.a):""):t}function f(t){return t+.5|0}const g=(t,e,i)=>Math.max(Math.min(t,i),e);function p(t){return g(f(2.55*t),0,255)}function m(t){return g(f(255*t),0,255)}function x(t){return g(f(t/2.55)/100,0,1)}function b(t){return g(f(100*t),0,100)}const _=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;const y=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function v(t,e,i){const s=e*Math.min(i,1-i),n=(e,n=(e+t/30)%12)=>i-s*Math.max(Math.min(n-3,9-n,1),-1);return[n(0),n(8),n(4)]}function w(t,e,i){const s=(s,n=(s+t/60)%6)=>i-i*e*Math.max(Math.min(n,4-n,1),0);return[s(5),s(3),s(1)]}function M(t,e,i){const s=v(t,1,.5);let n;for(e+i>1&&(n=1/(e+i),e*=n,i*=n),n=0;n<3;n++)s[n]*=1-e-i,s[n]+=e;return s}function k(t){const e=t.r/255,i=t.g/255,s=t.b/255,n=Math.max(e,i,s),o=Math.min(e,i,s),a=(n+o)/2;let r,l,h;return n!==o&&(h=n-o,l=a>.5?h/(2-n-o):h/(n+o),r=n===e?(i-s)/h+(i<s?6:0):n===i?(s-e)/h+2:(e-i)/h+4,r=60*r+.5),[0|r,l||0,a]}function S(t,e,i,s){return(Array.isArray(e)?t(e[0],e[1],e[2]):t(e,i,s)).map(m)}function P(t,e,i){return S(v,t,e,i)}function D(t){return(t%360+360)%360}function C(t){const e=y.exec(t);let i,s=255;if(!e)return;e[5]!==i&&(s=e[6]?p(+e[5]):m(+e[5]));const n=D(+e[2]),o=+e[3]/100,a=+e[4]/100;return i="hwb"===e[1]?function(t,e,i){return S(M,t,e,i)}(n,o,a):"hsv"===e[1]?function(t,e,i){return S(w,t,e,i)}(n,o,a):P(n,o,a),{r:i[0],g:i[1],b:i[2],a:s}}const O={x:"dark",Z:"light",Y:"re",X:"blu",W:"gr",V:"medium",U:"slate",A:"ee",T:"ol",S:"or",B:"ra",C:"lateg",D:"ights",R:"in",Q:"turquois",E:"hi",P:"ro",O:"al",N:"le",M:"de",L:"yello",F:"en",K:"ch",G:"arks",H:"ea",I:"ightg",J:"wh"},A={OiceXe:"f0f8ff",antiquewEte:"faebd7",aqua:"ffff",aquamarRe:"7fffd4",azuY:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"0",blanKedOmond:"ffebcd",Xe:"ff",XeviTet:"8a2be2",bPwn:"a52a2a",burlywood:"deb887",caMtXe:"5f9ea0",KartYuse:"7fff00",KocTate:"d2691e",cSO:"ff7f50",cSnflowerXe:"6495ed",cSnsilk:"fff8dc",crimson:"dc143c",cyan:"ffff",xXe:"8b",xcyan:"8b8b",xgTMnPd:"b8860b",xWay:"a9a9a9",xgYF:"6400",xgYy:"a9a9a9",xkhaki:"bdb76b",xmagFta:"8b008b",xTivegYF:"556b2f",xSange:"ff8c00",xScEd:"9932cc",xYd:"8b0000",xsOmon:"e9967a",xsHgYF:"8fbc8f",xUXe:"483d8b",xUWay:"2f4f4f",xUgYy:"2f4f4f",xQe:"ced1",xviTet:"9400d3",dAppRk:"ff1493",dApskyXe:"bfff",dimWay:"696969",dimgYy:"696969",dodgerXe:"1e90ff",fiYbrick:"b22222",flSOwEte:"fffaf0",foYstWAn:"228b22",fuKsia:"ff00ff",gaRsbSo:"dcdcdc",ghostwEte:"f8f8ff",gTd:"ffd700",gTMnPd:"daa520",Way:"808080",gYF:"8000",gYFLw:"adff2f",gYy:"808080",honeyMw:"f0fff0",hotpRk:"ff69b4",RdianYd:"cd5c5c",Rdigo:"4b0082",ivSy:"fffff0",khaki:"f0e68c",lavFMr:"e6e6fa",lavFMrXsh:"fff0f5",lawngYF:"7cfc00",NmoncEffon:"fffacd",ZXe:"add8e6",ZcSO:"f08080",Zcyan:"e0ffff",ZgTMnPdLw:"fafad2",ZWay:"d3d3d3",ZgYF:"90ee90",ZgYy:"d3d3d3",ZpRk:"ffb6c1",ZsOmon:"ffa07a",ZsHgYF:"20b2aa",ZskyXe:"87cefa",ZUWay:"778899",ZUgYy:"778899",ZstAlXe:"b0c4de",ZLw:"ffffe0",lime:"ff00",limegYF:"32cd32",lRF:"faf0e6",magFta:"ff00ff",maPon:"800000",VaquamarRe:"66cdaa",VXe:"cd",VScEd:"ba55d3",VpurpN:"9370db",VsHgYF:"3cb371",VUXe:"7b68ee",VsprRggYF:"fa9a",VQe:"48d1cc",VviTetYd:"c71585",midnightXe:"191970",mRtcYam:"f5fffa",mistyPse:"ffe4e1",moccasR:"ffe4b5",navajowEte:"ffdead",navy:"80",Tdlace:"fdf5e6",Tive:"808000",TivedBb:"6b8e23",Sange:"ffa500",SangeYd:"ff4500",ScEd:"da70d6",pOegTMnPd:"eee8aa",pOegYF:"98fb98",pOeQe:"afeeee",pOeviTetYd:"db7093",papayawEp:"ffefd5",pHKpuff:"ffdab9",peru:"cd853f",pRk:"ffc0cb",plum:"dda0dd",powMrXe:"b0e0e6",purpN:"800080",YbeccapurpN:"663399",Yd:"ff0000",Psybrown:"bc8f8f",PyOXe:"4169e1",saddNbPwn:"8b4513",sOmon:"fa8072",sandybPwn:"f4a460",sHgYF:"2e8b57",sHshell:"fff5ee",siFna:"a0522d",silver:"c0c0c0",skyXe:"87ceeb",UXe:"6a5acd",UWay:"708090",UgYy:"708090",snow:"fffafa",sprRggYF:"ff7f",stAlXe:"4682b4",tan:"d2b48c",teO:"8080",tEstN:"d8bfd8",tomato:"ff6347",Qe:"40e0d0",viTet:"ee82ee",JHt:"f5deb3",wEte:"ffffff",wEtesmoke:"f5f5f5",Lw:"ffff00",LwgYF:"9acd32"};let T;function L(t){T||(T=function(){const t={},e=Object.keys(A),i=Object.keys(O);let s,n,o,a,r;for(s=0;s<e.length;s++){for(a=r=e[s],n=0;n<i.length;n++)o=i[n],r=r.replace(o,O[o]);o=parseInt(A[a],16),t[r]=[o>>16&255,o>>8&255,255&o]}return t}(),T.transparent=[0,0,0,0]);const e=T[t.toLowerCase()];return e&&{r:e[0],g:e[1],b:e[2],a:4===e.length?e[3]:255}}function R(t,e,i){if(t){let s=k(t);s[e]=Math.max(0,Math.min(s[e]+s[e]*i,0===e?360:1)),s=P(s),t.r=s[0],t.g=s[1],t.b=s[2]}}function E(t,e){return t?Object.assign(e||{},t):t}function I(t){var e={r:0,g:0,b:0,a:255};return Array.isArray(t)?t.length>=3&&(e={r:t[0],g:t[1],b:t[2],a:255},t.length>3&&(e.a=m(t[3]))):(e=E(t,{r:0,g:0,b:0,a:1})).a=m(e.a),e}function z(t){return"r"===t.charAt(0)?function(t){const e=_.exec(t);let i,s,n,o=255;if(e){if(e[7]!==i){const t=+e[7];o=255&(e[8]?p(t):255*t)}return i=+e[1],s=+e[3],n=+e[5],i=255&(e[2]?p(i):i),s=255&(e[4]?p(s):s),n=255&(e[6]?p(n):n),{r:i,g:s,b:n,a:o}}}(t):C(t)}class F{constructor(t){if(t instanceof F)return t;const e=typeof t;let i;var s,n,o;"object"===e?i=I(t):"string"===e&&(o=(s=t).length,"#"===s[0]&&(4===o||5===o?n={r:255&17*r[s[1]],g:255&17*r[s[2]],b:255&17*r[s[3]],a:5===o?17*r[s[4]]:255}:7!==o&&9!==o||(n={r:r[s[1]]<<4|r[s[2]],g:r[s[3]]<<4|r[s[4]],b:r[s[5]]<<4|r[s[6]],a:9===o?r[s[7]]<<4|r[s[8]]:255})),i=n||L(t)||z(t)),this._rgb=i,this._valid=!!i}get valid(){return this._valid}get rgb(){var t=E(this._rgb);return t&&(t.a=x(t.a)),t}set rgb(t){this._rgb=I(t)}rgbString(){return this._valid?(t=this._rgb)&&(t.a<255?`rgba(${t.r}, ${t.g}, ${t.b}, ${x(t.a)})`:`rgb(${t.r}, ${t.g}, ${t.b})`):this._rgb;var t}hexString(){return this._valid?u(this._rgb):this._rgb}hslString(){return this._valid?function(t){if(!t)return;const e=k(t),i=e[0],s=b(e[1]),n=b(e[2]);return t.a<255?`hsla(${i}, ${s}%, ${n}%, ${x(t.a)})`:`hsl(${i}, ${s}%, ${n}%)`}(this._rgb):this._rgb}mix(t,e){const i=this;if(t){const s=i.rgb,n=t.rgb;let o;const a=e===o?.5:e,r=2*a-1,l=s.a-n.a,h=((r*l==-1?r:(r+l)/(1+r*l))+1)/2;o=1-h,s.r=255&h*s.r+o*n.r+.5,s.g=255&h*s.g+o*n.g+.5,s.b=255&h*s.b+o*n.b+.5,s.a=a*s.a+(1-a)*n.a,i.rgb=s}return i}clone(){return new F(this.rgb)}alpha(t){return this._rgb.a=m(t),this}clearer(t){return this._rgb.a*=1-t,this}greyscale(){const t=this._rgb,e=f(.3*t.r+.59*t.g+.11*t.b);return t.r=t.g=t.b=e,this}opaquer(t){return this._rgb.a*=1+t,this}negate(){const t=this._rgb;return t.r=255-t.r,t.g=255-t.g,t.b=255-t.b,this}lighten(t){return R(this._rgb,2,t),this}darken(t){return R(this._rgb,2,-t),this}saturate(t){return R(this._rgb,1,t),this}desaturate(t){return R(this._rgb,1,-t),this}rotate(t){return function(t,e){var i=k(t);i[0]=D(i[0]+e),i=P(i),t.r=i[0],t.g=i[1],t.b=i[2]}(this._rgb,t),this}}function B(t){return new F(t)}const V=t=>t instanceof CanvasGradient||t instanceof CanvasPattern;function W(t){return V(t)?t:B(t)}function N(t){return V(t)?t:B(t).saturate(.5).darken(.1).hexString()}function H(){}const j=function(){let t=0;return function(){return t++}}();function $(t){return null==t}function Y(t){if(Array.isArray&&Array.isArray(t))return!0;const e=Object.prototype.toString.call(t);return"[object"===e.substr(0,7)&&"Array]"===e.substr(-6)}function U(t){return null!==t&&"[object Object]"===Object.prototype.toString.call(t)}const X=t=>("number"==typeof t||t instanceof Number)&&isFinite(+t);function q(t,e){return X(t)?t:e}function K(t,e){return void 0===t?e:t}const G=(t,e)=>"string"==typeof t&&t.endsWith("%")?parseFloat(t)/100:t/e,Z=(t,e)=>"string"==typeof t&&t.endsWith("%")?parseFloat(t)/100*e:+t;function J(t,e,i){if(t&&"function"==typeof t.call)return t.apply(i,e)}function Q(t,e,i,s){let n,o,a;if(Y(t))if(o=t.length,s)for(n=o-1;n>=0;n--)e.call(i,t[n],n);else for(n=0;n<o;n++)e.call(i,t[n],n);else if(U(t))for(a=Object.keys(t),o=a.length,n=0;n<o;n++)e.call(i,t[a[n]],a[n])}function tt(t,e){let i,s,n,o;if(!t||!e||t.length!==e.length)return!1;for(i=0,s=t.length;i<s;++i)if(n=t[i],o=e[i],n.datasetIndex!==o.datasetIndex||n.index!==o.index)return!1;return!0}function et(t){if(Y(t))return t.map(et);if(U(t)){const e=Object.create(null),i=Object.keys(t),s=i.length;let n=0;for(;n<s;++n)e[i[n]]=et(t[i[n]]);return e}return t}function it(t){return-1===["__proto__","prototype","constructor"].indexOf(t)}function st(t,e,i,s){if(!it(t))return;const n=e[t],o=i[t];U(n)&&U(o)?nt(n,o,s):e[t]=et(o)}function nt(t,e,i){const s=Y(e)?e:[e],n=s.length;if(!U(t))return t;const o=(i=i||{}).merger||st;for(let a=0;a<n;++a){if(!U(e=s[a]))continue;const n=Object.keys(e);for(let s=0,a=n.length;s<a;++s)o(n[s],t,e,i)}return t}function ot(t,e){return nt(t,e,{merger:at})}function at(t,e,i){if(!it(t))return;const s=e[t],n=i[t];U(s)&&U(n)?ot(s,n):Object.prototype.hasOwnProperty.call(e,t)||(e[t]=et(n))}function rt(t,e){const i=t.indexOf(".",e);return-1===i?t.length:i}function lt(t,e){if(""===e)return t;let i=0,s=rt(e,i);for(;t&&s>i;)t=t[e.substr(i,s-i)],i=s+1,s=rt(e,i);return t}function ht(t){return t.charAt(0).toUpperCase()+t.slice(1)}const ct=t=>void 0!==t,dt=t=>"function"==typeof t,ut=(t,e)=>{if(t.size!==e.size)return!1;for(const i of t)if(!e.has(i))return!1;return!0};function ft(t){return"mouseup"===t.type||"click"===t.type||"contextmenu"===t.type}const gt=Object.create(null),pt=Object.create(null);function mt(t,e){if(!e)return t;const i=e.split(".");for(let e=0,s=i.length;e<s;++e){const s=i[e];t=t[s]||(t[s]=Object.create(null))}return t}function xt(t,e,i){return"string"==typeof e?nt(mt(t,e),i):nt(mt(t,""),e)}var bt=new class{constructor(t){this.animation=void 0,this.backgroundColor="rgba(0,0,0,0.1)",this.borderColor="rgba(0,0,0,0.1)",this.color="#666",this.datasets={},this.devicePixelRatio=t=>t.chart.platform.getDevicePixelRatio(),this.elements={},this.events=["mousemove","mouseout","click","touchstart","touchmove"],this.font={family:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",size:12,style:"normal",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(t,e)=>N(e.backgroundColor),this.hoverBorderColor=(t,e)=>N(e.borderColor),this.hoverColor=(t,e)=>N(e.color),this.indexAxis="x",this.interaction={mode:"nearest",intersect:!0},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(t)}set(t,e){return xt(this,t,e)}get(t){return mt(this,t)}describe(t,e){return xt(pt,t,e)}override(t,e){return xt(gt,t,e)}route(t,e,i,s){const n=mt(this,t),o=mt(this,i),a="_"+e;Object.defineProperties(n,{[a]:{value:n[e],writable:!0},[e]:{enumerable:!0,get(){const t=this[a],e=o[s];return U(t)?Object.assign({},e,t):K(t,e)},set(t){this[a]=t}}})}}({_scriptable:t=>!t.startsWith("on"),_indexable:t=>"events"!==t,hover:{_fallback:"interaction"},interaction:{_scriptable:!1,_indexable:!1}});const _t=Math.PI,yt=2*_t,vt=yt+_t,wt=Number.POSITIVE_INFINITY,Mt=_t/180,kt=_t/2,St=_t/4,Pt=2*_t/3,Dt=Math.log10,Ct=Math.sign;function Ot(t){const e=Math.round(t);t=Lt(t,e,t/1e3)?e:t;const i=Math.pow(10,Math.floor(Dt(t))),s=t/i;return(s<=1?1:s<=2?2:s<=5?5:10)*i}function At(t){const e=[],i=Math.sqrt(t);let s;for(s=1;s<i;s++)t%s==0&&(e.push(s),e.push(t/s));return i===(0|i)&&e.push(i),e.sort(((t,e)=>t-e)).pop(),e}function Tt(t){return!isNaN(parseFloat(t))&&isFinite(t)}function Lt(t,e,i){return Math.abs(t-e)<i}function Rt(t,e){const i=Math.round(t);return i-e<=t&&i+e>=t}function Et(t,e,i){let s,n,o;for(s=0,n=t.length;s<n;s++)o=t[s][i],isNaN(o)||(e.min=Math.min(e.min,o),e.max=Math.max(e.max,o))}function It(t){return t*(_t/180)}function zt(t){return t*(180/_t)}function Ft(t){if(!X(t))return;let e=1,i=0;for(;Math.round(t*e)/e!==t;)e*=10,i++;return i}function Bt(t,e){const i=e.x-t.x,s=e.y-t.y,n=Math.sqrt(i*i+s*s);let o=Math.atan2(s,i);return o<-.5*_t&&(o+=yt),{angle:o,distance:n}}function Vt(t,e){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))}function Wt(t,e){return(t-e+vt)%yt-_t}function Nt(t){return(t%yt+yt)%yt}function Ht(t,e,i,s){const n=Nt(t),o=Nt(e),a=Nt(i),r=Nt(o-n),l=Nt(a-n),h=Nt(n-o),c=Nt(n-a);return n===o||n===a||s&&o===a||r>l&&h<c}function jt(t,e,i){return Math.max(e,Math.min(i,t))}function $t(t){return jt(t,-32768,32767)}function Yt(t,e,i,s=1e-6){return t>=Math.min(e,i)-s&&t<=Math.max(e,i)+s}function Ut(t){return!t||$(t.size)||$(t.family)?null:(t.style?t.style+" ":"")+(t.weight?t.weight+" ":"")+t.size+"px "+t.family}function Xt(t,e,i,s,n){let o=e[n];return o||(o=e[n]=t.measureText(n).width,i.push(n)),o>s&&(s=o),s}function qt(t,e,i,s){let n=(s=s||{}).data=s.data||{},o=s.garbageCollect=s.garbageCollect||[];s.font!==e&&(n=s.data={},o=s.garbageCollect=[],s.font=e),t.save(),t.font=e;let a=0;const r=i.length;let l,h,c,d,u;for(l=0;l<r;l++)if(d=i[l],null!=d&&!0!==Y(d))a=Xt(t,n,o,a,d);else if(Y(d))for(h=0,c=d.length;h<c;h++)u=d[h],null==u||Y(u)||(a=Xt(t,n,o,a,u));t.restore();const f=o.length/2;if(f>i.length){for(l=0;l<f;l++)delete n[o[l]];o.splice(0,f)}return a}function Kt(t,e,i){const s=t.currentDevicePixelRatio,n=0!==i?Math.max(i/2,.5):0;return Math.round((e-n)*s)/s+n}function Gt(t,e){(e=e||t.getContext("2d")).save(),e.resetTransform(),e.clearRect(0,0,t.width,t.height),e.restore()}function Zt(t,e,i,s){let n,o,a,r,l;const h=e.pointStyle,c=e.rotation,d=e.radius;let u=(c||0)*Mt;if(h&&"object"==typeof h&&(n=h.toString(),"[object HTMLImageElement]"===n||"[object HTMLCanvasElement]"===n))return t.save(),t.translate(i,s),t.rotate(u),t.drawImage(h,-h.width/2,-h.height/2,h.width,h.height),void t.restore();if(!(isNaN(d)||d<=0)){switch(t.beginPath(),h){default:t.arc(i,s,d,0,yt),t.closePath();break;case"triangle":t.moveTo(i+Math.sin(u)*d,s-Math.cos(u)*d),u+=Pt,t.lineTo(i+Math.sin(u)*d,s-Math.cos(u)*d),u+=Pt,t.lineTo(i+Math.sin(u)*d,s-Math.cos(u)*d),t.closePath();break;case"rectRounded":l=.516*d,r=d-l,o=Math.cos(u+St)*r,a=Math.sin(u+St)*r,t.arc(i-o,s-a,l,u-_t,u-kt),t.arc(i+a,s-o,l,u-kt,u),t.arc(i+o,s+a,l,u,u+kt),t.arc(i-a,s+o,l,u+kt,u+_t),t.closePath();break;case"rect":if(!c){r=Math.SQRT1_2*d,t.rect(i-r,s-r,2*r,2*r);break}u+=St;case"rectRot":o=Math.cos(u)*d,a=Math.sin(u)*d,t.moveTo(i-o,s-a),t.lineTo(i+a,s-o),t.lineTo(i+o,s+a),t.lineTo(i-a,s+o),t.closePath();break;case"crossRot":u+=St;case"cross":o=Math.cos(u)*d,a=Math.sin(u)*d,t.moveTo(i-o,s-a),t.lineTo(i+o,s+a),t.moveTo(i+a,s-o),t.lineTo(i-a,s+o);break;case"star":o=Math.cos(u)*d,a=Math.sin(u)*d,t.moveTo(i-o,s-a),t.lineTo(i+o,s+a),t.moveTo(i+a,s-o),t.lineTo(i-a,s+o),u+=St,o=Math.cos(u)*d,a=Math.sin(u)*d,t.moveTo(i-o,s-a),t.lineTo(i+o,s+a),t.moveTo(i+a,s-o),t.lineTo(i-a,s+o);break;case"line":o=Math.cos(u)*d,a=Math.sin(u)*d,t.moveTo(i-o,s-a),t.lineTo(i+o,s+a);break;case"dash":t.moveTo(i,s),t.lineTo(i+Math.cos(u)*d,s+Math.sin(u)*d)}t.fill(),e.borderWidth>0&&t.stroke()}}function Jt(t,e,i){return i=i||.5,!e||t&&t.x>e.left-i&&t.x<e.right+i&&t.y>e.top-i&&t.y<e.bottom+i}function Qt(t,e){t.save(),t.beginPath(),t.rect(e.left,e.top,e.right-e.left,e.bottom-e.top),t.clip()}function te(t){t.restore()}function ee(t,e,i,s,n){if(!e)return t.lineTo(i.x,i.y);if("middle"===n){const s=(e.x+i.x)/2;t.lineTo(s,e.y),t.lineTo(s,i.y)}else"after"===n!=!!s?t.lineTo(e.x,i.y):t.lineTo(i.x,e.y);t.lineTo(i.x,i.y)}function ie(t,e,i,s){if(!e)return t.lineTo(i.x,i.y);t.bezierCurveTo(s?e.cp1x:e.cp2x,s?e.cp1y:e.cp2y,s?i.cp2x:i.cp1x,s?i.cp2y:i.cp1y,i.x,i.y)}function se(t,e,i,s,n,o={}){const a=Y(e)?e:[e],r=o.strokeWidth>0&&""!==o.strokeColor;let l,h;for(t.save(),t.font=n.string,function(t,e){e.translation&&t.translate(e.translation[0],e.translation[1]);$(e.rotation)||t.rotate(e.rotation);e.color&&(t.fillStyle=e.color);e.textAlign&&(t.textAlign=e.textAlign);e.textBaseline&&(t.textBaseline=e.textBaseline)}(t,o),l=0;l<a.length;++l)h=a[l],r&&(o.strokeColor&&(t.strokeStyle=o.strokeColor),$(o.strokeWidth)||(t.lineWidth=o.strokeWidth),t.strokeText(h,i,s,o.maxWidth)),t.fillText(h,i,s,o.maxWidth),ne(t,i,s,h,o),s+=n.lineHeight;t.restore()}function ne(t,e,i,s,n){if(n.strikethrough||n.underline){const o=t.measureText(s),a=e-o.actualBoundingBoxLeft,r=e+o.actualBoundingBoxRight,l=i-o.actualBoundingBoxAscent,h=i+o.actualBoundingBoxDescent,c=n.strikethrough?(l+h)/2:h;t.strokeStyle=t.fillStyle,t.beginPath(),t.lineWidth=n.decorationWidth||2,t.moveTo(a,c),t.lineTo(r,c),t.stroke()}}function oe(t,e){const{x:i,y:s,w:n,h:o,radius:a}=e;t.arc(i+a.topLeft,s+a.topLeft,a.topLeft,-kt,_t,!0),t.lineTo(i,s+o-a.bottomLeft),t.arc(i+a.bottomLeft,s+o-a.bottomLeft,a.bottomLeft,_t,kt,!0),t.lineTo(i+n-a.bottomRight,s+o),t.arc(i+n-a.bottomRight,s+o-a.bottomRight,a.bottomRight,kt,0,!0),t.lineTo(i+n,s+a.topRight),t.arc(i+n-a.topRight,s+a.topRight,a.topRight,0,-kt,!0),t.lineTo(i+a.topLeft,s)}function ae(t,e,i){i=i||(i=>t[i]<e);let s,n=t.length-1,o=0;for(;n-o>1;)s=o+n>>1,i(s)?o=s:n=s;return{lo:o,hi:n}}const re=(t,e,i)=>ae(t,i,(s=>t[s][e]<i)),le=(t,e,i)=>ae(t,i,(s=>t[s][e]>=i));function he(t,e,i){let s=0,n=t.length;for(;s<n&&t[s]<e;)s++;for(;n>s&&t[n-1]>i;)n--;return s>0||n<t.length?t.slice(s,n):t}const ce=["push","pop","shift","splice","unshift"];function de(t,e){t._chartjs?t._chartjs.listeners.push(e):(Object.defineProperty(t,"_chartjs",{configurable:!0,enumerable:!1,value:{listeners:[e]}}),ce.forEach((e=>{const i="_onData"+ht(e),s=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value(...e){const n=s.apply(this,e);return t._chartjs.listeners.forEach((t=>{"function"==typeof t[i]&&t[i](...e)})),n}})})))}function ue(t,e){const i=t._chartjs;if(!i)return;const s=i.listeners,n=s.indexOf(e);-1!==n&&s.splice(n,1),s.length>0||(ce.forEach((e=>{delete t[e]})),delete t._chartjs)}function fe(t){const e=new Set;let i,s;for(i=0,s=t.length;i<s;++i)e.add(t[i]);return e.size===s?t:Array.from(e)}function ge(){return"undefined"!=typeof window&&"undefined"!=typeof document}function pe(t){let e=t.parentNode;return e&&"[object ShadowRoot]"===e.toString()&&(e=e.host),e}function me(t,e,i){let s;return"string"==typeof t?(s=parseInt(t,10),-1!==t.indexOf("%")&&(s=s/100*e.parentNode[i])):s=t,s}const xe=t=>window.getComputedStyle(t,null);function be(t,e){return xe(t).getPropertyValue(e)}const _e=["top","right","bottom","left"];function ye(t,e,i){const s={};i=i?"-"+i:"";for(let n=0;n<4;n++){const o=_e[n];s[o]=parseFloat(t[e+"-"+o+i])||0}return s.width=s.left+s.right,s.height=s.top+s.bottom,s}function ve(t,e){const{canvas:i,currentDevicePixelRatio:s}=e,n=xe(i),o="border-box"===n.boxSizing,a=ye(n,"padding"),r=ye(n,"border","width"),{x:l,y:h,box:c}=function(t,e){const i=t.native||t,s=i.touches,n=s&&s.length?s[0]:i,{offsetX:o,offsetY:a}=n;let r,l,h=!1;if(((t,e,i)=>(t>0||e>0)&&(!i||!i.shadowRoot))(o,a,i.target))r=o,l=a;else{const t=e.getBoundingClientRect();r=n.clientX-t.left,l=n.clientY-t.top,h=!0}return{x:r,y:l,box:h}}(t,i),d=a.left+(c&&r.left),u=a.top+(c&&r.top);let{width:f,height:g}=e;return o&&(f-=a.width+r.width,g-=a.height+r.height),{x:Math.round((l-d)/f*i.width/s),y:Math.round((h-u)/g*i.height/s)}}const we=t=>Math.round(10*t)/10;function Me(t,e,i,s){const n=xe(t),o=ye(n,"margin"),a=me(n.maxWidth,t,"clientWidth")||wt,r=me(n.maxHeight,t,"clientHeight")||wt,l=function(t,e,i){let s,n;if(void 0===e||void 0===i){const o=pe(t);if(o){const t=o.getBoundingClientRect(),a=xe(o),r=ye(a,"border","width"),l=ye(a,"padding");e=t.width-l.width-r.width,i=t.height-l.height-r.height,s=me(a.maxWidth,o,"clientWidth"),n=me(a.maxHeight,o,"clientHeight")}else e=t.clientWidth,i=t.clientHeight}return{width:e,height:i,maxWidth:s||wt,maxHeight:n||wt}}(t,e,i);let{width:h,height:c}=l;if("content-box"===n.boxSizing){const t=ye(n,"border","width"),e=ye(n,"padding");h-=e.width+t.width,c-=e.height+t.height}return h=Math.max(0,h-o.width),c=Math.max(0,s?Math.floor(h/s):c-o.height),h=we(Math.min(h,a,l.maxWidth)),c=we(Math.min(c,r,l.maxHeight)),h&&!c&&(c=we(h/2)),{width:h,height:c}}function ke(t,e,i){const s=e||1,n=Math.floor(t.height*s),o=Math.floor(t.width*s);t.height=n/s,t.width=o/s;const a=t.canvas;return a.style&&(i||!a.style.height&&!a.style.width)&&(a.style.height=`${t.height}px`,a.style.width=`${t.width}px`),(t.currentDevicePixelRatio!==s||a.height!==n||a.width!==o)&&(t.currentDevicePixelRatio=s,a.height=n,a.width=o,t.ctx.setTransform(s,0,0,s,0,0),!0)}const Se=function(){let t=!1;try{const e={get passive(){return t=!0,!1}};window.addEventListener("test",null,e),window.removeEventListener("test",null,e)}catch(t){}return t}();function Pe(t,e){const i=be(t,e),s=i&&i.match(/^(\d+)(\.\d+)?px$/);return s?+s[1]:void 0}function De(t,e){return"native"in t?{x:t.x,y:t.y}:ve(t,e)}function Ce(t,e,i,s){const{controller:n,data:o,_sorted:a}=t,r=n._cachedMeta.iScale;if(r&&e===r.axis&&"r"!==e&&a&&o.length){const t=r._reversePixels?le:re;if(!s)return t(o,e,i);if(n._sharedOptions){const s=o[0],n="function"==typeof s.getRange&&s.getRange(e);if(n){const s=t(o,e,i-n),a=t(o,e,i+n);return{lo:s.lo,hi:a.hi}}}}return{lo:0,hi:o.length-1}}function Oe(t,e,i,s,n){const o=t.getSortedVisibleDatasetMetas(),a=i[e];for(let t=0,i=o.length;t<i;++t){const{index:i,data:r}=o[t],{lo:l,hi:h}=Ce(o[t],e,a,n);for(let t=l;t<=h;++t){const e=r[t];e.skip||s(e,i,t)}}}function Ae(t,e,i,s){const n=[];if(!Jt(e,t.chartArea,t._minPadding))return n;return Oe(t,i,e,(function(t,i,o){t.inRange(e.x,e.y,s)&&n.push({element:t,datasetIndex:i,index:o})}),!0),n}function Te(t,e,i,s,n){let o=[];const a=function(t){const e=-1!==t.indexOf("x"),i=-1!==t.indexOf("y");return function(t,s){const n=e?Math.abs(t.x-s.x):0,o=i?Math.abs(t.y-s.y):0;return Math.sqrt(Math.pow(n,2)+Math.pow(o,2))}}(i);let r=Number.POSITIVE_INFINITY;return Oe(t,i,e,(function(i,l,h){const c=i.inRange(e.x,e.y,n);if(s&&!c)return;const d=i.getCenterPoint(n);if(!Jt(d,t.chartArea,t._minPadding)&&!c)return;const u=a(e,d);u<r?(o=[{element:i,datasetIndex:l,index:h}],r=u):u===r&&o.push({element:i,datasetIndex:l,index:h})})),o}function Le(t,e,i,s,n){return Jt(e,t.chartArea,t._minPadding)?"r"!==i||s?Te(t,e,i,s,n):function(t,e,i,s){let n=[];return Oe(t,i,e,(function(t,i,o){const{startAngle:a,endAngle:r}=t.getProps(["startAngle","endAngle"],s),{angle:l}=Bt(t,{x:e.x,y:e.y});Ht(l,a,r)&&n.push({element:t,datasetIndex:i,index:o})})),n}(t,e,i,n):[]}function Re(t,e,i,s){const n=De(e,t),o=[],a=i.axis,r="x"===a?"inXRange":"inYRange";let l=!1;return function(t,e){const i=t.getSortedVisibleDatasetMetas();let s,n,o;for(let t=0,a=i.length;t<a;++t){({index:s,data:n}=i[t]);for(let t=0,i=n.length;t<i;++t)o=n[t],o.skip||e(o,s,t)}}(t,((t,e,i)=>{t[r](n[a],s)&&o.push({element:t,datasetIndex:e,index:i}),t.inRange(n.x,n.y,s)&&(l=!0)})),i.intersect&&!l?[]:o}var Ee={modes:{index(t,e,i,s){const n=De(e,t),o=i.axis||"x",a=i.intersect?Ae(t,n,o,s):Le(t,n,o,!1,s),r=[];return a.length?(t.getSortedVisibleDatasetMetas().forEach((t=>{const e=a[0].index,i=t.data[e];i&&!i.skip&&r.push({element:i,datasetIndex:t.index,index:e})})),r):[]},dataset(t,e,i,s){const n=De(e,t),o=i.axis||"xy";let a=i.intersect?Ae(t,n,o,s):Le(t,n,o,!1,s);if(a.length>0){const e=a[0].datasetIndex,i=t.getDatasetMeta(e).data;a=[];for(let t=0;t<i.length;++t)a.push({element:i[t],datasetIndex:e,index:t})}return a},point:(t,e,i,s)=>Ae(t,De(e,t),i.axis||"xy",s),nearest:(t,e,i,s)=>Le(t,De(e,t),i.axis||"xy",i.intersect,s),x:(t,e,i,s)=>Re(t,e,{axis:"x",intersect:i.intersect},s),y:(t,e,i,s)=>Re(t,e,{axis:"y",intersect:i.intersect},s)}};const Ie=new RegExp(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/),ze=new RegExp(/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/);function Fe(t,e){const i=(""+t).match(Ie);if(!i||"normal"===i[1])return 1.2*e;switch(t=+i[2],i[3]){case"px":return t;case"%":t/=100}return e*t}function Be(t,e){const i={},s=U(e),n=s?Object.keys(e):e,o=U(t)?s?i=>K(t[i],t[e[i]]):e=>t[e]:()=>t;for(const t of n)i[t]=+o(t)||0;return i}function Ve(t){return Be(t,{top:"y",right:"x",bottom:"y",left:"x"})}function We(t){return Be(t,["topLeft","topRight","bottomLeft","bottomRight"])}function Ne(t){const e=Ve(t);return e.width=e.left+e.right,e.height=e.top+e.bottom,e}function He(t,e){t=t||{},e=e||bt.font;let i=K(t.size,e.size);"string"==typeof i&&(i=parseInt(i,10));let s=K(t.style,e.style);s&&!(""+s).match(ze)&&(console.warn('Invalid font style specified: "'+s+'"'),s="");const n={family:K(t.family,e.family),lineHeight:Fe(K(t.lineHeight,e.lineHeight),i),size:i,style:s,weight:K(t.weight,e.weight),string:""};return n.string=Ut(n),n}function je(t,e,i,s){let n,o,a,r=!0;for(n=0,o=t.length;n<o;++n)if(a=t[n],void 0!==a&&(void 0!==e&&"function"==typeof a&&(a=a(e),r=!1),void 0!==i&&Y(a)&&(a=a[i%a.length],r=!1),void 0!==a))return s&&!r&&(s.cacheable=!1),a}function $e(t,e,i){const{min:s,max:n}=t,o=Z(e,(n-s)/2),a=(t,e)=>i&&0===t?0:t+e;return{min:a(s,-Math.abs(o)),max:a(n,o)}}function Ye(t,e){return Object.assign(Object.create(t),e)}const Ue=["left","top","right","bottom"];function Xe(t,e){return t.filter((t=>t.pos===e))}function qe(t,e){return t.filter((t=>-1===Ue.indexOf(t.pos)&&t.box.axis===e))}function Ke(t,e){return t.sort(((t,i)=>{const s=e?i:t,n=e?t:i;return s.weight===n.weight?s.index-n.index:s.weight-n.weight}))}function Ge(t,e){const i=function(t){const e={};for(const i of t){const{stack:t,pos:s,stackWeight:n}=i;if(!t||!Ue.includes(s))continue;const o=e[t]||(e[t]={count:0,placed:0,weight:0,size:0});o.count++,o.weight+=n}return e}(t),{vBoxMaxWidth:s,hBoxMaxHeight:n}=e;let o,a,r;for(o=0,a=t.length;o<a;++o){r=t[o];const{fullSize:a}=r.box,l=i[r.stack],h=l&&r.stackWeight/l.weight;r.horizontal?(r.width=h?h*s:a&&e.availableWidth,r.height=n):(r.width=s,r.height=h?h*n:a&&e.availableHeight)}return i}function Ze(t,e,i,s){return Math.max(t[i],e[i])+Math.max(t[s],e[s])}function Je(t,e){t.top=Math.max(t.top,e.top),t.left=Math.max(t.left,e.left),t.bottom=Math.max(t.bottom,e.bottom),t.right=Math.max(t.right,e.right)}function Qe(t,e,i,s){const{pos:n,box:o}=i,a=t.maxPadding;if(!U(n)){i.size&&(t[n]-=i.size);const e=s[i.stack]||{size:0,count:1};e.size=Math.max(e.size,i.horizontal?o.height:o.width),i.size=e.size/e.count,t[n]+=i.size}o.getPadding&&Je(a,o.getPadding());const r=Math.max(0,e.outerWidth-Ze(a,t,"left","right")),l=Math.max(0,e.outerHeight-Ze(a,t,"top","bottom")),h=r!==t.w,c=l!==t.h;return t.w=r,t.h=l,i.horizontal?{same:h,other:c}:{same:c,other:h}}function ti(t,e){const i=e.maxPadding;function s(t){const s={left:0,top:0,right:0,bottom:0};return t.forEach((t=>{s[t]=Math.max(e[t],i[t])})),s}return s(t?["left","right"]:["top","bottom"])}function ei(t,e,i,s){const n=[];let o,a,r,l,h,c;for(o=0,a=t.length,h=0;o<a;++o){r=t[o],l=r.box,l.update(r.width||e.w,r.height||e.h,ti(r.horizontal,e));const{same:a,other:d}=Qe(e,i,r,s);h|=a&&n.length,c=c||d,l.fullSize||n.push(r)}return h&&ei(n,e,i,s)||c}function ii(t,e,i,s,n){t.top=i,t.left=e,t.right=e+s,t.bottom=i+n,t.width=s,t.height=n}function si(t,e,i,s){const n=i.padding;let{x:o,y:a}=e;for(const r of t){const t=r.box,l=s[r.stack]||{count:1,placed:0,weight:1},h=r.stackWeight/l.weight||1;if(r.horizontal){const s=e.w*h,o=l.size||t.height;ct(l.start)&&(a=l.start),t.fullSize?ii(t,n.left,a,i.outerWidth-n.right-n.left,o):ii(t,e.left+l.placed,a,s,o),l.start=a,l.placed+=s,a=t.bottom}else{const s=e.h*h,a=l.size||t.width;ct(l.start)&&(o=l.start),t.fullSize?ii(t,o,n.top,a,i.outerHeight-n.bottom-n.top):ii(t,o,e.top+l.placed,a,s),l.start=o,l.placed+=s,o=t.right}}e.x=o,e.y=a}bt.set("layout",{autoPadding:!0,padding:{top:0,right:0,bottom:0,left:0}});var ni={addBox(t,e){t.boxes||(t.boxes=[]),e.fullSize=e.fullSize||!1,e.position=e.position||"top",e.weight=e.weight||0,e._layers=e._layers||function(){return[{z:0,draw(t){e.draw(t)}}]},t.boxes.push(e)},removeBox(t,e){const i=t.boxes?t.boxes.indexOf(e):-1;-1!==i&&t.boxes.splice(i,1)},configure(t,e,i){e.fullSize=i.fullSize,e.position=i.position,e.weight=i.weight},update(t,e,i,s){if(!t)return;const n=Ne(t.options.layout.padding),o=Math.max(e-n.width,0),a=Math.max(i-n.height,0),r=function(t){const e=function(t){const e=[];let i,s,n,o,a,r;for(i=0,s=(t||[]).length;i<s;++i)n=t[i],({position:o,options:{stack:a,stackWeight:r=1}}=n),e.push({index:i,box:n,pos:o,horizontal:n.isHorizontal(),weight:n.weight,stack:a&&o+a,stackWeight:r});return e}(t),i=Ke(e.filter((t=>t.box.fullSize)),!0),s=Ke(Xe(e,"left"),!0),n=Ke(Xe(e,"right")),o=Ke(Xe(e,"top"),!0),a=Ke(Xe(e,"bottom")),r=qe(e,"x"),l=qe(e,"y");return{fullSize:i,leftAndTop:s.concat(o),rightAndBottom:n.concat(l).concat(a).concat(r),chartArea:Xe(e,"chartArea"),vertical:s.concat(n).concat(l),horizontal:o.concat(a).concat(r)}}(t.boxes),l=r.vertical,h=r.horizontal;Q(t.boxes,(t=>{"function"==typeof t.beforeLayout&&t.beforeLayout()}));const c=l.reduce(((t,e)=>e.box.options&&!1===e.box.options.display?t:t+1),0)||1,d=Object.freeze({outerWidth:e,outerHeight:i,padding:n,availableWidth:o,availableHeight:a,vBoxMaxWidth:o/2/c,hBoxMaxHeight:a/2}),u=Object.assign({},n);Je(u,Ne(s));const f=Object.assign({maxPadding:u,w:o,h:a,x:n.left,y:n.top},n),g=Ge(l.concat(h),d);ei(r.fullSize,f,d,g),ei(l,f,d,g),ei(h,f,d,g)&&ei(l,f,d,g),function(t){const e=t.maxPadding;function i(i){const s=Math.max(e[i]-t[i],0);return t[i]+=s,s}t.y+=i("top"),t.x+=i("left"),i("right"),i("bottom")}(f),si(r.leftAndTop,f,d,g),f.x+=f.w,f.y+=f.h,si(r.rightAndBottom,f,d,g),t.chartArea={left:f.left,top:f.top,right:f.left+f.w,bottom:f.top+f.h,height:f.h,width:f.w},Q(r.chartArea,(e=>{const i=e.box;Object.assign(i,t.chartArea),i.update(f.w,f.h,{left:0,top:0,right:0,bottom:0})}))}};function oi(t,e=[""],i=t,s,n=(()=>t[0])){ct(s)||(s=mi("_fallback",t));const o={[Symbol.toStringTag]:"Object",_cacheable:!0,_scopes:t,_rootScopes:i,_fallback:s,_getTarget:n,override:n=>oi([n,...t],e,i,s)};return new Proxy(o,{deleteProperty:(e,i)=>(delete e[i],delete e._keys,delete t[0][i],!0),get:(i,s)=>ci(i,s,(()=>function(t,e,i,s){let n;for(const o of e)if(n=mi(li(o,t),i),ct(n))return hi(t,n)?gi(i,s,t,n):n}(s,e,t,i))),getOwnPropertyDescriptor:(t,e)=>Reflect.getOwnPropertyDescriptor(t._scopes[0],e),getPrototypeOf:()=>Reflect.getPrototypeOf(t[0]),has:(t,e)=>xi(t).includes(e),ownKeys:t=>xi(t),set(t,e,i){const s=t._storage||(t._storage=n());return t[e]=s[e]=i,delete t._keys,!0}})}function ai(t,e,i,s){const n={_cacheable:!1,_proxy:t,_context:e,_subProxy:i,_stack:new Set,_descriptors:ri(t,s),setContext:e=>ai(t,e,i,s),override:n=>ai(t.override(n),e,i,s)};return new Proxy(n,{deleteProperty:(e,i)=>(delete e[i],delete t[i],!0),get:(t,e,i)=>ci(t,e,(()=>function(t,e,i){const{_proxy:s,_context:n,_subProxy:o,_descriptors:a}=t;let r=s[e];dt(r)&&a.isScriptable(e)&&(r=function(t,e,i,s){const{_proxy:n,_context:o,_subProxy:a,_stack:r}=i;if(r.has(t))throw new Error("Recursion detected: "+Array.from(r).join("->")+"->"+t);r.add(t),e=e(o,a||s),r.delete(t),hi(t,e)&&(e=gi(n._scopes,n,t,e));return e}(e,r,t,i));Y(r)&&r.length&&(r=function(t,e,i,s){const{_proxy:n,_context:o,_subProxy:a,_descriptors:r}=i;if(ct(o.index)&&s(t))e=e[o.index%e.length];else if(U(e[0])){const i=e,s=n._scopes.filter((t=>t!==i));e=[];for(const l of i){const i=gi(s,n,t,l);e.push(ai(i,o,a&&a[t],r))}}return e}(e,r,t,a.isIndexable));hi(e,r)&&(r=ai(r,n,o&&o[e],a));return r}(t,e,i))),getOwnPropertyDescriptor:(e,i)=>e._descriptors.allKeys?Reflect.has(t,i)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(t,i),getPrototypeOf:()=>Reflect.getPrototypeOf(t),has:(e,i)=>Reflect.has(t,i),ownKeys:()=>Reflect.ownKeys(t),set:(e,i,s)=>(t[i]=s,delete e[i],!0)})}function ri(t,e={scriptable:!0,indexable:!0}){const{_scriptable:i=e.scriptable,_indexable:s=e.indexable,_allKeys:n=e.allKeys}=t;return{allKeys:n,scriptable:i,indexable:s,isScriptable:dt(i)?i:()=>i,isIndexable:dt(s)?s:()=>s}}const li=(t,e)=>t?t+ht(e):e,hi=(t,e)=>U(e)&&"adapters"!==t&&(null===Object.getPrototypeOf(e)||e.constructor===Object);function ci(t,e,i){if(Object.prototype.hasOwnProperty.call(t,e))return t[e];const s=i();return t[e]=s,s}function di(t,e,i){return dt(t)?t(e,i):t}const ui=(t,e)=>!0===t?e:"string"==typeof t?lt(e,t):void 0;function fi(t,e,i,s,n){for(const o of e){const e=ui(i,o);if(e){t.add(e);const o=di(e._fallback,i,n);if(ct(o)&&o!==i&&o!==s)return o}else if(!1===e&&ct(s)&&i!==s)return null}return!1}function gi(t,e,i,s){const n=e._rootScopes,o=di(e._fallback,i,s),a=[...t,...n],r=new Set;r.add(s);let l=pi(r,a,i,o||i,s);return null!==l&&((!ct(o)||o===i||(l=pi(r,a,o,l,s),null!==l))&&oi(Array.from(r),[""],n,o,(()=>function(t,e,i){const s=t._getTarget();e in s||(s[e]={});const n=s[e];if(Y(n)&&U(i))return i;return n}(e,i,s))))}function pi(t,e,i,s,n){for(;i;)i=fi(t,e,i,s,n);return i}function mi(t,e){for(const i of e){if(!i)continue;const e=i[t];if(ct(e))return e}}function xi(t){let e=t._keys;return e||(e=t._keys=function(t){const e=new Set;for(const i of t)for(const t of Object.keys(i).filter((t=>!t.startsWith("_"))))e.add(t);return Array.from(e)}(t._scopes)),e}const bi=Number.EPSILON||1e-14,_i=(t,e)=>e<t.length&&!t[e].skip&&t[e],yi=t=>"x"===t?"y":"x";function vi(t,e,i,s){const n=t.skip?e:t,o=e,a=i.skip?e:i,r=Vt(o,n),l=Vt(a,o);let h=r/(r+l),c=l/(r+l);h=isNaN(h)?0:h,c=isNaN(c)?0:c;const d=s*h,u=s*c;return{previous:{x:o.x-d*(a.x-n.x),y:o.y-d*(a.y-n.y)},next:{x:o.x+u*(a.x-n.x),y:o.y+u*(a.y-n.y)}}}function wi(t,e="x"){const i=yi(e),s=t.length,n=Array(s).fill(0),o=Array(s);let a,r,l,h=_i(t,0);for(a=0;a<s;++a)if(r=l,l=h,h=_i(t,a+1),l){if(h){const t=h[e]-l[e];n[a]=0!==t?(h[i]-l[i])/t:0}o[a]=r?h?Ct(n[a-1])!==Ct(n[a])?0:(n[a-1]+n[a])/2:n[a-1]:n[a]}!function(t,e,i){const s=t.length;let n,o,a,r,l,h=_i(t,0);for(let c=0;c<s-1;++c)l=h,h=_i(t,c+1),l&&h&&(Lt(e[c],0,bi)?i[c]=i[c+1]=0:(n=i[c]/e[c],o=i[c+1]/e[c],r=Math.pow(n,2)+Math.pow(o,2),r<=9||(a=3/Math.sqrt(r),i[c]=n*a*e[c],i[c+1]=o*a*e[c])))}(t,n,o),function(t,e,i="x"){const s=yi(i),n=t.length;let o,a,r,l=_i(t,0);for(let h=0;h<n;++h){if(a=r,r=l,l=_i(t,h+1),!r)continue;const n=r[i],c=r[s];a&&(o=(n-a[i])/3,r[`cp1${i}`]=n-o,r[`cp1${s}`]=c-o*e[h]),l&&(o=(l[i]-n)/3,r[`cp2${i}`]=n+o,r[`cp2${s}`]=c+o*e[h])}}(t,o,e)}function Mi(t,e,i){return Math.max(Math.min(t,i),e)}function ki(t,e,i,s,n){let o,a,r,l;if(e.spanGaps&&(t=t.filter((t=>!t.skip))),"monotone"===e.cubicInterpolationMode)wi(t,n);else{let i=s?t[t.length-1]:t[0];for(o=0,a=t.length;o<a;++o)r=t[o],l=vi(i,r,t[Math.min(o+1,a-(s?0:1))%a],e.tension),r.cp1x=l.previous.x,r.cp1y=l.previous.y,r.cp2x=l.next.x,r.cp2y=l.next.y,i=r}e.capBezierPoints&&function(t,e){let i,s,n,o,a,r=Jt(t[0],e);for(i=0,s=t.length;i<s;++i)a=o,o=r,r=i<s-1&&Jt(t[i+1],e),o&&(n=t[i],a&&(n.cp1x=Mi(n.cp1x,e.left,e.right),n.cp1y=Mi(n.cp1y,e.top,e.bottom)),r&&(n.cp2x=Mi(n.cp2x,e.left,e.right),n.cp2y=Mi(n.cp2y,e.top,e.bottom)))}(t,i)}const Si=t=>0===t||1===t,Pi=(t,e,i)=>-Math.pow(2,10*(t-=1))*Math.sin((t-e)*yt/i),Di=(t,e,i)=>Math.pow(2,-10*t)*Math.sin((t-e)*yt/i)+1,Ci={linear:t=>t,easeInQuad:t=>t*t,easeOutQuad:t=>-t*(t-2),easeInOutQuad:t=>(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1),easeInCubic:t=>t*t*t,easeOutCubic:t=>(t-=1)*t*t+1,easeInOutCubic:t=>(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2),easeInQuart:t=>t*t*t*t,easeOutQuart:t=>-((t-=1)*t*t*t-1),easeInOutQuart:t=>(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2),easeInQuint:t=>t*t*t*t*t,easeOutQuint:t=>(t-=1)*t*t*t*t+1,easeInOutQuint:t=>(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2),easeInSine:t=>1-Math.cos(t*kt),easeOutSine:t=>Math.sin(t*kt),easeInOutSine:t=>-.5*(Math.cos(_t*t)-1),easeInExpo:t=>0===t?0:Math.pow(2,10*(t-1)),easeOutExpo:t=>1===t?1:1-Math.pow(2,-10*t),easeInOutExpo:t=>Si(t)?t:t<.5?.5*Math.pow(2,10*(2*t-1)):.5*(2-Math.pow(2,-10*(2*t-1))),easeInCirc:t=>t>=1?t:-(Math.sqrt(1-t*t)-1),easeOutCirc:t=>Math.sqrt(1-(t-=1)*t),easeInOutCirc:t=>(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1),easeInElastic:t=>Si(t)?t:Pi(t,.075,.3),easeOutElastic:t=>Si(t)?t:Di(t,.075,.3),easeInOutElastic(t){const e=.1125;return Si(t)?t:t<.5?.5*Pi(2*t,e,.45):.5+.5*Di(2*t-1,e,.45)},easeInBack(t){const e=1.70158;return t*t*((e+1)*t-e)},easeOutBack(t){const e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack(t){let e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:t=>1-Ci.easeOutBounce(1-t),easeOutBounce(t){const e=7.5625,i=2.75;return t<1/i?e*t*t:t<2/i?e*(t-=1.5/i)*t+.75:t<2.5/i?e*(t-=2.25/i)*t+.9375:e*(t-=2.625/i)*t+.984375},easeInOutBounce:t=>t<.5?.5*Ci.easeInBounce(2*t):.5*Ci.easeOutBounce(2*t-1)+.5};function Oi(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:t.y+i*(e.y-t.y)}}function Ai(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:"middle"===s?i<.5?t.y:e.y:"after"===s?i<1?t.y:e.y:i>0?e.y:t.y}}function Ti(t,e,i,s){const n={x:t.cp2x,y:t.cp2y},o={x:e.cp1x,y:e.cp1y},a=Oi(t,n,i),r=Oi(n,o,i),l=Oi(o,e,i),h=Oi(a,r,i),c=Oi(r,l,i);return Oi(h,c,i)}const Li=new Map;function Ri(t,e,i){return function(t,e){e=e||{};const i=t+JSON.stringify(e);let s=Li.get(i);return s||(s=new Intl.NumberFormat(t,e),Li.set(i,s)),s}(e,i).format(t)}function Ei(t,e,i){return t?function(t,e){return{x:i=>t+t+e-i,setWidth(t){e=t},textAlign:t=>"center"===t?t:"right"===t?"left":"right",xPlus:(t,e)=>t-e,leftForLtr:(t,e)=>t-e}}(e,i):{x:t=>t,setWidth(t){},textAlign:t=>t,xPlus:(t,e)=>t+e,leftForLtr:(t,e)=>t}}function Ii(t,e){let i,s;"ltr"!==e&&"rtl"!==e||(i=t.canvas.style,s=[i.getPropertyValue("direction"),i.getPropertyPriority("direction")],i.setProperty("direction",e,"important"),t.prevTextDirection=s)}function zi(t,e){void 0!==e&&(delete t.prevTextDirection,t.canvas.style.setProperty("direction",e[0],e[1]))}function Fi(t){return"angle"===t?{between:Ht,compare:Wt,normalize:Nt}:{between:Yt,compare:(t,e)=>t-e,normalize:t=>t}}function Bi({start:t,end:e,count:i,loop:s,style:n}){return{start:t%i,end:e%i,loop:s&&(e-t+1)%i==0,style:n}}function Vi(t,e,i){if(!i)return[t];const{property:s,start:n,end:o}=i,a=e.length,{compare:r,between:l,normalize:h}=Fi(s),{start:c,end:d,loop:u,style:f}=function(t,e,i){const{property:s,start:n,end:o}=i,{between:a,normalize:r}=Fi(s),l=e.length;let h,c,{start:d,end:u,loop:f}=t;if(f){for(d+=l,u+=l,h=0,c=l;h<c&&a(r(e[d%l][s]),n,o);++h)d--,u--;d%=l,u%=l}return u<d&&(u+=l),{start:d,end:u,loop:f,style:t.style}}(t,e,i),g=[];let p,m,x,b=!1,_=null;const y=()=>b||l(n,x,p)&&0!==r(n,x),v=()=>!b||0===r(o,p)||l(o,x,p);for(let t=c,i=c;t<=d;++t)m=e[t%a],m.skip||(p=h(m[s]),p!==x&&(b=l(p,n,o),null===_&&y()&&(_=0===r(p,n)?t:i),null!==_&&v()&&(g.push(Bi({start:_,end:t,loop:u,count:a,style:f})),_=null),i=t,x=p));return null!==_&&g.push(Bi({start:_,end:d,loop:u,count:a,style:f})),g}function Wi(t,e){const i=[],s=t.segments;for(let n=0;n<s.length;n++){const o=Vi(s[n],t.points,e);o.length&&i.push(...o)}return i}function Ni(t,e){const i=t.points,s=t.options.spanGaps,n=i.length;if(!n)return[];const o=!!t._loop,{start:a,end:r}=function(t,e,i,s){let n=0,o=e-1;if(i&&!s)for(;n<e&&!t[n].skip;)n++;for(;n<e&&t[n].skip;)n++;for(n%=e,i&&(o+=n);o>n&&t[o%e].skip;)o--;return o%=e,{start:n,end:o}}(i,n,o,s);if(!0===s)return Hi(t,[{start:a,end:r,loop:o}],i,e);return Hi(t,function(t,e,i,s){const n=t.length,o=[];let a,r=e,l=t[e];for(a=e+1;a<=i;++a){const i=t[a%n];i.skip||i.stop?l.skip||(s=!1,o.push({start:e%n,end:(a-1)%n,loop:s}),e=r=i.stop?a:null):(r=a,l.skip&&(e=a)),l=i}return null!==r&&o.push({start:e%n,end:r%n,loop:s}),o}(i,a,r<a?r+n:r,!!t._fullLoop&&0===a&&r===n-1),i,e)}function Hi(t,e,i,s){return s&&s.setContext&&i?function(t,e,i,s){const n=t._chart.getContext(),o=ji(t.options),{_datasetIndex:a,options:{spanGaps:r}}=t,l=i.length,h=[];let c=o,d=e[0].start,u=d;function f(t,e,s,n){const o=r?-1:1;if(t!==e){for(t+=l;i[t%l].skip;)t-=o;for(;i[e%l].skip;)e+=o;t%l!=e%l&&(h.push({start:t%l,end:e%l,loop:s,style:n}),c=n,d=e%l)}}for(const t of e){d=r?d:t.start;let e,o=i[d%l];for(u=d+1;u<=t.end;u++){const r=i[u%l];e=ji(s.setContext(Ye(n,{type:"segment",p0:o,p1:r,p0DataIndex:(u-1)%l,p1DataIndex:u%l,datasetIndex:a}))),$i(e,c)&&f(d,u-1,t.loop,c),o=r,c=e}d<u-1&&f(d,u-1,t.loop,c)}return h}(t,e,i,s):e}function ji(t){return{backgroundColor:t.backgroundColor,borderCapStyle:t.borderCapStyle,borderDash:t.borderDash,borderDashOffset:t.borderDashOffset,borderJoinStyle:t.borderJoinStyle,borderWidth:t.borderWidth,borderColor:t.borderColor}}function $i(t,e){return e&&JSON.stringify(t)!==JSON.stringify(e)}var Yi=Object.freeze({__proto__:null,easingEffects:Ci,color:W,getHoverColor:N,noop:H,uid:j,isNullOrUndef:$,isArray:Y,isObject:U,isFinite:X,finiteOrDefault:q,valueOrDefault:K,toPercentage:G,toDimension:Z,callback:J,each:Q,_elementsEqual:tt,clone:et,_merger:st,merge:nt,mergeIf:ot,_mergerIf:at,_deprecated:function(t,e,i,s){void 0!==e&&console.warn(t+': "'+i+'" is deprecated. Please use "'+s+'" instead')},resolveObjectKey:lt,_capitalize:ht,defined:ct,isFunction:dt,setsEqual:ut,_isClickEvent:ft,toFontString:Ut,_measureText:Xt,_longestText:qt,_alignPixel:Kt,clearCanvas:Gt,drawPoint:Zt,_isPointInArea:Jt,clipArea:Qt,unclipArea:te,_steppedLineTo:ee,_bezierCurveTo:ie,renderText:se,addRoundedRectPath:oe,_lookup:ae,_lookupByKey:re,_rlookupByKey:le,_filterBetween:he,listenArrayEvents:de,unlistenArrayEvents:ue,_arrayUnique:fe,_createResolver:oi,_attachContext:ai,_descriptors:ri,splineCurve:vi,splineCurveMonotone:wi,_updateBezierControlPoints:ki,_isDomSupported:ge,_getParentNode:pe,getStyle:be,getRelativePosition:ve,getMaximumSize:Me,retinaScale:ke,supportsEventListenerOptions:Se,readUsedSize:Pe,fontString:function(t,e,i){return e+" "+t+"px "+i},requestAnimFrame:t,throttled:e,debounce:i,_toLeftRightCenter:s,_alignStartEnd:n,_textX:o,_pointInLine:Oi,_steppedInterpolation:Ai,_bezierInterpolation:Ti,formatNumber:Ri,toLineHeight:Fe,_readValueToProps:Be,toTRBL:Ve,toTRBLCorners:We,toPadding:Ne,toFont:He,resolve:je,_addGrace:$e,createContext:Ye,PI:_t,TAU:yt,PITAU:vt,INFINITY:wt,RAD_PER_DEG:Mt,HALF_PI:kt,QUARTER_PI:St,TWO_THIRDS_PI:Pt,log10:Dt,sign:Ct,niceNum:Ot,_factorize:At,isNumber:Tt,almostEquals:Lt,almostWhole:Rt,_setMinAndMaxByKey:Et,toRadians:It,toDegrees:zt,_decimalPlaces:Ft,getAngleFromPoint:Bt,distanceBetweenPoints:Vt,_angleDiff:Wt,_normalizeAngle:Nt,_angleBetween:Ht,_limitValue:jt,_int16Range:$t,_isBetween:Yt,getRtlAdapter:Ei,overrideTextDirection:Ii,restoreTextDirection:zi,_boundSegment:Vi,_boundSegments:Wi,_computeSegments:Ni});class Ui{acquireContext(t,e){}releaseContext(t){return!1}addEventListener(t,e,i){}removeEventListener(t,e,i){}getDevicePixelRatio(){return 1}getMaximumSize(t,e,i,s){return e=Math.max(0,e||t.width),i=i||t.height,{width:e,height:Math.max(0,s?Math.floor(e/s):i)}}isAttached(t){return!0}updateConfig(t){}}class Xi extends Ui{acquireContext(t){return t&&t.getContext&&t.getContext("2d")||null}updateConfig(t){t.options.animation=!1}}const qi={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},Ki=t=>null===t||""===t;const Gi=!!Se&&{passive:!0};function Zi(t,e,i){t.canvas.removeEventListener(e,i,Gi)}function Ji(t,e){for(const i of t)if(i===e||i.contains(e))return!0}function Qi(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1;for(const i of t)e=e||Ji(i.addedNodes,s),e=e&&!Ji(i.removedNodes,s);e&&i()}));return n.observe(document,{childList:!0,subtree:!0}),n}function ts(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1;for(const i of t)e=e||Ji(i.removedNodes,s),e=e&&!Ji(i.addedNodes,s);e&&i()}));return n.observe(document,{childList:!0,subtree:!0}),n}const es=new Map;let is=0;function ss(){const t=window.devicePixelRatio;t!==is&&(is=t,es.forEach(((e,i)=>{i.currentDevicePixelRatio!==t&&e()})))}function ns(t,i,s){const n=t.canvas,o=n&&pe(n);if(!o)return;const a=e(((t,e)=>{const i=o.clientWidth;s(t,e),i<o.clientWidth&&s()}),window),r=new ResizeObserver((t=>{const e=t[0],i=e.contentRect.width,s=e.contentRect.height;0===i&&0===s||a(i,s)}));return r.observe(o),function(t,e){es.size||window.addEventListener("resize",ss),es.set(t,e)}(t,a),r}function os(t,e,i){i&&i.disconnect(),"resize"===e&&function(t){es.delete(t),es.size||window.removeEventListener("resize",ss)}(t)}function as(t,i,s){const n=t.canvas,o=e((e=>{null!==t.ctx&&s(function(t,e){const i=qi[t.type]||t.type,{x:s,y:n}=ve(t,e);return{type:i,chart:e,native:t,x:void 0!==s?s:null,y:void 0!==n?n:null}}(e,t))}),t,(t=>{const e=t[0];return[e,e.offsetX,e.offsetY]}));return function(t,e,i){t.addEventListener(e,i,Gi)}(n,i,o),o}class rs extends Ui{acquireContext(t,e){const i=t&&t.getContext&&t.getContext("2d");return i&&i.canvas===t?(function(t,e){const i=t.style,s=t.getAttribute("height"),n=t.getAttribute("width");if(t.$chartjs={initial:{height:s,width:n,style:{display:i.display,height:i.height,width:i.width}}},i.display=i.display||"block",i.boxSizing=i.boxSizing||"border-box",Ki(n)){const e=Pe(t,"width");void 0!==e&&(t.width=e)}if(Ki(s))if(""===t.style.height)t.height=t.width/(e||2);else{const e=Pe(t,"height");void 0!==e&&(t.height=e)}}(t,e),i):null}releaseContext(t){const e=t.canvas;if(!e.$chartjs)return!1;const i=e.$chartjs.initial;["height","width"].forEach((t=>{const s=i[t];$(s)?e.removeAttribute(t):e.setAttribute(t,s)}));const s=i.style||{};return Object.keys(s).forEach((t=>{e.style[t]=s[t]})),e.width=e.width,delete e.$chartjs,!0}addEventListener(t,e,i){this.removeEventListener(t,e);const s=t.$proxies||(t.$proxies={}),n={attach:Qi,detach:ts,resize:ns}[e]||as;s[e]=n(t,e,i)}removeEventListener(t,e){const i=t.$proxies||(t.$proxies={}),s=i[e];if(!s)return;({attach:os,detach:os,resize:os}[e]||Zi)(t,e,s),i[e]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,e,i,s){return Me(t,e,i,s)}isAttached(t){const e=pe(t);return!(!e||!e.isConnected)}}function ls(t){return!ge()||"undefined"!=typeof OffscreenCanvas&&t instanceof OffscreenCanvas?Xi:rs}var hs=Object.freeze({__proto__:null,_detectPlatform:ls,BasePlatform:Ui,BasicPlatform:Xi,DomPlatform:rs});const cs="transparent",ds={boolean:(t,e,i)=>i>.5?e:t,color(t,e,i){const s=W(t||cs),n=s.valid&&W(e||cs);return n&&n.valid?n.mix(s,i).hexString():e},number:(t,e,i)=>t+(e-t)*i};class us{constructor(t,e,i,s){const n=e[i];s=je([t.to,s,n,t.from]);const o=je([t.from,n,s]);this._active=!0,this._fn=t.fn||ds[t.type||typeof o],this._easing=Ci[t.easing]||Ci.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=e,this._prop=i,this._from=o,this._to=s,this._promises=void 0}active(){return this._active}update(t,e,i){if(this._active){this._notify(!1);const s=this._target[this._prop],n=i-this._start,o=this._duration-n;this._start=i,this._duration=Math.floor(Math.max(o,t.duration)),this._total+=n,this._loop=!!t.loop,this._to=je([t.to,e,s,t.from]),this._from=je([t.from,s,e])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(t){const e=t-this._start,i=this._duration,s=this._prop,n=this._from,o=this._loop,a=this._to;let r;if(this._active=n!==a&&(o||e<i),!this._active)return this._target[s]=a,void this._notify(!0);e<0?this._target[s]=n:(r=e/i%2,r=o&&r>1?2-r:r,r=this._easing(Math.min(1,Math.max(0,r))),this._target[s]=this._fn(n,a,r))}wait(){const t=this._promises||(this._promises=[]);return new Promise(((e,i)=>{t.push({res:e,rej:i})}))}_notify(t){const e=t?"res":"rej",i=this._promises||[];for(let t=0;t<i.length;t++)i[t][e]()}}bt.set("animation",{delay:void 0,duration:1e3,easing:"easeOutQuart",fn:void 0,from:void 0,loop:void 0,to:void 0,type:void 0});const fs=Object.keys(bt.animation);bt.describe("animation",{_fallback:!1,_indexable:!1,_scriptable:t=>"onProgress"!==t&&"onComplete"!==t&&"fn"!==t}),bt.set("animations",{colors:{type:"color",properties:["color","borderColor","backgroundColor"]},numbers:{type:"number",properties:["x","y","borderWidth","radius","tension"]}}),bt.describe("animations",{_fallback:"animation"}),bt.set("transitions",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:"transparent"},visible:{type:"boolean",duration:0}}},hide:{animations:{colors:{to:"transparent"},visible:{type:"boolean",easing:"linear",fn:t=>0|t}}}});class gs{constructor(t,e){this._chart=t,this._properties=new Map,this.configure(e)}configure(t){if(!U(t))return;const e=this._properties;Object.getOwnPropertyNames(t).forEach((i=>{const s=t[i];if(!U(s))return;const n={};for(const t of fs)n[t]=s[t];(Y(s.properties)&&s.properties||[i]).forEach((t=>{t!==i&&e.has(t)||e.set(t,n)}))}))}_animateOptions(t,e){const i=e.options,s=function(t,e){if(!e)return;let i=t.options;if(!i)return void(t.options=e);i.$shared&&(t.options=i=Object.assign({},i,{$shared:!1,$animations:{}}));return i}(t,i);if(!s)return[];const n=this._createAnimations(s,i);return i.$shared&&function(t,e){const i=[],s=Object.keys(e);for(let e=0;e<s.length;e++){const n=t[s[e]];n&&n.active()&&i.push(n.wait())}return Promise.all(i)}(t.options.$animations,i).then((()=>{t.options=i}),(()=>{})),n}_createAnimations(t,e){const i=this._properties,s=[],n=t.$animations||(t.$animations={}),o=Object.keys(e),a=Date.now();let r;for(r=o.length-1;r>=0;--r){const l=o[r];if("$"===l.charAt(0))continue;if("options"===l){s.push(...this._animateOptions(t,e));continue}const h=e[l];let c=n[l];const d=i.get(l);if(c){if(d&&c.active()){c.update(d,h,a);continue}c.cancel()}d&&d.duration?(n[l]=c=new us(d,t,l,h),s.push(c)):t[l]=h}return s}update(t,e){if(0===this._properties.size)return void Object.assign(t,e);const i=this._createAnimations(t,e);return i.length?(a.add(this._chart,i),!0):void 0}}function ps(t,e){const i=t&&t.options||{},s=i.reverse,n=void 0===i.min?e:0,o=void 0===i.max?e:0;return{start:s?o:n,end:s?n:o}}function ms(t,e){const i=[],s=t._getSortedDatasetMetas(e);let n,o;for(n=0,o=s.length;n<o;++n)i.push(s[n].index);return i}function xs(t,e,i,s={}){const n=t.keys,o="single"===s.mode;let a,r,l,h;if(null!==e){for(a=0,r=n.length;a<r;++a){if(l=+n[a],l===i){if(s.all)continue;break}h=t.values[l],X(h)&&(o||0===e||Ct(e)===Ct(h))&&(e+=h)}return e}}function bs(t,e){const i=t&&t.options.stacked;return i||void 0===i&&void 0!==e.stack}function _s(t,e,i){const s=t[e]||(t[e]={});return s[i]||(s[i]={})}function ys(t,e,i,s){for(const n of e.getMatchingVisibleMetas(s).reverse()){const e=t[n.index];if(i&&e>0||!i&&e<0)return n.index}return null}function vs(t,e){const{chart:i,_cachedMeta:s}=t,n=i._stacks||(i._stacks={}),{iScale:o,vScale:a,index:r}=s,l=o.axis,h=a.axis,c=function(t,e,i){return`${t.id}.${e.id}.${i.stack||i.type}`}(o,a,s),d=e.length;let u;for(let t=0;t<d;++t){const i=e[t],{[l]:o,[h]:d}=i;u=(i._stacks||(i._stacks={}))[h]=_s(n,c,o),u[r]=d,u._top=ys(u,a,!0,s.type),u._bottom=ys(u,a,!1,s.type)}}function ws(t,e){const i=t.scales;return Object.keys(i).filter((t=>i[t].axis===e)).shift()}function Ms(t,e){const i=t.controller.index,s=t.vScale&&t.vScale.axis;if(s){e=e||t._parsed;for(const t of e){const e=t._stacks;if(!e||void 0===e[s]||void 0===e[s][i])return;delete e[s][i]}}}const ks=t=>"reset"===t||"none"===t,Ss=(t,e)=>e?t:Object.assign({},t);class Ps{constructor(t,e){this.chart=t,this._ctx=t.ctx,this.index=e,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.$context=void 0,this._syncList=[],this.initialize()}initialize(){const t=this._cachedMeta;this.configure(),this.linkScales(),t._stacked=bs(t.vScale,t),this.addElements()}updateIndex(t){this.index!==t&&Ms(this._cachedMeta),this.index=t}linkScales(){const t=this.chart,e=this._cachedMeta,i=this.getDataset(),s=(t,e,i,s)=>"x"===t?e:"r"===t?s:i,n=e.xAxisID=K(i.xAxisID,ws(t,"x")),o=e.yAxisID=K(i.yAxisID,ws(t,"y")),a=e.rAxisID=K(i.rAxisID,ws(t,"r")),r=e.indexAxis,l=e.iAxisID=s(r,n,o,a),h=e.vAxisID=s(r,o,n,a);e.xScale=this.getScaleForId(n),e.yScale=this.getScaleForId(o),e.rScale=this.getScaleForId(a),e.iScale=this.getScaleForId(l),e.vScale=this.getScaleForId(h)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(t){return this.chart.scales[t]}_getOtherScale(t){const e=this._cachedMeta;return t===e.iScale?e.vScale:e.iScale}reset(){this._update("reset")}_destroy(){const t=this._cachedMeta;this._data&&ue(this._data,this),t._stacked&&Ms(t)}_dataCheck(){const t=this.getDataset(),e=t.data||(t.data=[]),i=this._data;if(U(e))this._data=function(t){const e=Object.keys(t),i=new Array(e.length);let s,n,o;for(s=0,n=e.length;s<n;++s)o=e[s],i[s]={x:o,y:t[o]};return i}(e);else if(i!==e){if(i){ue(i,this);const t=this._cachedMeta;Ms(t),t._parsed=[]}e&&Object.isExtensible(e)&&de(e,this),this._syncList=[],this._data=e}}addElements(){const t=this._cachedMeta;this._dataCheck(),this.datasetElementType&&(t.dataset=new this.datasetElementType)}buildOrUpdateElements(t){const e=this._cachedMeta,i=this.getDataset();let s=!1;this._dataCheck();const n=e._stacked;e._stacked=bs(e.vScale,e),e.stack!==i.stack&&(s=!0,Ms(e),e.stack=i.stack),this._resyncElements(t),(s||n!==e._stacked)&&vs(this,e._parsed)}configure(){const t=this.chart.config,e=t.datasetScopeKeys(this._type),i=t.getOptionScopes(this.getDataset(),e,!0);this.options=t.createResolver(i,this.getContext()),this._parsing=this.options.parsing,this._cachedDataOpts={}}parse(t,e){const{_cachedMeta:i,_data:s}=this,{iScale:n,_stacked:o}=i,a=n.axis;let r,l,h,c=0===t&&e===s.length||i._sorted,d=t>0&&i._parsed[t-1];if(!1===this._parsing)i._parsed=s,i._sorted=!0,h=s;else{h=Y(s[t])?this.parseArrayData(i,s,t,e):U(s[t])?this.parseObjectData(i,s,t,e):this.parsePrimitiveData(i,s,t,e);const n=()=>null===l[a]||d&&l[a]<d[a];for(r=0;r<e;++r)i._parsed[r+t]=l=h[r],c&&(n()&&(c=!1),d=l);i._sorted=c}o&&vs(this,h)}parsePrimitiveData(t,e,i,s){const{iScale:n,vScale:o}=t,a=n.axis,r=o.axis,l=n.getLabels(),h=n===o,c=new Array(s);let d,u,f;for(d=0,u=s;d<u;++d)f=d+i,c[d]={[a]:h||n.parse(l[f],f),[r]:o.parse(e[f],f)};return c}parseArrayData(t,e,i,s){const{xScale:n,yScale:o}=t,a=new Array(s);let r,l,h,c;for(r=0,l=s;r<l;++r)h=r+i,c=e[h],a[r]={x:n.parse(c[0],h),y:o.parse(c[1],h)};return a}parseObjectData(t,e,i,s){const{xScale:n,yScale:o}=t,{xAxisKey:a="x",yAxisKey:r="y"}=this._parsing,l=new Array(s);let h,c,d,u;for(h=0,c=s;h<c;++h)d=h+i,u=e[d],l[h]={x:n.parse(lt(u,a),d),y:o.parse(lt(u,r),d)};return l}getParsed(t){return this._cachedMeta._parsed[t]}getDataElement(t){return this._cachedMeta.data[t]}applyStack(t,e,i){const s=this.chart,n=this._cachedMeta,o=e[t.axis];return xs({keys:ms(s,!0),values:e._stacks[t.axis]},o,n.index,{mode:i})}updateRangeFromParsed(t,e,i,s){const n=i[e.axis];let o=null===n?NaN:n;const a=s&&i._stacks[e.axis];s&&a&&(s.values=a,o=xs(s,n,this._cachedMeta.index)),t.min=Math.min(t.min,o),t.max=Math.max(t.max,o)}getMinMax(t,e){const i=this._cachedMeta,s=i._parsed,n=i._sorted&&t===i.iScale,o=s.length,a=this._getOtherScale(t),r=((t,e,i)=>t&&!e.hidden&&e._stacked&&{keys:ms(i,!0),values:null})(e,i,this.chart),l={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY},{min:h,max:c}=function(t){const{min:e,max:i,minDefined:s,maxDefined:n}=t.getUserBounds();return{min:s?e:Number.NEGATIVE_INFINITY,max:n?i:Number.POSITIVE_INFINITY}}(a);let d,u;function f(){u=s[d];const e=u[a.axis];return!X(u[t.axis])||h>e||c<e}for(d=0;d<o&&(f()||(this.updateRangeFromParsed(l,t,u,r),!n));++d);if(n)for(d=o-1;d>=0;--d)if(!f()){this.updateRangeFromParsed(l,t,u,r);break}return l}getAllParsedValues(t){const e=this._cachedMeta._parsed,i=[];let s,n,o;for(s=0,n=e.length;s<n;++s)o=e[s][t.axis],X(o)&&i.push(o);return i}getMaxOverflow(){return!1}getLabelAndValue(t){const e=this._cachedMeta,i=e.iScale,s=e.vScale,n=this.getParsed(t);return{label:i?""+i.getLabelForValue(n[i.axis]):"",value:s?""+s.getLabelForValue(n[s.axis]):""}}_update(t){const e=this._cachedMeta;this.update(t||"default"),e._clip=function(t){let e,i,s,n;return U(t)?(e=t.top,i=t.right,s=t.bottom,n=t.left):e=i=s=n=t,{top:e,right:i,bottom:s,left:n,disabled:!1===t}}(K(this.options.clip,function(t,e,i){if(!1===i)return!1;const s=ps(t,i),n=ps(e,i);return{top:n.end,right:s.end,bottom:n.start,left:s.start}}(e.xScale,e.yScale,this.getMaxOverflow())))}update(t){}draw(){const t=this._ctx,e=this.chart,i=this._cachedMeta,s=i.data||[],n=e.chartArea,o=[],a=this._drawStart||0,r=this._drawCount||s.length-a,l=this.options.drawActiveElementsOnTop;let h;for(i.dataset&&i.dataset.draw(t,n,a,r),h=a;h<a+r;++h){const e=s[h];e.hidden||(e.active&&l?o.push(e):e.draw(t,n))}for(h=0;h<o.length;++h)o[h].draw(t,n)}getStyle(t,e){const i=e?"active":"default";return void 0===t&&this._cachedMeta.dataset?this.resolveDatasetElementOptions(i):this.resolveDataElementOptions(t||0,i)}getContext(t,e,i){const s=this.getDataset();let n;if(t>=0&&t<this._cachedMeta.data.length){const e=this._cachedMeta.data[t];n=e.$context||(e.$context=function(t,e,i){return Ye(t,{active:!1,dataIndex:e,parsed:void 0,raw:void 0,element:i,index:e,mode:"default",type:"data"})}(this.getContext(),t,e)),n.parsed=this.getParsed(t),n.raw=s.data[t],n.index=n.dataIndex=t}else n=this.$context||(this.$context=function(t,e){return Ye(t,{active:!1,dataset:void 0,datasetIndex:e,index:e,mode:"default",type:"dataset"})}(this.chart.getContext(),this.index)),n.dataset=s,n.index=n.datasetIndex=this.index;return n.active=!!e,n.mode=i,n}resolveDatasetElementOptions(t){return this._resolveElementOptions(this.datasetElementType.id,t)}resolveDataElementOptions(t,e){return this._resolveElementOptions(this.dataElementType.id,e,t)}_resolveElementOptions(t,e="default",i){const s="active"===e,n=this._cachedDataOpts,o=t+"-"+e,a=n[o],r=this.enableOptionSharing&&ct(i);if(a)return Ss(a,r);const l=this.chart.config,h=l.datasetElementScopeKeys(this._type,t),c=s?[`${t}Hover`,"hover",t,""]:[t,""],d=l.getOptionScopes(this.getDataset(),h),u=Object.keys(bt.elements[t]),f=l.resolveNamedOptions(d,u,(()=>this.getContext(i,s)),c);return f.$shared&&(f.$shared=r,n[o]=Object.freeze(Ss(f,r))),f}_resolveAnimations(t,e,i){const s=this.chart,n=this._cachedDataOpts,o=`animation-${e}`,a=n[o];if(a)return a;let r;if(!1!==s.options.animation){const s=this.chart.config,n=s.datasetAnimationScopeKeys(this._type,e),o=s.getOptionScopes(this.getDataset(),n);r=s.createResolver(o,this.getContext(t,i,e))}const l=new gs(s,r&&r.animations);return r&&r._cacheable&&(n[o]=Object.freeze(l)),l}getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},t))}includeOptions(t,e){return!e||ks(t)||this.chart._animationsDisabled}updateElement(t,e,i,s){ks(s)?Object.assign(t,i):this._resolveAnimations(e,s).update(t,i)}updateSharedOptions(t,e,i){t&&!ks(e)&&this._resolveAnimations(void 0,e).update(t,i)}_setStyle(t,e,i,s){t.active=s;const n=this.getStyle(e,s);this._resolveAnimations(e,i,s).update(t,{options:!s&&this.getSharedOptions(n)||n})}removeHoverStyle(t,e,i){this._setStyle(t,i,"active",!1)}setHoverStyle(t,e,i){this._setStyle(t,i,"active",!0)}_removeDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!1)}_setDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!0)}_resyncElements(t){const e=this._data,i=this._cachedMeta.data;for(const[t,e,i]of this._syncList)this[t](e,i);this._syncList=[];const s=i.length,n=e.length,o=Math.min(n,s);o&&this.parse(0,o),n>s?this._insertElements(s,n-s,t):n<s&&this._removeElements(n,s-n)}_insertElements(t,e,i=!0){const s=this._cachedMeta,n=s.data,o=t+e;let a;const r=t=>{for(t.length+=e,a=t.length-1;a>=o;a--)t[a]=t[a-e]};for(r(n),a=t;a<o;++a)n[a]=new this.dataElementType;this._parsing&&r(s._parsed),this.parse(t,e),i&&this.updateElements(n,t,e,"reset")}updateElements(t,e,i,s){}_removeElements(t,e){const i=this._cachedMeta;if(this._parsing){const s=i._parsed.splice(t,e);i._stacked&&Ms(i,s)}i.data.splice(t,e)}_sync(t){if(this._parsing)this._syncList.push(t);else{const[e,i,s]=t;this[e](i,s)}this.chart._dataChanges.push([this.index,...t])}_onDataPush(){const t=arguments.length;this._sync(["_insertElements",this.getDataset().data.length-t,t])}_onDataPop(){this._sync(["_removeElements",this._cachedMeta.data.length-1,1])}_onDataShift(){this._sync(["_removeElements",0,1])}_onDataSplice(t,e){e&&this._sync(["_removeElements",t,e]);const i=arguments.length-2;i&&this._sync(["_insertElements",t,i])}_onDataUnshift(){this._sync(["_insertElements",0,arguments.length])}}Ps.defaults={},Ps.prototype.datasetElementType=null,Ps.prototype.dataElementType=null;class Ds{constructor(){this.x=void 0,this.y=void 0,this.active=!1,this.options=void 0,this.$animations=void 0}tooltipPosition(t){const{x:e,y:i}=this.getProps(["x","y"],t);return{x:e,y:i}}hasValue(){return Tt(this.x)&&Tt(this.y)}getProps(t,e){const i=this.$animations;if(!e||!i)return this;const s={};return t.forEach((t=>{s[t]=i[t]&&i[t].active()?i[t]._to:this[t]})),s}}Ds.defaults={},Ds.defaultRoutes=void 0;const Cs={values:t=>Y(t)?t:""+t,numeric(t,e,i){if(0===t)return"0";const s=this.chart.options.locale;let n,o=t;if(i.length>1){const e=Math.max(Math.abs(i[0].value),Math.abs(i[i.length-1].value));(e<1e-4||e>1e15)&&(n="scientific"),o=function(t,e){let i=e.length>3?e[2].value-e[1].value:e[1].value-e[0].value;Math.abs(i)>=1&&t!==Math.floor(t)&&(i=t-Math.floor(t));return i}(t,i)}const a=Dt(Math.abs(o)),r=Math.max(Math.min(-1*Math.floor(a),20),0),l={notation:n,minimumFractionDigits:r,maximumFractionDigits:r};return Object.assign(l,this.options.ticks.format),Ri(t,s,l)},logarithmic(t,e,i){if(0===t)return"0";const s=t/Math.pow(10,Math.floor(Dt(t)));return 1===s||2===s||5===s?Cs.numeric.call(this,t,e,i):""}};var Os={formatters:Cs};function As(t,e){const i=t.options.ticks,s=i.maxTicksLimit||function(t){const e=t.options.offset,i=t._tickSize(),s=t._length/i+(e?0:1),n=t._maxLength/i;return Math.floor(Math.min(s,n))}(t),n=i.major.enabled?function(t){const e=[];let i,s;for(i=0,s=t.length;i<s;i++)t[i].major&&e.push(i);return e}(e):[],o=n.length,a=n[0],r=n[o-1],l=[];if(o>s)return function(t,e,i,s){let n,o=0,a=i[0];for(s=Math.ceil(s),n=0;n<t.length;n++)n===a&&(e.push(t[n]),o++,a=i[o*s])}(e,l,n,o/s),l;const h=function(t,e,i){const s=function(t){const e=t.length;let i,s;if(e<2)return!1;for(s=t[0],i=1;i<e;++i)if(t[i]-t[i-1]!==s)return!1;return s}(t),n=e.length/i;if(!s)return Math.max(n,1);const o=At(s);for(let t=0,e=o.length-1;t<e;t++){const e=o[t];if(e>n)return e}return Math.max(n,1)}(n,e,s);if(o>0){let t,i;const s=o>1?Math.round((r-a)/(o-1)):null;for(Ts(e,l,h,$(s)?0:a-s,a),t=0,i=o-1;t<i;t++)Ts(e,l,h,n[t],n[t+1]);return Ts(e,l,h,r,$(s)?e.length:r+s),l}return Ts(e,l,h),l}function Ts(t,e,i,s,n){const o=K(s,0),a=Math.min(K(n,t.length),t.length);let r,l,h,c=0;for(i=Math.ceil(i),n&&(r=n-s,i=r/Math.floor(r/i)),h=o;h<0;)c++,h=Math.round(o+c*i);for(l=Math.max(o,0);l<a;l++)l===h&&(e.push(t[l]),c++,h=Math.round(o+c*i))}bt.set("scale",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:"ticks",grace:0,grid:{display:!0,lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(t,e)=>e.lineWidth,tickColor:(t,e)=>e.color,offset:!1,borderDash:[],borderDashOffset:0,borderWidth:1},title:{display:!1,text:"",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:"",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:Os.formatters.values,minor:{},major:{},align:"center",crossAlign:"near",showLabelBackdrop:!1,backdropColor:"rgba(255, 255, 255, 0.75)",backdropPadding:2}}),bt.route("scale.ticks","color","","color"),bt.route("scale.grid","color","","borderColor"),bt.route("scale.grid","borderColor","","borderColor"),bt.route("scale.title","color","","color"),bt.describe("scale",{_fallback:!1,_scriptable:t=>!t.startsWith("before")&&!t.startsWith("after")&&"callback"!==t&&"parser"!==t,_indexable:t=>"borderDash"!==t&&"tickBorderDash"!==t}),bt.describe("scales",{_fallback:"scale"}),bt.describe("scale.ticks",{_scriptable:t=>"backdropPadding"!==t&&"callback"!==t,_indexable:t=>"backdropPadding"!==t});const Ls=(t,e,i)=>"top"===e||"left"===e?t[e]+i:t[e]-i;function Rs(t,e){const i=[],s=t.length/e,n=t.length;let o=0;for(;o<n;o+=s)i.push(t[Math.floor(o)]);return i}function Es(t,e,i){const s=t.ticks.length,n=Math.min(e,s-1),o=t._startPixel,a=t._endPixel,r=1e-6;let l,h=t.getPixelForTick(n);if(!(i&&(l=1===s?Math.max(h-o,a-h):0===e?(t.getPixelForTick(1)-h)/2:(h-t.getPixelForTick(n-1))/2,h+=n<e?l:-l,h<o-r||h>a+r)))return h}function Is(t){return t.drawTicks?t.tickLength:0}function zs(t,e){if(!t.display)return 0;const i=He(t.font,e),s=Ne(t.padding);return(Y(t.text)?t.text.length:1)*i.lineHeight+s.height}function Fs(t,e,i){let n=s(t);return(i&&"right"!==e||!i&&"right"===e)&&(n=(t=>"left"===t?"right":"right"===t?"left":t)(n)),n}class Bs extends Ds{constructor(t){super(),this.id=t.id,this.type=t.type,this.options=void 0,this.ctx=t.ctx,this.chart=t.chart,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this._margins={left:0,right:0,top:0,bottom:0},this.maxWidth=void 0,this.maxHeight=void 0,this.paddingTop=void 0,this.paddingBottom=void 0,this.paddingLeft=void 0,this.paddingRight=void 0,this.axis=void 0,this.labelRotation=void 0,this.min=void 0,this.max=void 0,this._range=void 0,this.ticks=[],this._gridLineItems=null,this._labelItems=null,this._labelSizes=null,this._length=0,this._maxLength=0,this._longestTextCache={},this._startPixel=void 0,this._endPixel=void 0,this._reversePixels=!1,this._userMax=void 0,this._userMin=void 0,this._suggestedMax=void 0,this._suggestedMin=void 0,this._ticksLength=0,this._borderValue=0,this._cache={},this._dataLimitsCached=!1,this.$context=void 0}init(t){this.options=t.setContext(this.getContext()),this.axis=t.axis,this._userMin=this.parse(t.min),this._userMax=this.parse(t.max),this._suggestedMin=this.parse(t.suggestedMin),this._suggestedMax=this.parse(t.suggestedMax)}parse(t,e){return t}getUserBounds(){let{_userMin:t,_userMax:e,_suggestedMin:i,_suggestedMax:s}=this;return t=q(t,Number.POSITIVE_INFINITY),e=q(e,Number.NEGATIVE_INFINITY),i=q(i,Number.POSITIVE_INFINITY),s=q(s,Number.NEGATIVE_INFINITY),{min:q(t,i),max:q(e,s),minDefined:X(t),maxDefined:X(e)}}getMinMax(t){let e,{min:i,max:s,minDefined:n,maxDefined:o}=this.getUserBounds();if(n&&o)return{min:i,max:s};const a=this.getMatchingVisibleMetas();for(let r=0,l=a.length;r<l;++r)e=a[r].controller.getMinMax(this,t),n||(i=Math.min(i,e.min)),o||(s=Math.max(s,e.max));return i=o&&i>s?s:i,s=n&&i>s?i:s,{min:q(i,q(s,i)),max:q(s,q(i,s))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){const t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){J(this.options.beforeUpdate,[this])}update(t,e,i){const{beginAtZero:s,grace:n,ticks:o}=this.options,a=o.sampleSize;this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this._margins=i=Object.assign({left:0,right:0,top:0,bottom:0},i),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+i.left+i.right:this.height+i.top+i.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=$e(this,n,s),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();const r=a<this.ticks.length;this._convertTicksToLabels(r?Rs(this.ticks,a):this.ticks),this.configure(),this.beforeCalculateLabelRotation(),this.calculateLabelRotation(),this.afterCalculateLabelRotation(),o.display&&(o.autoSkip||"auto"===o.source)&&(this.ticks=As(this,this.ticks),this._labelSizes=null),r&&this._convertTicksToLabels(this.ticks),this.beforeFit(),this.fit(),this.afterFit(),this.afterUpdate()}configure(){let t,e,i=this.options.reverse;this.isHorizontal()?(t=this.left,e=this.right):(t=this.top,e=this.bottom,i=!i),this._startPixel=t,this._endPixel=e,this._reversePixels=i,this._length=e-t,this._alignToPixels=this.options.alignToPixels}afterUpdate(){J(this.options.afterUpdate,[this])}beforeSetDimensions(){J(this.options.beforeSetDimensions,[this])}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=0,this.right=this.width):(this.height=this.maxHeight,this.top=0,this.bottom=this.height),this.paddingLeft=0,this.paddingTop=0,this.paddingRight=0,this.paddingBottom=0}afterSetDimensions(){J(this.options.afterSetDimensions,[this])}_callHooks(t){this.chart.notifyPlugins(t,this.getContext()),J(this.options[t],[this])}beforeDataLimits(){this._callHooks("beforeDataLimits")}determineDataLimits(){}afterDataLimits(){this._callHooks("afterDataLimits")}beforeBuildTicks(){this._callHooks("beforeBuildTicks")}buildTicks(){return[]}afterBuildTicks(){this._callHooks("afterBuildTicks")}beforeTickToLabelConversion(){J(this.options.beforeTickToLabelConversion,[this])}generateTickLabels(t){const e=this.options.ticks;let i,s,n;for(i=0,s=t.length;i<s;i++)n=t[i],n.label=J(e.callback,[n.value,i,t],this)}afterTickToLabelConversion(){J(this.options.afterTickToLabelConversion,[this])}beforeCalculateLabelRotation(){J(this.options.beforeCalculateLabelRotation,[this])}calculateLabelRotation(){const t=this.options,e=t.ticks,i=this.ticks.length,s=e.minRotation||0,n=e.maxRotation;let o,a,r,l=s;if(!this._isVisible()||!e.display||s>=n||i<=1||!this.isHorizontal())return void(this.labelRotation=s);const h=this._getLabelSizes(),c=h.widest.width,d=h.highest.height,u=jt(this.chart.width-c,0,this.maxWidth);o=t.offset?this.maxWidth/i:u/(i-1),c+6>o&&(o=u/(i-(t.offset?.5:1)),a=this.maxHeight-Is(t.grid)-e.padding-zs(t.title,this.chart.options.font),r=Math.sqrt(c*c+d*d),l=zt(Math.min(Math.asin(jt((h.highest.height+6)/o,-1,1)),Math.asin(jt(a/r,-1,1))-Math.asin(jt(d/r,-1,1)))),l=Math.max(s,Math.min(n,l))),this.labelRotation=l}afterCalculateLabelRotation(){J(this.options.afterCalculateLabelRotation,[this])}beforeFit(){J(this.options.beforeFit,[this])}fit(){const t={width:0,height:0},{chart:e,options:{ticks:i,title:s,grid:n}}=this,o=this._isVisible(),a=this.isHorizontal();if(o){const o=zs(s,e.options.font);if(a?(t.width=this.maxWidth,t.height=Is(n)+o):(t.height=this.maxHeight,t.width=Is(n)+o),i.display&&this.ticks.length){const{first:e,last:s,widest:n,highest:o}=this._getLabelSizes(),r=2*i.padding,l=It(this.labelRotation),h=Math.cos(l),c=Math.sin(l);if(a){const e=i.mirror?0:c*n.width+h*o.height;t.height=Math.min(this.maxHeight,t.height+e+r)}else{const e=i.mirror?0:h*n.width+c*o.height;t.width=Math.min(this.maxWidth,t.width+e+r)}this._calculatePadding(e,s,c,h)}}this._handleMargins(),a?(this.width=this._length=e.width-this._margins.left-this._margins.right,this.height=t.height):(this.width=t.width,this.height=this._length=e.height-this._margins.top-this._margins.bottom)}_calculatePadding(t,e,i,s){const{ticks:{align:n,padding:o},position:a}=this.options,r=0!==this.labelRotation,l="top"!==a&&"x"===this.axis;if(this.isHorizontal()){const a=this.getPixelForTick(0)-this.left,h=this.right-this.getPixelForTick(this.ticks.length-1);let c=0,d=0;r?l?(c=s*t.width,d=i*e.height):(c=i*t.height,d=s*e.width):"start"===n?d=e.width:"end"===n?c=t.width:(c=t.width/2,d=e.width/2),this.paddingLeft=Math.max((c-a+o)*this.width/(this.width-a),0),this.paddingRight=Math.max((d-h+o)*this.width/(this.width-h),0)}else{let i=e.height/2,s=t.height/2;"start"===n?(i=0,s=t.height):"end"===n&&(i=e.height,s=0),this.paddingTop=i+o,this.paddingBottom=s+o}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){J(this.options.afterFit,[this])}isHorizontal(){const{axis:t,position:e}=this.options;return"top"===e||"bottom"===e||"x"===t}isFullSize(){return this.options.fullSize}_convertTicksToLabels(t){let e,i;for(this.beforeTickToLabelConversion(),this.generateTickLabels(t),e=0,i=t.length;e<i;e++)$(t[e].label)&&(t.splice(e,1),i--,e--);this.afterTickToLabelConversion()}_getLabelSizes(){let t=this._labelSizes;if(!t){const e=this.options.ticks.sampleSize;let i=this.ticks;e<i.length&&(i=Rs(i,e)),this._labelSizes=t=this._computeLabelSizes(i,i.length)}return t}_computeLabelSizes(t,e){const{ctx:i,_longestTextCache:s}=this,n=[],o=[];let a,r,l,h,c,d,u,f,g,p,m,x=0,b=0;for(a=0;a<e;++a){if(h=t[a].label,c=this._resolveTickFontOptions(a),i.font=d=c.string,u=s[d]=s[d]||{data:{},gc:[]},f=c.lineHeight,g=p=0,$(h)||Y(h)){if(Y(h))for(r=0,l=h.length;r<l;++r)m=h[r],$(m)||Y(m)||(g=Xt(i,u.data,u.gc,g,m),p+=f)}else g=Xt(i,u.data,u.gc,g,h),p=f;n.push(g),o.push(p),x=Math.max(g,x),b=Math.max(p,b)}!function(t,e){Q(t,(t=>{const i=t.gc,s=i.length/2;let n;if(s>e){for(n=0;n<s;++n)delete t.data[i[n]];i.splice(0,s)}}))}(s,e);const _=n.indexOf(x),y=o.indexOf(b),v=t=>({width:n[t]||0,height:o[t]||0});return{first:v(0),last:v(e-1),widest:v(_),highest:v(y),widths:n,heights:o}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){this._reversePixels&&(t=1-t);const e=this._startPixel+t*this._length;return $t(this._alignToPixels?Kt(this.chart,e,0):e)}getDecimalForPixel(t){const e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){const{min:t,max:e}=this;return t<0&&e<0?e:t>0&&e>0?t:0}getContext(t){const e=this.ticks||[];if(t>=0&&t<e.length){const i=e[t];return i.$context||(i.$context=function(t,e,i){return Ye(t,{tick:i,index:e,type:"tick"})}(this.getContext(),t,i))}return this.$context||(this.$context=Ye(this.chart.getContext(),{scale:this,type:"scale"}))}_tickSize(){const t=this.options.ticks,e=It(this.labelRotation),i=Math.abs(Math.cos(e)),s=Math.abs(Math.sin(e)),n=this._getLabelSizes(),o=t.autoSkipPadding||0,a=n?n.widest.width+o:0,r=n?n.highest.height+o:0;return this.isHorizontal()?r*i>a*s?a/i:r/s:r*s<a*i?r/i:a/s}_isVisible(){const t=this.options.display;return"auto"!==t?!!t:this.getMatchingVisibleMetas().length>0}_computeGridLineItems(t){const e=this.axis,i=this.chart,s=this.options,{grid:n,position:o}=s,a=n.offset,r=this.isHorizontal(),l=this.ticks.length+(a?1:0),h=Is(n),c=[],d=n.setContext(this.getContext()),u=d.drawBorder?d.borderWidth:0,f=u/2,g=function(t){return Kt(i,t,u)};let p,m,x,b,_,y,v,w,M,k,S,P;if("top"===o)p=g(this.bottom),y=this.bottom-h,w=p-f,k=g(t.top)+f,P=t.bottom;else if("bottom"===o)p=g(this.top),k=t.top,P=g(t.bottom)-f,y=p+f,w=this.top+h;else if("left"===o)p=g(this.right),_=this.right-h,v=p-f,M=g(t.left)+f,S=t.right;else if("right"===o)p=g(this.left),M=t.left,S=g(t.right)-f,_=p+f,v=this.left+h;else if("x"===e){if("center"===o)p=g((t.top+t.bottom)/2+.5);else if(U(o)){const t=Object.keys(o)[0],e=o[t];p=g(this.chart.scales[t].getPixelForValue(e))}k=t.top,P=t.bottom,y=p+f,w=y+h}else if("y"===e){if("center"===o)p=g((t.left+t.right)/2);else if(U(o)){const t=Object.keys(o)[0],e=o[t];p=g(this.chart.scales[t].getPixelForValue(e))}_=p-f,v=_-h,M=t.left,S=t.right}const D=K(s.ticks.maxTicksLimit,l),C=Math.max(1,Math.ceil(l/D));for(m=0;m<l;m+=C){const t=n.setContext(this.getContext(m)),e=t.lineWidth,s=t.color,o=n.borderDash||[],l=t.borderDashOffset,h=t.tickWidth,d=t.tickColor,u=t.tickBorderDash||[],f=t.tickBorderDashOffset;x=Es(this,m,a),void 0!==x&&(b=Kt(i,x,e),r?_=v=M=S=b:y=w=k=P=b,c.push({tx1:_,ty1:y,tx2:v,ty2:w,x1:M,y1:k,x2:S,y2:P,width:e,color:s,borderDash:o,borderDashOffset:l,tickWidth:h,tickColor:d,tickBorderDash:u,tickBorderDashOffset:f}))}return this._ticksLength=l,this._borderValue=p,c}_computeLabelItems(t){const e=this.axis,i=this.options,{position:s,ticks:n}=i,o=this.isHorizontal(),a=this.ticks,{align:r,crossAlign:l,padding:h,mirror:c}=n,d=Is(i.grid),u=d+h,f=c?-h:u,g=-It(this.labelRotation),p=[];let m,x,b,_,y,v,w,M,k,S,P,D,C="middle";if("top"===s)v=this.bottom-f,w=this._getXAxisLabelAlignment();else if("bottom"===s)v=this.top+f,w=this._getXAxisLabelAlignment();else if("left"===s){const t=this._getYAxisLabelAlignment(d);w=t.textAlign,y=t.x}else if("right"===s){const t=this._getYAxisLabelAlignment(d);w=t.textAlign,y=t.x}else if("x"===e){if("center"===s)v=(t.top+t.bottom)/2+u;else if(U(s)){const t=Object.keys(s)[0],e=s[t];v=this.chart.scales[t].getPixelForValue(e)+u}w=this._getXAxisLabelAlignment()}else if("y"===e){if("center"===s)y=(t.left+t.right)/2-u;else if(U(s)){const t=Object.keys(s)[0],e=s[t];y=this.chart.scales[t].getPixelForValue(e)}w=this._getYAxisLabelAlignment(d).textAlign}"y"===e&&("start"===r?C="top":"end"===r&&(C="bottom"));const O=this._getLabelSizes();for(m=0,x=a.length;m<x;++m){b=a[m],_=b.label;const t=n.setContext(this.getContext(m));M=this.getPixelForTick(m)+n.labelOffset,k=this._resolveTickFontOptions(m),S=k.lineHeight,P=Y(_)?_.length:1;const e=P/2,i=t.color,r=t.textStrokeColor,h=t.textStrokeWidth;let d;if(o?(y=M,D="top"===s?"near"===l||0!==g?-P*S+S/2:"center"===l?-O.highest.height/2-e*S+S:-O.highest.height+S/2:"near"===l||0!==g?S/2:"center"===l?O.highest.height/2-e*S:O.highest.height-P*S,c&&(D*=-1)):(v=M,D=(1-P)*S/2),t.showLabelBackdrop){const e=Ne(t.backdropPadding),i=O.heights[m],s=O.widths[m];let n=v+D-e.top,o=y-e.left;switch(C){case"middle":n-=i/2;break;case"bottom":n-=i}switch(w){case"center":o-=s/2;break;case"right":o-=s}d={left:o,top:n,width:s+e.width,height:i+e.height,color:t.backdropColor}}p.push({rotation:g,label:_,font:k,color:i,strokeColor:r,strokeWidth:h,textOffset:D,textAlign:w,textBaseline:C,translation:[y,v],backdrop:d})}return p}_getXAxisLabelAlignment(){const{position:t,ticks:e}=this.options;if(-It(this.labelRotation))return"top"===t?"left":"right";let i="center";return"start"===e.align?i="left":"end"===e.align&&(i="right"),i}_getYAxisLabelAlignment(t){const{position:e,ticks:{crossAlign:i,mirror:s,padding:n}}=this.options,o=t+n,a=this._getLabelSizes().widest.width;let r,l;return"left"===e?s?(l=this.right+n,"near"===i?r="left":"center"===i?(r="center",l+=a/2):(r="right",l+=a)):(l=this.right-o,"near"===i?r="right":"center"===i?(r="center",l-=a/2):(r="left",l=this.left)):"right"===e?s?(l=this.left+n,"near"===i?r="right":"center"===i?(r="center",l-=a/2):(r="left",l-=a)):(l=this.left+o,"near"===i?r="left":"center"===i?(r="center",l+=a/2):(r="right",l=this.right)):r="right",{textAlign:r,x:l}}_computeLabelArea(){if(this.options.ticks.mirror)return;const t=this.chart,e=this.options.position;return"left"===e||"right"===e?{top:0,left:this.left,bottom:t.height,right:this.right}:"top"===e||"bottom"===e?{top:this.top,left:0,bottom:this.bottom,right:t.width}:void 0}drawBackground(){const{ctx:t,options:{backgroundColor:e},left:i,top:s,width:n,height:o}=this;e&&(t.save(),t.fillStyle=e,t.fillRect(i,s,n,o),t.restore())}getLineWidthForValue(t){const e=this.options.grid;if(!this._isVisible()||!e.display)return 0;const i=this.ticks.findIndex((e=>e.value===t));if(i>=0){return e.setContext(this.getContext(i)).lineWidth}return 0}drawGrid(t){const e=this.options.grid,i=this.ctx,s=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(t));let n,o;const a=(t,e,s)=>{s.width&&s.color&&(i.save(),i.lineWidth=s.width,i.strokeStyle=s.color,i.setLineDash(s.borderDash||[]),i.lineDashOffset=s.borderDashOffset,i.beginPath(),i.moveTo(t.x,t.y),i.lineTo(e.x,e.y),i.stroke(),i.restore())};if(e.display)for(n=0,o=s.length;n<o;++n){const t=s[n];e.drawOnChartArea&&a({x:t.x1,y:t.y1},{x:t.x2,y:t.y2},t),e.drawTicks&&a({x:t.tx1,y:t.ty1},{x:t.tx2,y:t.ty2},{color:t.tickColor,width:t.tickWidth,borderDash:t.tickBorderDash,borderDashOffset:t.tickBorderDashOffset})}}drawBorder(){const{chart:t,ctx:e,options:{grid:i}}=this,s=i.setContext(this.getContext()),n=i.drawBorder?s.borderWidth:0;if(!n)return;const o=i.setContext(this.getContext(0)).lineWidth,a=this._borderValue;let r,l,h,c;this.isHorizontal()?(r=Kt(t,this.left,n)-n/2,l=Kt(t,this.right,o)+o/2,h=c=a):(h=Kt(t,this.top,n)-n/2,c=Kt(t,this.bottom,o)+o/2,r=l=a),e.save(),e.lineWidth=s.borderWidth,e.strokeStyle=s.borderColor,e.beginPath(),e.moveTo(r,h),e.lineTo(l,c),e.stroke(),e.restore()}drawLabels(t){if(!this.options.ticks.display)return;const e=this.ctx,i=this._computeLabelArea();i&&Qt(e,i);const s=this._labelItems||(this._labelItems=this._computeLabelItems(t));let n,o;for(n=0,o=s.length;n<o;++n){const t=s[n],i=t.font,o=t.label;t.backdrop&&(e.fillStyle=t.backdrop.color,e.fillRect(t.backdrop.left,t.backdrop.top,t.backdrop.width,t.backdrop.height)),se(e,o,0,t.textOffset,i,t)}i&&te(e)}drawTitle(){const{ctx:t,options:{position:e,title:i,reverse:s}}=this;if(!i.display)return;const o=He(i.font),a=Ne(i.padding),r=i.align;let l=o.lineHeight/2;"bottom"===e||"center"===e||U(e)?(l+=a.bottom,Y(i.text)&&(l+=o.lineHeight*(i.text.length-1))):l+=a.top;const{titleX:h,titleY:c,maxWidth:d,rotation:u}=function(t,e,i,s){const{top:o,left:a,bottom:r,right:l,chart:h}=t,{chartArea:c,scales:d}=h;let u,f,g,p=0;const m=r-o,x=l-a;if(t.isHorizontal()){if(f=n(s,a,l),U(i)){const t=Object.keys(i)[0],s=i[t];g=d[t].getPixelForValue(s)+m-e}else g="center"===i?(c.bottom+c.top)/2+m-e:Ls(t,i,e);u=l-a}else{if(U(i)){const t=Object.keys(i)[0],s=i[t];f=d[t].getPixelForValue(s)-x+e}else f="center"===i?(c.left+c.right)/2-x+e:Ls(t,i,e);g=n(s,r,o),p="left"===i?-kt:kt}return{titleX:f,titleY:g,maxWidth:u,rotation:p}}(this,l,e,r);se(t,i.text,0,0,o,{color:i.color,maxWidth:d,rotation:u,textAlign:Fs(r,e,s),textBaseline:"middle",translation:[h,c]})}draw(t){this._isVisible()&&(this.drawBackground(),this.drawGrid(t),this.drawBorder(),this.drawTitle(),this.drawLabels(t))}_layers(){const t=this.options,e=t.ticks&&t.ticks.z||0,i=K(t.grid&&t.grid.z,-1);return this._isVisible()&&this.draw===Bs.prototype.draw?[{z:i,draw:t=>{this.drawBackground(),this.drawGrid(t),this.drawTitle()}},{z:i+1,draw:()=>{this.drawBorder()}},{z:e,draw:t=>{this.drawLabels(t)}}]:[{z:e,draw:t=>{this.draw(t)}}]}getMatchingVisibleMetas(t){const e=this.chart.getSortedVisibleDatasetMetas(),i=this.axis+"AxisID",s=[];let n,o;for(n=0,o=e.length;n<o;++n){const o=e[n];o[i]!==this.id||t&&o.type!==t||s.push(o)}return s}_resolveTickFontOptions(t){return He(this.options.ticks.setContext(this.getContext(t)).font)}_maxDigits(){const t=this._resolveTickFontOptions(0).lineHeight;return(this.isHorizontal()?this.width:this.height)/t}}class Vs{constructor(t,e,i){this.type=t,this.scope=e,this.override=i,this.items=Object.create(null)}isForType(t){return Object.prototype.isPrototypeOf.call(this.type.prototype,t.prototype)}register(t){const e=Object.getPrototypeOf(t);let i;(function(t){return"id"in t&&"defaults"in t})(e)&&(i=this.register(e));const s=this.items,n=t.id,o=this.scope+"."+n;if(!n)throw new Error("class does not have id: "+t);return n in s||(s[n]=t,function(t,e,i){const s=nt(Object.create(null),[i?bt.get(i):{},bt.get(e),t.defaults]);bt.set(e,s),t.defaultRoutes&&function(t,e){Object.keys(e).forEach((i=>{const s=i.split("."),n=s.pop(),o=[t].concat(s).join("."),a=e[i].split("."),r=a.pop(),l=a.join(".");bt.route(o,n,l,r)}))}(e,t.defaultRoutes);t.descriptors&&bt.describe(e,t.descriptors)}(t,o,i),this.override&&bt.override(t.id,t.overrides)),o}get(t){return this.items[t]}unregister(t){const e=this.items,i=t.id,s=this.scope;i in e&&delete e[i],s&&i in bt[s]&&(delete bt[s][i],this.override&&delete gt[i])}}var Ws=new class{constructor(){this.controllers=new Vs(Ps,"datasets",!0),this.elements=new Vs(Ds,"elements"),this.plugins=new Vs(Object,"plugins"),this.scales=new Vs(Bs,"scales"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...t){this._each("register",t)}remove(...t){this._each("unregister",t)}addControllers(...t){this._each("register",t,this.controllers)}addElements(...t){this._each("register",t,this.elements)}addPlugins(...t){this._each("register",t,this.plugins)}addScales(...t){this._each("register",t,this.scales)}getController(t){return this._get(t,this.controllers,"controller")}getElement(t){return this._get(t,this.elements,"element")}getPlugin(t){return this._get(t,this.plugins,"plugin")}getScale(t){return this._get(t,this.scales,"scale")}removeControllers(...t){this._each("unregister",t,this.controllers)}removeElements(...t){this._each("unregister",t,this.elements)}removePlugins(...t){this._each("unregister",t,this.plugins)}removeScales(...t){this._each("unregister",t,this.scales)}_each(t,e,i){[...e].forEach((e=>{const s=i||this._getRegistryForType(e);i||s.isForType(e)||s===this.plugins&&e.id?this._exec(t,s,e):Q(e,(e=>{const s=i||this._getRegistryForType(e);this._exec(t,s,e)}))}))}_exec(t,e,i){const s=ht(t);J(i["before"+s],[],i),e[t](i),J(i["after"+s],[],i)}_getRegistryForType(t){for(let e=0;e<this._typedRegistries.length;e++){const i=this._typedRegistries[e];if(i.isForType(t))return i}return this.plugins}_get(t,e,i){const s=e.get(t);if(void 0===s)throw new Error('"'+t+'" is not a registered '+i+".");return s}};class Ns{constructor(){this._init=[]}notify(t,e,i,s){"beforeInit"===e&&(this._init=this._createDescriptors(t,!0),this._notify(this._init,t,"install"));const n=s?this._descriptors(t).filter(s):this._descriptors(t),o=this._notify(n,t,e,i);return"afterDestroy"===e&&(this._notify(n,t,"stop"),this._notify(this._init,t,"uninstall")),o}_notify(t,e,i,s){s=s||{};for(const n of t){const t=n.plugin;if(!1===J(t[i],[e,s,n.options],t)&&s.cancelable)return!1}return!0}invalidate(){$(this._cache)||(this._oldCache=this._cache,this._cache=void 0)}_descriptors(t){if(this._cache)return this._cache;const e=this._cache=this._createDescriptors(t);return this._notifyStateChanges(t),e}_createDescriptors(t,e){const i=t&&t.config,s=K(i.options&&i.options.plugins,{}),n=function(t){const e=[],i=Object.keys(Ws.plugins.items);for(let t=0;t<i.length;t++)e.push(Ws.getPlugin(i[t]));const s=t.plugins||[];for(let t=0;t<s.length;t++){const i=s[t];-1===e.indexOf(i)&&e.push(i)}return e}(i);return!1!==s||e?function(t,e,i,s){const n=[],o=t.getContext();for(let a=0;a<e.length;a++){const r=e[a],l=Hs(i[r.id],s);null!==l&&n.push({plugin:r,options:js(t.config,r,l,o)})}return n}(t,n,s,e):[]}_notifyStateChanges(t){const e=this._oldCache||[],i=this._cache,s=(t,e)=>t.filter((t=>!e.some((e=>t.plugin.id===e.plugin.id))));this._notify(s(e,i),t,"stop"),this._notify(s(i,e),t,"start")}}function Hs(t,e){return e||!1!==t?!0===t?{}:t:null}function js(t,e,i,s){const n=t.pluginScopeKeys(e),o=t.getOptionScopes(i,n);return t.createResolver(o,s,[""],{scriptable:!1,indexable:!1,allKeys:!0})}function $s(t,e){const i=bt.datasets[t]||{};return((e.datasets||{})[t]||{}).indexAxis||e.indexAxis||i.indexAxis||"x"}function Ys(t,e){return"x"===t||"y"===t?t:e.axis||("top"===(i=e.position)||"bottom"===i?"x":"left"===i||"right"===i?"y":void 0)||t.charAt(0).toLowerCase();var i}function Us(t){const e=t.options||(t.options={});e.plugins=K(e.plugins,{}),e.scales=function(t,e){const i=gt[t.type]||{scales:{}},s=e.scales||{},n=$s(t.type,e),o=Object.create(null),a=Object.create(null);return Object.keys(s).forEach((t=>{const e=s[t];if(!U(e))return console.error(`Invalid scale configuration for scale: ${t}`);if(e._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${t}`);const r=Ys(t,e),l=function(t,e){return t===e?"_index_":"_value_"}(r,n),h=i.scales||{};o[r]=o[r]||t,a[t]=ot(Object.create(null),[{axis:r},e,h[r],h[l]])})),t.data.datasets.forEach((i=>{const n=i.type||t.type,r=i.indexAxis||$s(n,e),l=(gt[n]||{}).scales||{};Object.keys(l).forEach((t=>{const e=function(t,e){let i=t;return"_index_"===t?i=e:"_value_"===t&&(i="x"===e?"y":"x"),i}(t,r),n=i[e+"AxisID"]||o[e]||e;a[n]=a[n]||Object.create(null),ot(a[n],[{axis:e},s[n],l[t]])}))})),Object.keys(a).forEach((t=>{const e=a[t];ot(e,[bt.scales[e.type],bt.scale])})),a}(t,e)}function Xs(t){return(t=t||{}).datasets=t.datasets||[],t.labels=t.labels||[],t}const qs=new Map,Ks=new Set;function Gs(t,e){let i=qs.get(t);return i||(i=e(),qs.set(t,i),Ks.add(i)),i}const Zs=(t,e,i)=>{const s=lt(e,i);void 0!==s&&t.add(s)};class Js{constructor(t){this._config=function(t){return(t=t||{}).data=Xs(t.data),Us(t),t}(t),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(t){this._config.type=t}get data(){return this._config.data}set data(t){this._config.data=Xs(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){const t=this._config;this.clearCache(),Us(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return Gs(t,(()=>[[`datasets.${t}`,""]]))}datasetAnimationScopeKeys(t,e){return Gs(`${t}.transition.${e}`,(()=>[[`datasets.${t}.transitions.${e}`,`transitions.${e}`],[`datasets.${t}`,""]]))}datasetElementScopeKeys(t,e){return Gs(`${t}-${e}`,(()=>[[`datasets.${t}.elements.${e}`,`datasets.${t}`,`elements.${e}`,""]]))}pluginScopeKeys(t){const e=t.id;return Gs(`${this.type}-plugin-${e}`,(()=>[[`plugins.${e}`,...t.additionalOptionScopes||[]]]))}_cachedScopes(t,e){const i=this._scopeCache;let s=i.get(t);return s&&!e||(s=new Map,i.set(t,s)),s}getOptionScopes(t,e,i){const{options:s,type:n}=this,o=this._cachedScopes(t,i),a=o.get(e);if(a)return a;const r=new Set;e.forEach((e=>{t&&(r.add(t),e.forEach((e=>Zs(r,t,e)))),e.forEach((t=>Zs(r,s,t))),e.forEach((t=>Zs(r,gt[n]||{},t))),e.forEach((t=>Zs(r,bt,t))),e.forEach((t=>Zs(r,pt,t)))}));const l=Array.from(r);return 0===l.length&&l.push(Object.create(null)),Ks.has(e)&&o.set(e,l),l}chartOptionScopes(){const{options:t,type:e}=this;return[t,gt[e]||{},bt.datasets[e]||{},{type:e},bt,pt]}resolveNamedOptions(t,e,i,s=[""]){const n={$shared:!0},{resolver:o,subPrefixes:a}=Qs(this._resolverCache,t,s);let r=o;if(function(t,e){const{isScriptable:i,isIndexable:s}=ri(t);for(const n of e){const e=i(n),o=s(n),a=(o||e)&&t[n];if(e&&(dt(a)||tn(a))||o&&Y(a))return!0}return!1}(o,e)){n.$shared=!1;r=ai(o,i=dt(i)?i():i,this.createResolver(t,i,a))}for(const t of e)n[t]=r[t];return n}createResolver(t,e,i=[""],s){const{resolver:n}=Qs(this._resolverCache,t,i);return U(e)?ai(n,e,void 0,s):n}}function Qs(t,e,i){let s=t.get(e);s||(s=new Map,t.set(e,s));const n=i.join();let o=s.get(n);if(!o){o={resolver:oi(e,i),subPrefixes:i.filter((t=>!t.toLowerCase().includes("hover")))},s.set(n,o)}return o}const tn=t=>U(t)&&Object.getOwnPropertyNames(t).reduce(((e,i)=>e||dt(t[i])),!1);const en=["top","bottom","left","right","chartArea"];function sn(t,e){return"top"===t||"bottom"===t||-1===en.indexOf(t)&&"x"===e}function nn(t,e){return function(i,s){return i[t]===s[t]?i[e]-s[e]:i[t]-s[t]}}function on(t){const e=t.chart,i=e.options.animation;e.notifyPlugins("afterRender"),J(i&&i.onComplete,[t],e)}function an(t){const e=t.chart,i=e.options.animation;J(i&&i.onProgress,[t],e)}function rn(t){return ge()&&"string"==typeof t?t=document.getElementById(t):t&&t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas),t}const ln={},hn=t=>{const e=rn(t);return Object.values(ln).filter((t=>t.canvas===e)).pop()};function cn(t,e,i){const s=Object.keys(t);for(const n of s){const s=+n;if(s>=e){const o=t[n];delete t[n],(i>0||s>e)&&(t[s+i]=o)}}}class dn{constructor(t,e){const s=this.config=new Js(e),n=rn(t),o=hn(n);if(o)throw new Error("Canvas is already in use. Chart with ID '"+o.id+"' must be destroyed before the canvas can be reused.");const r=s.createResolver(s.chartOptionScopes(),this.getContext());this.platform=new(s.platform||ls(n)),this.platform.updateConfig(s);const l=this.platform.acquireContext(n,r.aspectRatio),h=l&&l.canvas,c=h&&h.height,d=h&&h.width;this.id=j(),this.ctx=l,this.canvas=h,this.width=d,this.height=c,this._options=r,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new Ns,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=i((t=>this.update(t)),r.resizeDelay||0),this._dataChanges=[],ln[this.id]=this,l&&h?(a.listen(this,"complete",on),a.listen(this,"progress",an),this._initialize(),this.attached&&this.update()):console.error("Failed to create chart: can't acquire context from the given item")}get aspectRatio(){const{options:{aspectRatio:t,maintainAspectRatio:e},width:i,height:s,_aspectRatio:n}=this;return $(t)?e&&n?n:s?i/s:null:t}get data(){return this.config.data}set data(t){this.config.data=t}get options(){return this._options}set options(t){this.config.options=t}_initialize(){return this.notifyPlugins("beforeInit"),this.options.responsive?this.resize():ke(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return Gt(this.canvas,this.ctx),this}stop(){return a.stop(this),this}resize(t,e){a.running(this)?this._resizeBeforeDraw={width:t,height:e}:this._resize(t,e)}_resize(t,e){const i=this.options,s=this.canvas,n=i.maintainAspectRatio&&this.aspectRatio,o=this.platform.getMaximumSize(s,t,e,n),a=i.devicePixelRatio||this.platform.getDevicePixelRatio(),r=this.width?"resize":"attach";this.width=o.width,this.height=o.height,this._aspectRatio=this.aspectRatio,ke(this,a,!0)&&(this.notifyPlugins("resize",{size:o}),J(i.onResize,[this,o],this),this.attached&&this._doResize(r)&&this.render())}ensureScalesHaveIDs(){Q(this.options.scales||{},((t,e)=>{t.id=e}))}buildOrUpdateScales(){const t=this.options,e=t.scales,i=this.scales,s=Object.keys(i).reduce(((t,e)=>(t[e]=!1,t)),{});let n=[];e&&(n=n.concat(Object.keys(e).map((t=>{const i=e[t],s=Ys(t,i),n="r"===s,o="x"===s;return{options:i,dposition:n?"chartArea":o?"bottom":"left",dtype:n?"radialLinear":o?"category":"linear"}})))),Q(n,(e=>{const n=e.options,o=n.id,a=Ys(o,n),r=K(n.type,e.dtype);void 0!==n.position&&sn(n.position,a)===sn(e.dposition)||(n.position=e.dposition),s[o]=!0;let l=null;if(o in i&&i[o].type===r)l=i[o];else{l=new(Ws.getScale(r))({id:o,type:r,ctx:this.ctx,chart:this}),i[l.id]=l}l.init(n,t)})),Q(s,((t,e)=>{t||delete i[e]})),Q(i,(t=>{ni.configure(this,t,t.options),ni.addBox(this,t)}))}_updateMetasets(){const t=this._metasets,e=this.data.datasets.length,i=t.length;if(t.sort(((t,e)=>t.index-e.index)),i>e){for(let t=e;t<i;++t)this._destroyDatasetMeta(t);t.splice(e,i-e)}this._sortedMetasets=t.slice(0).sort(nn("order","index"))}_removeUnreferencedMetasets(){const{_metasets:t,data:{datasets:e}}=this;t.length>e.length&&delete this._stacks,t.forEach(((t,i)=>{0===e.filter((e=>e===t._dataset)).length&&this._destroyDatasetMeta(i)}))}buildOrUpdateControllers(){const t=[],e=this.data.datasets;let i,s;for(this._removeUnreferencedMetasets(),i=0,s=e.length;i<s;i++){const s=e[i];let n=this.getDatasetMeta(i);const o=s.type||this.config.type;if(n.type&&n.type!==o&&(this._destroyDatasetMeta(i),n=this.getDatasetMeta(i)),n.type=o,n.indexAxis=s.indexAxis||$s(o,this.options),n.order=s.order||0,n.index=i,n.label=""+s.label,n.visible=this.isDatasetVisible(i),n.controller)n.controller.updateIndex(i),n.controller.linkScales();else{const e=Ws.getController(o),{datasetElementType:s,dataElementType:a}=bt.datasets[o];Object.assign(e.prototype,{dataElementType:Ws.getElement(a),datasetElementType:s&&Ws.getElement(s)}),n.controller=new e(this,i),t.push(n.controller)}}return this._updateMetasets(),t}_resetElements(){Q(this.data.datasets,((t,e)=>{this.getDatasetMeta(e).controller.reset()}),this)}reset(){this._resetElements(),this.notifyPlugins("reset")}update(t){const e=this.config;e.update();const i=this._options=e.createResolver(e.chartOptionScopes(),this.getContext()),s=this._animationsDisabled=!i.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),!1===this.notifyPlugins("beforeUpdate",{mode:t,cancelable:!0}))return;const n=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let o=0;for(let t=0,e=this.data.datasets.length;t<e;t++){const{controller:e}=this.getDatasetMeta(t),i=!s&&-1===n.indexOf(e);e.buildOrUpdateElements(i),o=Math.max(+e.getMaxOverflow(),o)}o=this._minPadding=i.layout.autoPadding?o:0,this._updateLayout(o),s||Q(n,(t=>{t.reset()})),this._updateDatasets(t),this.notifyPlugins("afterUpdate",{mode:t}),this._layers.sort(nn("z","_idx"));const{_active:a,_lastEvent:r}=this;r?this._eventHandler(r,!0):a.length&&this._updateHoverStyles(a,a,!0),this.render()}_updateScales(){Q(this.scales,(t=>{ni.removeBox(this,t)})),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){const t=this.options,e=new Set(Object.keys(this._listeners)),i=new Set(t.events);ut(e,i)&&!!this._responsiveListeners===t.responsive||(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){const{_hiddenIndices:t}=this,e=this._getUniformDataChanges()||[];for(const{method:i,start:s,count:n}of e){cn(t,s,"_removeElements"===i?-n:n)}}_getUniformDataChanges(){const t=this._dataChanges;if(!t||!t.length)return;this._dataChanges=[];const e=this.data.datasets.length,i=e=>new Set(t.filter((t=>t[0]===e)).map(((t,e)=>e+","+t.splice(1).join(",")))),s=i(0);for(let t=1;t<e;t++)if(!ut(s,i(t)))return;return Array.from(s).map((t=>t.split(","))).map((t=>({method:t[1],start:+t[2],count:+t[3]})))}_updateLayout(t){if(!1===this.notifyPlugins("beforeLayout",{cancelable:!0}))return;ni.update(this,this.width,this.height,t);const e=this.chartArea,i=e.width<=0||e.height<=0;this._layers=[],Q(this.boxes,(t=>{i&&"chartArea"===t.position||(t.configure&&t.configure(),this._layers.push(...t._layers()))}),this),this._layers.forEach(((t,e)=>{t._idx=e})),this.notifyPlugins("afterLayout")}_updateDatasets(t){if(!1!==this.notifyPlugins("beforeDatasetsUpdate",{mode:t,cancelable:!0})){for(let t=0,e=this.data.datasets.length;t<e;++t)this.getDatasetMeta(t).controller.configure();for(let e=0,i=this.data.datasets.length;e<i;++e)this._updateDataset(e,dt(t)?t({datasetIndex:e}):t);this.notifyPlugins("afterDatasetsUpdate",{mode:t})}}_updateDataset(t,e){const i=this.getDatasetMeta(t),s={meta:i,index:t,mode:e,cancelable:!0};!1!==this.notifyPlugins("beforeDatasetUpdate",s)&&(i.controller._update(e),s.cancelable=!1,this.notifyPlugins("afterDatasetUpdate",s))}render(){!1!==this.notifyPlugins("beforeRender",{cancelable:!0})&&(a.has(this)?this.attached&&!a.running(this)&&a.start(this):(this.draw(),on({chart:this})))}draw(){let t;if(this._resizeBeforeDraw){const{width:t,height:e}=this._resizeBeforeDraw;this._resize(t,e),this._resizeBeforeDraw=null}if(this.clear(),this.width<=0||this.height<=0)return;if(!1===this.notifyPlugins("beforeDraw",{cancelable:!0}))return;const e=this._layers;for(t=0;t<e.length&&e[t].z<=0;++t)e[t].draw(this.chartArea);for(this._drawDatasets();t<e.length;++t)e[t].draw(this.chartArea);this.notifyPlugins("afterDraw")}_getSortedDatasetMetas(t){const e=this._sortedMetasets,i=[];let s,n;for(s=0,n=e.length;s<n;++s){const n=e[s];t&&!n.visible||i.push(n)}return i}getSortedVisibleDatasetMetas(){return this._getSortedDatasetMetas(!0)}_drawDatasets(){if(!1===this.notifyPlugins("beforeDatasetsDraw",{cancelable:!0}))return;const t=this.getSortedVisibleDatasetMetas();for(let e=t.length-1;e>=0;--e)this._drawDataset(t[e]);this.notifyPlugins("afterDatasetsDraw")}_drawDataset(t){const e=this.ctx,i=t._clip,s=!i.disabled,n=this.chartArea,o={meta:t,index:t.index,cancelable:!0};!1!==this.notifyPlugins("beforeDatasetDraw",o)&&(s&&Qt(e,{left:!1===i.left?0:n.left-i.left,right:!1===i.right?this.width:n.right+i.right,top:!1===i.top?0:n.top-i.top,bottom:!1===i.bottom?this.height:n.bottom+i.bottom}),t.controller.draw(),s&&te(e),o.cancelable=!1,this.notifyPlugins("afterDatasetDraw",o))}getElementsAtEventForMode(t,e,i,s){const n=Ee.modes[e];return"function"==typeof n?n(this,t,i,s):[]}getDatasetMeta(t){const e=this.data.datasets[t],i=this._metasets;let s=i.filter((t=>t&&t._dataset===e)).pop();return s||(s={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e&&e.order||0,index:t,_dataset:e,_parsed:[],_sorted:!1},i.push(s)),s}getContext(){return this.$context||(this.$context=Ye(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){const e=this.data.datasets[t];if(!e)return!1;const i=this.getDatasetMeta(t);return"boolean"==typeof i.hidden?!i.hidden:!e.hidden}setDatasetVisibility(t,e){this.getDatasetMeta(t).hidden=!e}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateVisibility(t,e,i){const s=i?"show":"hide",n=this.getDatasetMeta(t),o=n.controller._resolveAnimations(void 0,s);ct(e)?(n.data[e].hidden=!i,this.update()):(this.setDatasetVisibility(t,i),o.update(n,{visible:i}),this.update((e=>e.datasetIndex===t?s:void 0)))}hide(t,e){this._updateVisibility(t,e,!1)}show(t,e){this._updateVisibility(t,e,!0)}_destroyDatasetMeta(t){const e=this._metasets[t];e&&e.controller&&e.controller._destroy(),delete this._metasets[t]}_stop(){let t,e;for(this.stop(),a.remove(this),t=0,e=this.data.datasets.length;t<e;++t)this._destroyDatasetMeta(t)}destroy(){this.notifyPlugins("beforeDestroy");const{canvas:t,ctx:e}=this;this._stop(),this.config.clearCache(),t&&(this.unbindEvents(),Gt(t,e),this.platform.releaseContext(e),this.canvas=null,this.ctx=null),this.notifyPlugins("destroy"),delete ln[this.id],this.notifyPlugins("afterDestroy")}toBase64Image(...t){return this.canvas.toDataURL(...t)}bindEvents(){this.bindUserEvents(),this.options.responsive?this.bindResponsiveEvents():this.attached=!0}bindUserEvents(){const t=this._listeners,e=this.platform,i=(i,s)=>{e.addEventListener(this,i,s),t[i]=s},s=(t,e,i)=>{t.offsetX=e,t.offsetY=i,this._eventHandler(t)};Q(this.options.events,(t=>i(t,s)))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});const t=this._responsiveListeners,e=this.platform,i=(i,s)=>{e.addEventListener(this,i,s),t[i]=s},s=(i,s)=>{t[i]&&(e.removeEventListener(this,i,s),delete t[i])},n=(t,e)=>{this.canvas&&this.resize(t,e)};let o;const a=()=>{s("attach",a),this.attached=!0,this.resize(),i("resize",n),i("detach",o)};o=()=>{this.attached=!1,s("resize",n),this._stop(),this._resize(0,0),i("attach",a)},e.isAttached(this.canvas)?a():o()}unbindEvents(){Q(this._listeners,((t,e)=>{this.platform.removeEventListener(this,e,t)})),this._listeners={},Q(this._responsiveListeners,((t,e)=>{this.platform.removeEventListener(this,e,t)})),this._responsiveListeners=void 0}updateHoverStyle(t,e,i){const s=i?"set":"remove";let n,o,a,r;for("dataset"===e&&(n=this.getDatasetMeta(t[0].datasetIndex),n.controller["_"+s+"DatasetHoverStyle"]()),a=0,r=t.length;a<r;++a){o=t[a];const e=o&&this.getDatasetMeta(o.datasetIndex).controller;e&&e[s+"HoverStyle"](o.element,o.datasetIndex,o.index)}}getActiveElements(){return this._active||[]}setActiveElements(t){const e=this._active||[],i=t.map((({datasetIndex:t,index:e})=>{const i=this.getDatasetMeta(t);if(!i)throw new Error("No dataset found at index "+t);return{datasetIndex:t,element:i.data[e],index:e}}));!tt(i,e)&&(this._active=i,this._lastEvent=null,this._updateHoverStyles(i,e))}notifyPlugins(t,e,i){return this._plugins.notify(this,t,e,i)}_updateHoverStyles(t,e,i){const s=this.options.hover,n=(t,e)=>t.filter((t=>!e.some((e=>t.datasetIndex===e.datasetIndex&&t.index===e.index)))),o=n(e,t),a=i?t:n(t,e);o.length&&this.updateHoverStyle(o,s.mode,!1),a.length&&s.mode&&this.updateHoverStyle(a,s.mode,!0)}_eventHandler(t,e){const i={event:t,replay:e,cancelable:!0,inChartArea:Jt(t,this.chartArea,this._minPadding)},s=e=>(e.options.events||this.options.events).includes(t.native.type);if(!1===this.notifyPlugins("beforeEvent",i,s))return;const n=this._handleEvent(t,e,i.inChartArea);return i.cancelable=!1,this.notifyPlugins("afterEvent",i,s),(n||i.changed)&&this.render(),this}_handleEvent(t,e,i){const{_active:s=[],options:n}=this,o=e,a=this._getActiveElements(t,s,i,o),r=ft(t),l=function(t,e,i,s){return i&&"mouseout"!==t.type?s?e:t:null}(t,this._lastEvent,i,r);i&&(this._lastEvent=null,J(n.onHover,[t,a,this],this),r&&J(n.onClick,[t,a,this],this));const h=!tt(a,s);return(h||e)&&(this._active=a,this._updateHoverStyles(a,s,e)),this._lastEvent=l,h}_getActiveElements(t,e,i,s){if("mouseout"===t.type)return[];if(!i)return e;const n=this.options.hover;return this.getElementsAtEventForMode(t,n.mode,n,s)}}const un=()=>Q(dn.instances,(t=>t._plugins.invalidate())),fn=!0;function gn(){throw new Error("This method is not implemented: Check that a complete date adapter is provided.")}Object.defineProperties(dn,{defaults:{enumerable:fn,value:bt},instances:{enumerable:fn,value:ln},overrides:{enumerable:fn,value:gt},registry:{enumerable:fn,value:Ws},version:{enumerable:fn,value:"3.7.0"},getChart:{enumerable:fn,value:hn},register:{enumerable:fn,value:(...t)=>{Ws.add(...t),un()}},unregister:{enumerable:fn,value:(...t)=>{Ws.remove(...t),un()}}});class pn{constructor(t){this.options=t||{}}formats(){return gn()}parse(t,e){return gn()}format(t,e){return gn()}add(t,e,i){return gn()}diff(t,e,i){return gn()}startOf(t,e,i){return gn()}endOf(t,e){return gn()}}pn.override=function(t){Object.assign(pn.prototype,t)};var mn={_date:pn};function xn(t){const e=t.iScale,i=function(t,e){if(!t._cache.$bar){const i=t.getMatchingVisibleMetas(e);let s=[];for(let e=0,n=i.length;e<n;e++)s=s.concat(i[e].controller.getAllParsedValues(t));t._cache.$bar=fe(s.sort(((t,e)=>t-e)))}return t._cache.$bar}(e,t.type);let s,n,o,a,r=e._length;const l=()=>{32767!==o&&-32768!==o&&(ct(a)&&(r=Math.min(r,Math.abs(o-a)||r)),a=o)};for(s=0,n=i.length;s<n;++s)o=e.getPixelForValue(i[s]),l();for(a=void 0,s=0,n=e.ticks.length;s<n;++s)o=e.getPixelForTick(s),l();return r}function bn(t,e,i,s){return Y(t)?function(t,e,i,s){const n=i.parse(t[0],s),o=i.parse(t[1],s),a=Math.min(n,o),r=Math.max(n,o);let l=a,h=r;Math.abs(a)>Math.abs(r)&&(l=r,h=a),e[i.axis]=h,e._custom={barStart:l,barEnd:h,start:n,end:o,min:a,max:r}}(t,e,i,s):e[i.axis]=i.parse(t,s),e}function _n(t,e,i,s){const n=t.iScale,o=t.vScale,a=n.getLabels(),r=n===o,l=[];let h,c,d,u;for(h=i,c=i+s;h<c;++h)u=e[h],d={},d[n.axis]=r||n.parse(a[h],h),l.push(bn(u,d,o,h));return l}function yn(t){return t&&void 0!==t.barStart&&void 0!==t.barEnd}function vn(t,e,i,s){let n=e.borderSkipped;const o={};if(!n)return void(t.borderSkipped=o);const{start:a,end:r,reverse:l,top:h,bottom:c}=function(t){let e,i,s,n,o;return t.horizontal?(e=t.base>t.x,i="left",s="right"):(e=t.base<t.y,i="bottom",s="top"),e?(n="end",o="start"):(n="start",o="end"),{start:i,end:s,reverse:e,top:n,bottom:o}}(t);"middle"===n&&i&&(t.enableBorderRadius=!0,(i._top||0)===s?n=h:(i._bottom||0)===s?n=c:(o[wn(c,a,r,l)]=!0,n=h)),o[wn(n,a,r,l)]=!0,t.borderSkipped=o}function wn(t,e,i,s){var n,o,a;return s?(a=i,t=Mn(t=(n=t)===(o=e)?a:n===a?o:n,i,e)):t=Mn(t,e,i),t}function Mn(t,e,i){return"start"===t?e:"end"===t?i:t}function kn(t,{inflateAmount:e},i){t.inflateAmount="auto"===e?1===i?.33:0:e}class Sn extends Ps{parsePrimitiveData(t,e,i,s){return _n(t,e,i,s)}parseArrayData(t,e,i,s){return _n(t,e,i,s)}parseObjectData(t,e,i,s){const{iScale:n,vScale:o}=t,{xAxisKey:a="x",yAxisKey:r="y"}=this._parsing,l="x"===n.axis?a:r,h="x"===o.axis?a:r,c=[];let d,u,f,g;for(d=i,u=i+s;d<u;++d)g=e[d],f={},f[n.axis]=n.parse(lt(g,l),d),c.push(bn(lt(g,h),f,o,d));return c}updateRangeFromParsed(t,e,i,s){super.updateRangeFromParsed(t,e,i,s);const n=i._custom;n&&e===this._cachedMeta.vScale&&(t.min=Math.min(t.min,n.min),t.max=Math.max(t.max,n.max))}getMaxOverflow(){return 0}getLabelAndValue(t){const e=this._cachedMeta,{iScale:i,vScale:s}=e,n=this.getParsed(t),o=n._custom,a=yn(o)?"["+o.start+", "+o.end+"]":""+s.getLabelForValue(n[s.axis]);return{label:""+i.getLabelForValue(n[i.axis]),value:a}}initialize(){this.enableOptionSharing=!0,super.initialize();this._cachedMeta.stack=this.getDataset().stack}update(t){const e=this._cachedMeta;this.updateElements(e.data,0,e.data.length,t)}updateElements(t,e,i,s){const n="reset"===s,{index:o,_cachedMeta:{vScale:a}}=this,r=a.getBasePixel(),l=a.isHorizontal(),h=this._getRuler(),c=this.resolveDataElementOptions(e,s),d=this.getSharedOptions(c),u=this.includeOptions(s,d);this.updateSharedOptions(d,s,c);for(let c=e;c<e+i;c++){const e=this.getParsed(c),i=n||$(e[a.axis])?{base:r,head:r}:this._calculateBarValuePixels(c),f=this._calculateBarIndexPixels(c,h),g=(e._stacks||{})[a.axis],p={horizontal:l,base:i.base,enableBorderRadius:!g||yn(e._custom)||o===g._top||o===g._bottom,x:l?i.head:f.center,y:l?f.center:i.head,height:l?f.size:Math.abs(i.size),width:l?Math.abs(i.size):f.size};u&&(p.options=d||this.resolveDataElementOptions(c,t[c].active?"active":s));const m=p.options||t[c].options;vn(p,m,g,o),kn(p,m,h.ratio),this.updateElement(t[c],c,p,s)}}_getStacks(t,e){const i=this._cachedMeta.iScale,s=i.getMatchingVisibleMetas(this._type),n=i.options.stacked,o=s.length,a=[];let r,l;for(r=0;r<o;++r)if(l=s[r],l.controller.options.grouped){if(void 0!==e){const t=l.controller.getParsed(e)[l.controller._cachedMeta.vScale.axis];if($(t)||isNaN(t))continue}if((!1===n||-1===a.indexOf(l.stack)||void 0===n&&void 0===l.stack)&&a.push(l.stack),l.index===t)break}return a.length||a.push(void 0),a}_getStackCount(t){return this._getStacks(void 0,t).length}_getStackIndex(t,e,i){const s=this._getStacks(t,i),n=void 0!==e?s.indexOf(e):-1;return-1===n?s.length-1:n}_getRuler(){const t=this.options,e=this._cachedMeta,i=e.iScale,s=[];let n,o;for(n=0,o=e.data.length;n<o;++n)s.push(i.getPixelForValue(this.getParsed(n)[i.axis],n));const a=t.barThickness;return{min:a||xn(e),pixels:s,start:i._startPixel,end:i._endPixel,stackCount:this._getStackCount(),scale:i,grouped:t.grouped,ratio:a?1:t.categoryPercentage*t.barPercentage}}_calculateBarValuePixels(t){const{_cachedMeta:{vScale:e,_stacked:i},options:{base:s,minBarLength:n}}=this,o=s||0,a=this.getParsed(t),r=a._custom,l=yn(r);let h,c,d=a[e.axis],u=0,f=i?this.applyStack(e,a,i):d;f!==d&&(u=f-d,f=d),l&&(d=r.barStart,f=r.barEnd-r.barStart,0!==d&&Ct(d)!==Ct(r.barEnd)&&(u=0),u+=d);const g=$(s)||l?u:s;let p=e.getPixelForValue(g);if(h=this.chart.getDataVisibility(t)?e.getPixelForValue(u+f):p,c=h-p,Math.abs(c)<n&&(c=function(t,e,i){return 0!==t?Ct(t):(e.isHorizontal()?1:-1)*(e.min>=i?1:-1)}(c,e,o)*n,d===o&&(p-=c/2),h=p+c),p===e.getPixelForValue(o)){const t=Ct(c)*e.getLineWidthForValue(o)/2;p+=t,c-=t}return{size:c,base:p,head:h,center:h+c/2}}_calculateBarIndexPixels(t,e){const i=e.scale,s=this.options,n=s.skipNull,o=K(s.maxBarThickness,1/0);let a,r;if(e.grouped){const i=n?this._getStackCount(t):e.stackCount,l="flex"===s.barThickness?function(t,e,i,s){const n=e.pixels,o=n[t];let a=t>0?n[t-1]:null,r=t<n.length-1?n[t+1]:null;const l=i.categoryPercentage;null===a&&(a=o-(null===r?e.end-e.start:r-o)),null===r&&(r=o+o-a);const h=o-(o-Math.min(a,r))/2*l;return{chunk:Math.abs(r-a)/2*l/s,ratio:i.barPercentage,start:h}}(t,e,s,i):function(t,e,i,s){const n=i.barThickness;let o,a;return $(n)?(o=e.min*i.categoryPercentage,a=i.barPercentage):(o=n*s,a=1),{chunk:o/s,ratio:a,start:e.pixels[t]-o/2}}(t,e,s,i),h=this._getStackIndex(this.index,this._cachedMeta.stack,n?t:void 0);a=l.start+l.chunk*h+l.chunk/2,r=Math.min(o,l.chunk*l.ratio)}else a=i.getPixelForValue(this.getParsed(t)[i.axis],t),r=Math.min(o,e.min*e.ratio);return{base:a-r/2,head:a+r/2,center:a,size:r}}draw(){const t=this._cachedMeta,e=t.vScale,i=t.data,s=i.length;let n=0;for(;n<s;++n)null!==this.getParsed(n)[e.axis]&&i[n].draw(this._ctx)}}Sn.id="bar",Sn.defaults={datasetElementType:!1,dataElementType:"bar",categoryPercentage:.8,barPercentage:.9,grouped:!0,animations:{numbers:{type:"number",properties:["x","y","base","width","height"]}}},Sn.overrides={scales:{_index_:{type:"category",offset:!0,grid:{offset:!0}},_value_:{type:"linear",beginAtZero:!0}}};class Pn extends Ps{initialize(){this.enableOptionSharing=!0,super.initialize()}parsePrimitiveData(t,e,i,s){const n=super.parsePrimitiveData(t,e,i,s);for(let t=0;t<n.length;t++)n[t]._custom=this.resolveDataElementOptions(t+i).radius;return n}parseArrayData(t,e,i,s){const n=super.parseArrayData(t,e,i,s);for(let t=0;t<n.length;t++){const s=e[i+t];n[t]._custom=K(s[2],this.resolveDataElementOptions(t+i).radius)}return n}parseObjectData(t,e,i,s){const n=super.parseObjectData(t,e,i,s);for(let t=0;t<n.length;t++){const s=e[i+t];n[t]._custom=K(s&&s.r&&+s.r,this.resolveDataElementOptions(t+i).radius)}return n}getMaxOverflow(){const t=this._cachedMeta.data;let e=0;for(let i=t.length-1;i>=0;--i)e=Math.max(e,t[i].size(this.resolveDataElementOptions(i))/2);return e>0&&e}getLabelAndValue(t){const e=this._cachedMeta,{xScale:i,yScale:s}=e,n=this.getParsed(t),o=i.getLabelForValue(n.x),a=s.getLabelForValue(n.y),r=n._custom;return{label:e.label,value:"("+o+", "+a+(r?", "+r:"")+")"}}update(t){const e=this._cachedMeta.data;this.updateElements(e,0,e.length,t)}updateElements(t,e,i,s){const n="reset"===s,{iScale:o,vScale:a}=this._cachedMeta,r=this.resolveDataElementOptions(e,s),l=this.getSharedOptions(r),h=this.includeOptions(s,l),c=o.axis,d=a.axis;for(let r=e;r<e+i;r++){const e=t[r],i=!n&&this.getParsed(r),l={},u=l[c]=n?o.getPixelForDecimal(.5):o.getPixelForValue(i[c]),f=l[d]=n?a.getBasePixel():a.getPixelForValue(i[d]);l.skip=isNaN(u)||isNaN(f),h&&(l.options=this.resolveDataElementOptions(r,e.active?"active":s),n&&(l.options.radius=0)),this.updateElement(e,r,l,s)}this.updateSharedOptions(l,s,r)}resolveDataElementOptions(t,e){const i=this.getParsed(t);let s=super.resolveDataElementOptions(t,e);s.$shared&&(s=Object.assign({},s,{$shared:!1}));const n=s.radius;return"active"!==e&&(s.radius=0),s.radius+=K(i&&i._custom,n),s}}Pn.id="bubble",Pn.defaults={datasetElementType:!1,dataElementType:"point",animations:{numbers:{type:"number",properties:["x","y","borderWidth","radius"]}}},Pn.overrides={scales:{x:{type:"linear"},y:{type:"linear"}},plugins:{tooltip:{callbacks:{title:()=>""}}}};class Dn extends Ps{constructor(t,e){super(t,e),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(t,e){const i=this.getDataset().data,s=this._cachedMeta;if(!1===this._parsing)s._parsed=i;else{let n,o,a=t=>+i[t];if(U(i[t])){const{key:t="value"}=this._parsing;a=e=>+lt(i[e],t)}for(n=t,o=t+e;n<o;++n)s._parsed[n]=a(n)}}_getRotation(){return It(this.options.rotation-90)}_getCircumference(){return It(this.options.circumference)}_getRotationExtents(){let t=yt,e=-yt;for(let i=0;i<this.chart.data.datasets.length;++i)if(this.chart.isDatasetVisible(i)){const s=this.chart.getDatasetMeta(i).controller,n=s._getRotation(),o=s._getCircumference();t=Math.min(t,n),e=Math.max(e,n+o)}return{rotation:t,circumference:e-t}}update(t){const e=this.chart,{chartArea:i}=e,s=this._cachedMeta,n=s.data,o=this.getMaxBorderWidth()+this.getMaxOffset(n)+this.options.spacing,a=Math.max((Math.min(i.width,i.height)-o)/2,0),r=Math.min(G(this.options.cutout,a),1),l=this._getRingWeight(this.index),{circumference:h,rotation:c}=this._getRotationExtents(),{ratioX:d,ratioY:u,offsetX:f,offsetY:g}=function(t,e,i){let s=1,n=1,o=0,a=0;if(e<yt){const r=t,l=r+e,h=Math.cos(r),c=Math.sin(r),d=Math.cos(l),u=Math.sin(l),f=(t,e,s)=>Ht(t,r,l,!0)?1:Math.max(e,e*i,s,s*i),g=(t,e,s)=>Ht(t,r,l,!0)?-1:Math.min(e,e*i,s,s*i),p=f(0,h,d),m=f(kt,c,u),x=g(_t,h,d),b=g(_t+kt,c,u);s=(p-x)/2,n=(m-b)/2,o=-(p+x)/2,a=-(m+b)/2}return{ratioX:s,ratioY:n,offsetX:o,offsetY:a}}(c,h,r),p=(i.width-o)/d,m=(i.height-o)/u,x=Math.max(Math.min(p,m)/2,0),b=Z(this.options.radius,x),_=(b-Math.max(b*r,0))/this._getVisibleDatasetWeightTotal();this.offsetX=f*b,this.offsetY=g*b,s.total=this.calculateTotal(),this.outerRadius=b-_*this._getRingWeightOffset(this.index),this.innerRadius=Math.max(this.outerRadius-_*l,0),this.updateElements(n,0,n.length,t)}_circumference(t,e){const i=this.options,s=this._cachedMeta,n=this._getCircumference();return e&&i.animation.animateRotate||!this.chart.getDataVisibility(t)||null===s._parsed[t]||s.data[t].hidden?0:this.calculateCircumference(s._parsed[t]*n/yt)}updateElements(t,e,i,s){const n="reset"===s,o=this.chart,a=o.chartArea,r=o.options.animation,l=(a.left+a.right)/2,h=(a.top+a.bottom)/2,c=n&&r.animateScale,d=c?0:this.innerRadius,u=c?0:this.outerRadius,f=this.resolveDataElementOptions(e,s),g=this.getSharedOptions(f),p=this.includeOptions(s,g);let m,x=this._getRotation();for(m=0;m<e;++m)x+=this._circumference(m,n);for(m=e;m<e+i;++m){const e=this._circumference(m,n),i=t[m],o={x:l+this.offsetX,y:h+this.offsetY,startAngle:x,endAngle:x+e,circumference:e,outerRadius:u,innerRadius:d};p&&(o.options=g||this.resolveDataElementOptions(m,i.active?"active":s)),x+=e,this.updateElement(i,m,o,s)}this.updateSharedOptions(g,s,f)}calculateTotal(){const t=this._cachedMeta,e=t.data;let i,s=0;for(i=0;i<e.length;i++){const n=t._parsed[i];null===n||isNaN(n)||!this.chart.getDataVisibility(i)||e[i].hidden||(s+=Math.abs(n))}return s}calculateCircumference(t){const e=this._cachedMeta.total;return e>0&&!isNaN(t)?yt*(Math.abs(t)/e):0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],n=Ri(e._parsed[t],i.options.locale);return{label:s[t]||"",value:n}}getMaxBorderWidth(t){let e=0;const i=this.chart;let s,n,o,a,r;if(!t)for(s=0,n=i.data.datasets.length;s<n;++s)if(i.isDatasetVisible(s)){o=i.getDatasetMeta(s),t=o.data,a=o.controller;break}if(!t)return 0;for(s=0,n=t.length;s<n;++s)r=a.resolveDataElementOptions(s),"inner"!==r.borderAlign&&(e=Math.max(e,r.borderWidth||0,r.hoverBorderWidth||0));return e}getMaxOffset(t){let e=0;for(let i=0,s=t.length;i<s;++i){const t=this.resolveDataElementOptions(i);e=Math.max(e,t.offset||0,t.hoverOffset||0)}return e}_getRingWeightOffset(t){let e=0;for(let i=0;i<t;++i)this.chart.isDatasetVisible(i)&&(e+=this._getRingWeight(i));return e}_getRingWeight(t){return Math.max(K(this.chart.data.datasets[t].weight,1),0)}_getVisibleDatasetWeightTotal(){return this._getRingWeightOffset(this.chart.data.datasets.length)||1}}Dn.id="doughnut",Dn.defaults={datasetElementType:!1,dataElementType:"arc",animation:{animateRotate:!0,animateScale:!1},animations:{numbers:{type:"number",properties:["circumference","endAngle","innerRadius","outerRadius","startAngle","x","y","offset","borderWidth","spacing"]}},cutout:"50%",rotation:0,circumference:360,radius:"100%",spacing:0,indexAxis:"r"},Dn.descriptors={_scriptable:t=>"spacing"!==t,_indexable:t=>"spacing"!==t},Dn.overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length){const{labels:{pointStyle:i}}=t.legend.options;return e.labels.map(((e,s)=>{const n=t.getDatasetMeta(0).controller.getStyle(s);return{text:e,fillStyle:n.backgroundColor,strokeStyle:n.borderColor,lineWidth:n.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(s),index:s}}))}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}},tooltip:{callbacks:{title:()=>"",label(t){let e=t.label;const i=": "+t.formattedValue;return Y(e)?(e=e.slice(),e[0]+=i):e+=i,e}}}}};class Cn extends Ps{initialize(){this.enableOptionSharing=!0,super.initialize()}update(t){const e=this._cachedMeta,{dataset:i,data:s=[],_dataset:n}=e,o=this.chart._animationsDisabled;let{start:a,count:r}=function(t,e,i){const s=e.length;let n=0,o=s;if(t._sorted){const{iScale:a,_parsed:r}=t,l=a.axis,{min:h,max:c,minDefined:d,maxDefined:u}=a.getUserBounds();d&&(n=jt(Math.min(re(r,a.axis,h).lo,i?s:re(e,l,a.getPixelForValue(h)).lo),0,s-1)),o=u?jt(Math.max(re(r,a.axis,c).hi+1,i?0:re(e,l,a.getPixelForValue(c)).hi+1),n,s)-n:s-n}return{start:n,count:o}}(e,s,o);this._drawStart=a,this._drawCount=r,function(t){const{xScale:e,yScale:i,_scaleRanges:s}=t,n={xmin:e.min,xmax:e.max,ymin:i.min,ymax:i.max};if(!s)return t._scaleRanges=n,!0;const o=s.xmin!==e.min||s.xmax!==e.max||s.ymin!==i.min||s.ymax!==i.max;return Object.assign(s,n),o}(e)&&(a=0,r=s.length),i._chart=this.chart,i._datasetIndex=this.index,i._decimated=!!n._decimated,i.points=s;const l=this.resolveDatasetElementOptions(t);this.options.showLine||(l.borderWidth=0),l.segment=this.options.segment,this.updateElement(i,void 0,{animated:!o,options:l},t),this.updateElements(s,a,r,t)}updateElements(t,e,i,s){const n="reset"===s,{iScale:o,vScale:a,_stacked:r,_dataset:l}=this._cachedMeta,h=this.resolveDataElementOptions(e,s),c=this.getSharedOptions(h),d=this.includeOptions(s,c),u=o.axis,f=a.axis,{spanGaps:g,segment:p}=this.options,m=Tt(g)?g:Number.POSITIVE_INFINITY,x=this.chart._animationsDisabled||n||"none"===s;let b=e>0&&this.getParsed(e-1);for(let h=e;h<e+i;++h){const e=t[h],i=this.getParsed(h),g=x?e:{},_=$(i[f]),y=g[u]=o.getPixelForValue(i[u],h),v=g[f]=n||_?a.getBasePixel():a.getPixelForValue(r?this.applyStack(a,i,r):i[f],h);g.skip=isNaN(y)||isNaN(v)||_,g.stop=h>0&&i[u]-b[u]>m,p&&(g.parsed=i,g.raw=l.data[h]),d&&(g.options=c||this.resolveDataElementOptions(h,e.active?"active":s)),x||this.updateElement(e,h,g,s),b=i}this.updateSharedOptions(c,s,h)}getMaxOverflow(){const t=this._cachedMeta,e=t.dataset,i=e.options&&e.options.borderWidth||0,s=t.data||[];if(!s.length)return i;const n=s[0].size(this.resolveDataElementOptions(0)),o=s[s.length-1].size(this.resolveDataElementOptions(s.length-1));return Math.max(i,n,o)/2}draw(){const t=this._cachedMeta;t.dataset.updateControlPoints(this.chart.chartArea,t.iScale.axis),super.draw()}}Cn.id="line",Cn.defaults={datasetElementType:"line",dataElementType:"point",showLine:!0,spanGaps:!1},Cn.overrides={scales:{_index_:{type:"category"},_value_:{type:"linear"}}};class On extends Ps{constructor(t,e){super(t,e),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],n=Ri(e._parsed[t].r,i.options.locale);return{label:s[t]||"",value:n}}update(t){const e=this._cachedMeta.data;this._updateRadius(),this.updateElements(e,0,e.length,t)}_updateRadius(){const t=this.chart,e=t.chartArea,i=t.options,s=Math.min(e.right-e.left,e.bottom-e.top),n=Math.max(s/2,0),o=(n-Math.max(i.cutoutPercentage?n/100*i.cutoutPercentage:1,0))/t.getVisibleDatasetCount();this.outerRadius=n-o*this.index,this.innerRadius=this.outerRadius-o}updateElements(t,e,i,s){const n="reset"===s,o=this.chart,a=this.getDataset(),r=o.options.animation,l=this._cachedMeta.rScale,h=l.xCenter,c=l.yCenter,d=l.getIndexAngle(0)-.5*_t;let u,f=d;const g=360/this.countVisibleElements();for(u=0;u<e;++u)f+=this._computeAngle(u,s,g);for(u=e;u<e+i;u++){const e=t[u];let i=f,p=f+this._computeAngle(u,s,g),m=o.getDataVisibility(u)?l.getDistanceFromCenterForValue(a.data[u]):0;f=p,n&&(r.animateScale&&(m=0),r.animateRotate&&(i=p=d));const x={x:h,y:c,innerRadius:0,outerRadius:m,startAngle:i,endAngle:p,options:this.resolveDataElementOptions(u,e.active?"active":s)};this.updateElement(e,u,x,s)}}countVisibleElements(){const t=this.getDataset(),e=this._cachedMeta;let i=0;return e.data.forEach(((e,s)=>{!isNaN(t.data[s])&&this.chart.getDataVisibility(s)&&i++})),i}_computeAngle(t,e,i){return this.chart.getDataVisibility(t)?It(this.resolveDataElementOptions(t,e).angle||i):0}}On.id="polarArea",On.defaults={dataElementType:"arc",animation:{animateRotate:!0,animateScale:!0},animations:{numbers:{type:"number",properties:["x","y","startAngle","endAngle","innerRadius","outerRadius"]}},indexAxis:"r",startAngle:0},On.overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length){const{labels:{pointStyle:i}}=t.legend.options;return e.labels.map(((e,s)=>{const n=t.getDatasetMeta(0).controller.getStyle(s);return{text:e,fillStyle:n.backgroundColor,strokeStyle:n.borderColor,lineWidth:n.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(s),index:s}}))}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}},tooltip:{callbacks:{title:()=>"",label:t=>t.chart.data.labels[t.dataIndex]+": "+t.formattedValue}}},scales:{r:{type:"radialLinear",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}};class An extends Dn{}An.id="pie",An.defaults={cutout:0,rotation:0,circumference:360,radius:"100%"};class Tn extends Ps{getLabelAndValue(t){const e=this._cachedMeta.vScale,i=this.getParsed(t);return{label:e.getLabels()[t],value:""+e.getLabelForValue(i[e.axis])}}update(t){const e=this._cachedMeta,i=e.dataset,s=e.data||[],n=e.iScale.getLabels();if(i.points=s,"resize"!==t){const e=this.resolveDatasetElementOptions(t);this.options.showLine||(e.borderWidth=0);const o={_loop:!0,_fullLoop:n.length===s.length,options:e};this.updateElement(i,void 0,o,t)}this.updateElements(s,0,s.length,t)}updateElements(t,e,i,s){const n=this.getDataset(),o=this._cachedMeta.rScale,a="reset"===s;for(let r=e;r<e+i;r++){const e=t[r],i=this.resolveDataElementOptions(r,e.active?"active":s),l=o.getPointPositionForValue(r,n.data[r]),h=a?o.xCenter:l.x,c=a?o.yCenter:l.y,d={x:h,y:c,angle:l.angle,skip:isNaN(h)||isNaN(c),options:i};this.updateElement(e,r,d,s)}}}Tn.id="radar",Tn.defaults={datasetElementType:"line",dataElementType:"point",indexAxis:"r",showLine:!0,elements:{line:{fill:"start"}}},Tn.overrides={aspectRatio:1,scales:{r:{type:"radialLinear"}}};class Ln extends Cn{}Ln.id="scatter",Ln.defaults={showLine:!1,fill:!1},Ln.overrides={interaction:{mode:"point"},plugins:{tooltip:{callbacks:{title:()=>"",label:t=>"("+t.label+", "+t.formattedValue+")"}}},scales:{x:{type:"linear"},y:{type:"linear"}}};var Rn=Object.freeze({__proto__:null,BarController:Sn,BubbleController:Pn,DoughnutController:Dn,LineController:Cn,PolarAreaController:On,PieController:An,RadarController:Tn,ScatterController:Ln});function En(t,e,i){const{startAngle:s,pixelMargin:n,x:o,y:a,outerRadius:r,innerRadius:l}=e;let h=n/r;t.beginPath(),t.arc(o,a,r,s-h,i+h),l>n?(h=n/l,t.arc(o,a,l,i+h,s-h,!0)):t.arc(o,a,n,i+kt,s-kt),t.closePath(),t.clip()}function In(t,e,i,s){const n=Be(t.options.borderRadius,["outerStart","outerEnd","innerStart","innerEnd"]);const o=(i-e)/2,a=Math.min(o,s*e/2),r=t=>{const e=(i-Math.min(o,t))*s/2;return jt(t,0,Math.min(o,e))};return{outerStart:r(n.outerStart),outerEnd:r(n.outerEnd),innerStart:jt(n.innerStart,0,a),innerEnd:jt(n.innerEnd,0,a)}}function zn(t,e,i,s){return{x:i+t*Math.cos(e),y:s+t*Math.sin(e)}}function Fn(t,e,i,s,n){const{x:o,y:a,startAngle:r,pixelMargin:l,innerRadius:h}=e,c=Math.max(e.outerRadius+s+i-l,0),d=h>0?h+s+i+l:0;let u=0;const f=n-r;if(s){const t=((h>0?h-s:0)+(c>0?c-s:0))/2;u=(f-(0!==t?f*t/(t+s):f))/2}const g=(f-Math.max(.001,f*c-i/_t)/c)/2,p=r+g+u,m=n-g-u,{outerStart:x,outerEnd:b,innerStart:_,innerEnd:y}=In(e,d,c,m-p),v=c-x,w=c-b,M=p+x/v,k=m-b/w,S=d+_,P=d+y,D=p+_/S,C=m-y/P;if(t.beginPath(),t.arc(o,a,c,M,k),b>0){const e=zn(w,k,o,a);t.arc(e.x,e.y,b,k,m+kt)}const O=zn(P,m,o,a);if(t.lineTo(O.x,O.y),y>0){const e=zn(P,C,o,a);t.arc(e.x,e.y,y,m+kt,C+Math.PI)}if(t.arc(o,a,d,m-y/d,p+_/d,!0),_>0){const e=zn(S,D,o,a);t.arc(e.x,e.y,_,D+Math.PI,p-kt)}const A=zn(v,p,o,a);if(t.lineTo(A.x,A.y),x>0){const e=zn(v,M,o,a);t.arc(e.x,e.y,x,p-kt,M)}t.closePath()}function Bn(t,e,i,s,n){const{options:o}=e,{borderWidth:a,borderJoinStyle:r}=o,l="inner"===o.borderAlign;a&&(l?(t.lineWidth=2*a,t.lineJoin=r||"round"):(t.lineWidth=a,t.lineJoin=r||"bevel"),e.fullCircles&&function(t,e,i){const{x:s,y:n,startAngle:o,pixelMargin:a,fullCircles:r}=e,l=Math.max(e.outerRadius-a,0),h=e.innerRadius+a;let c;for(i&&En(t,e,o+yt),t.beginPath(),t.arc(s,n,h,o+yt,o,!0),c=0;c<r;++c)t.stroke();for(t.beginPath(),t.arc(s,n,l,o,o+yt),c=0;c<r;++c)t.stroke()}(t,e,l),l&&En(t,e,n),Fn(t,e,i,s,n),t.stroke())}class Vn extends Ds{constructor(t){super(),this.options=void 0,this.circumference=void 0,this.startAngle=void 0,this.endAngle=void 0,this.innerRadius=void 0,this.outerRadius=void 0,this.pixelMargin=0,this.fullCircles=0,t&&Object.assign(this,t)}inRange(t,e,i){const s=this.getProps(["x","y"],i),{angle:n,distance:o}=Bt(s,{x:t,y:e}),{startAngle:a,endAngle:r,innerRadius:l,outerRadius:h,circumference:c}=this.getProps(["startAngle","endAngle","innerRadius","outerRadius","circumference"],i),d=this.options.spacing/2,u=K(c,r-a)>=yt||Ht(n,a,r),f=Yt(o,l+d,h+d);return u&&f}getCenterPoint(t){const{x:e,y:i,startAngle:s,endAngle:n,innerRadius:o,outerRadius:a}=this.getProps(["x","y","startAngle","endAngle","innerRadius","outerRadius","circumference"],t),{offset:r,spacing:l}=this.options,h=(s+n)/2,c=(o+a+l+r)/2;return{x:e+Math.cos(h)*c,y:i+Math.sin(h)*c}}tooltipPosition(t){return this.getCenterPoint(t)}draw(t){const{options:e,circumference:i}=this,s=(e.offset||0)/2,n=(e.spacing||0)/2;if(this.pixelMargin="inner"===e.borderAlign?.33:0,this.fullCircles=i>yt?Math.floor(i/yt):0,0===i||this.innerRadius<0||this.outerRadius<0)return;t.save();let o=0;if(s){o=s/2;const e=(this.startAngle+this.endAngle)/2;t.translate(Math.cos(e)*o,Math.sin(e)*o),this.circumference>=_t&&(o=s)}t.fillStyle=e.backgroundColor,t.strokeStyle=e.borderColor;const a=function(t,e,i,s){const{fullCircles:n,startAngle:o,circumference:a}=e;let r=e.endAngle;if(n){Fn(t,e,i,s,o+yt);for(let e=0;e<n;++e)t.fill();isNaN(a)||(r=o+a%yt,a%yt==0&&(r+=yt))}return Fn(t,e,i,s,r),t.fill(),r}(t,this,o,n);Bn(t,this,o,n,a),t.restore()}}function Wn(t,e,i=e){t.lineCap=K(i.borderCapStyle,e.borderCapStyle),t.setLineDash(K(i.borderDash,e.borderDash)),t.lineDashOffset=K(i.borderDashOffset,e.borderDashOffset),t.lineJoin=K(i.borderJoinStyle,e.borderJoinStyle),t.lineWidth=K(i.borderWidth,e.borderWidth),t.strokeStyle=K(i.borderColor,e.borderColor)}function Nn(t,e,i){t.lineTo(i.x,i.y)}function Hn(t,e,i={}){const s=t.length,{start:n=0,end:o=s-1}=i,{start:a,end:r}=e,l=Math.max(n,a),h=Math.min(o,r),c=n<a&&o<a||n>r&&o>r;return{count:s,start:l,loop:e.loop,ilen:h<l&&!c?s+h-l:h-l}}function jn(t,e,i,s){const{points:n,options:o}=e,{count:a,start:r,loop:l,ilen:h}=Hn(n,i,s),c=function(t){return t.stepped?ee:t.tension||"monotone"===t.cubicInterpolationMode?ie:Nn}(o);let d,u,f,{move:g=!0,reverse:p}=s||{};for(d=0;d<=h;++d)u=n[(r+(p?h-d:d))%a],u.skip||(g?(t.moveTo(u.x,u.y),g=!1):c(t,f,u,p,o.stepped),f=u);return l&&(u=n[(r+(p?h:0))%a],c(t,f,u,p,o.stepped)),!!l}function $n(t,e,i,s){const n=e.points,{count:o,start:a,ilen:r}=Hn(n,i,s),{move:l=!0,reverse:h}=s||{};let c,d,u,f,g,p,m=0,x=0;const b=t=>(a+(h?r-t:t))%o,_=()=>{f!==g&&(t.lineTo(m,g),t.lineTo(m,f),t.lineTo(m,p))};for(l&&(d=n[b(0)],t.moveTo(d.x,d.y)),c=0;c<=r;++c){if(d=n[b(c)],d.skip)continue;const e=d.x,i=d.y,s=0|e;s===u?(i<f?f=i:i>g&&(g=i),m=(x*m+e)/++x):(_(),t.lineTo(e,i),u=s,x=0,f=g=i),p=i}_()}function Yn(t){const e=t.options,i=e.borderDash&&e.borderDash.length;return!(t._decimated||t._loop||e.tension||"monotone"===e.cubicInterpolationMode||e.stepped||i)?$n:jn}Vn.id="arc",Vn.defaults={borderAlign:"center",borderColor:"#fff",borderJoinStyle:void 0,borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:void 0},Vn.defaultRoutes={backgroundColor:"backgroundColor"};const Un="function"==typeof Path2D;function Xn(t,e,i,s){Un&&!e.options.segment?function(t,e,i,s){let n=e._path;n||(n=e._path=new Path2D,e.path(n,i,s)&&n.closePath()),Wn(t,e.options),t.stroke(n)}(t,e,i,s):function(t,e,i,s){const{segments:n,options:o}=e,a=Yn(e);for(const r of n)Wn(t,o,r.style),t.beginPath(),a(t,e,r,{start:i,end:i+s-1})&&t.closePath(),t.stroke()}(t,e,i,s)}class qn extends Ds{constructor(t){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,t&&Object.assign(this,t)}updateControlPoints(t,e){const i=this.options;if((i.tension||"monotone"===i.cubicInterpolationMode)&&!i.stepped&&!this._pointsUpdated){const s=i.spanGaps?this._loop:this._fullLoop;ki(this._points,i,t,s,e),this._pointsUpdated=!0}}set points(t){this._points=t,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=Ni(this,this.options.segment))}first(){const t=this.segments,e=this.points;return t.length&&e[t[0].start]}last(){const t=this.segments,e=this.points,i=t.length;return i&&e[t[i-1].end]}interpolate(t,e){const i=this.options,s=t[e],n=this.points,o=Wi(this,{property:e,start:s,end:s});if(!o.length)return;const a=[],r=function(t){return t.stepped?Ai:t.tension||"monotone"===t.cubicInterpolationMode?Ti:Oi}(i);let l,h;for(l=0,h=o.length;l<h;++l){const{start:h,end:c}=o[l],d=n[h],u=n[c];if(d===u){a.push(d);continue}const f=r(d,u,Math.abs((s-d[e])/(u[e]-d[e])),i.stepped);f[e]=t[e],a.push(f)}return 1===a.length?a[0]:a}pathSegment(t,e,i){return Yn(this)(t,this,e,i)}path(t,e,i){const s=this.segments,n=Yn(this);let o=this._loop;e=e||0,i=i||this.points.length-e;for(const a of s)o&=n(t,this,a,{start:e,end:e+i-1});return!!o}draw(t,e,i,s){const n=this.options||{};(this.points||[]).length&&n.borderWidth&&(t.save(),Xn(t,this,i,s),t.restore()),this.animated&&(this._pointsUpdated=!1,this._path=void 0)}}function Kn(t,e,i,s){const n=t.options,{[i]:o}=t.getProps([i],s);return Math.abs(e-o)<n.radius+n.hitRadius}qn.id="line",qn.defaults={borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",borderWidth:3,capBezierPoints:!0,cubicInterpolationMode:"default",fill:!1,spanGaps:!1,stepped:!1,tension:0},qn.defaultRoutes={backgroundColor:"backgroundColor",borderColor:"borderColor"},qn.descriptors={_scriptable:!0,_indexable:t=>"borderDash"!==t&&"fill"!==t};class Gn extends Ds{constructor(t){super(),this.options=void 0,this.parsed=void 0,this.skip=void 0,this.stop=void 0,t&&Object.assign(this,t)}inRange(t,e,i){const s=this.options,{x:n,y:o}=this.getProps(["x","y"],i);return Math.pow(t-n,2)+Math.pow(e-o,2)<Math.pow(s.hitRadius+s.radius,2)}inXRange(t,e){return Kn(this,t,"x",e)}inYRange(t,e){return Kn(this,t,"y",e)}getCenterPoint(t){const{x:e,y:i}=this.getProps(["x","y"],t);return{x:e,y:i}}size(t){let e=(t=t||this.options||{}).radius||0;e=Math.max(e,e&&t.hoverRadius||0);return 2*(e+(e&&t.borderWidth||0))}draw(t,e){const i=this.options;this.skip||i.radius<.1||!Jt(this,e,this.size(i)/2)||(t.strokeStyle=i.borderColor,t.lineWidth=i.borderWidth,t.fillStyle=i.backgroundColor,Zt(t,i,this.x,this.y))}getRange(){const t=this.options||{};return t.radius+t.hitRadius}}function Zn(t,e){const{x:i,y:s,base:n,width:o,height:a}=t.getProps(["x","y","base","width","height"],e);let r,l,h,c,d;return t.horizontal?(d=a/2,r=Math.min(i,n),l=Math.max(i,n),h=s-d,c=s+d):(d=o/2,r=i-d,l=i+d,h=Math.min(s,n),c=Math.max(s,n)),{left:r,top:h,right:l,bottom:c}}function Jn(t,e,i,s){return t?0:jt(e,i,s)}function Qn(t){const e=Zn(t),i=e.right-e.left,s=e.bottom-e.top,n=function(t,e,i){const s=t.options.borderWidth,n=t.borderSkipped,o=Ve(s);return{t:Jn(n.top,o.top,0,i),r:Jn(n.right,o.right,0,e),b:Jn(n.bottom,o.bottom,0,i),l:Jn(n.left,o.left,0,e)}}(t,i/2,s/2),o=function(t,e,i){const{enableBorderRadius:s}=t.getProps(["enableBorderRadius"]),n=t.options.borderRadius,o=We(n),a=Math.min(e,i),r=t.borderSkipped,l=s||U(n);return{topLeft:Jn(!l||r.top||r.left,o.topLeft,0,a),topRight:Jn(!l||r.top||r.right,o.topRight,0,a),bottomLeft:Jn(!l||r.bottom||r.left,o.bottomLeft,0,a),bottomRight:Jn(!l||r.bottom||r.right,o.bottomRight,0,a)}}(t,i/2,s/2);return{outer:{x:e.left,y:e.top,w:i,h:s,radius:o},inner:{x:e.left+n.l,y:e.top+n.t,w:i-n.l-n.r,h:s-n.t-n.b,radius:{topLeft:Math.max(0,o.topLeft-Math.max(n.t,n.l)),topRight:Math.max(0,o.topRight-Math.max(n.t,n.r)),bottomLeft:Math.max(0,o.bottomLeft-Math.max(n.b,n.l)),bottomRight:Math.max(0,o.bottomRight-Math.max(n.b,n.r))}}}}function to(t,e,i,s){const n=null===e,o=null===i,a=t&&!(n&&o)&&Zn(t,s);return a&&(n||Yt(e,a.left,a.right))&&(o||Yt(i,a.top,a.bottom))}function eo(t,e){t.rect(e.x,e.y,e.w,e.h)}function io(t,e,i={}){const s=t.x!==i.x?-e:0,n=t.y!==i.y?-e:0,o=(t.x+t.w!==i.x+i.w?e:0)-s,a=(t.y+t.h!==i.y+i.h?e:0)-n;return{x:t.x+s,y:t.y+n,w:t.w+o,h:t.h+a,radius:t.radius}}Gn.id="point",Gn.defaults={borderWidth:1,hitRadius:1,hoverBorderWidth:1,hoverRadius:4,pointStyle:"circle",radius:3,rotation:0},Gn.defaultRoutes={backgroundColor:"backgroundColor",borderColor:"borderColor"};class so extends Ds{constructor(t){super(),this.options=void 0,this.horizontal=void 0,this.base=void 0,this.width=void 0,this.height=void 0,this.inflateAmount=void 0,t&&Object.assign(this,t)}draw(t){const{inflateAmount:e,options:{borderColor:i,backgroundColor:s}}=this,{inner:n,outer:o}=Qn(this),a=(r=o.radius).topLeft||r.topRight||r.bottomLeft||r.bottomRight?oe:eo;var r;t.save(),o.w===n.w&&o.h===n.h||(t.beginPath(),a(t,io(o,e,n)),t.clip(),a(t,io(n,-e,o)),t.fillStyle=i,t.fill("evenodd")),t.beginPath(),a(t,io(n,e)),t.fillStyle=s,t.fill(),t.restore()}inRange(t,e,i){return to(this,t,e,i)}inXRange(t,e){return to(this,t,null,e)}inYRange(t,e){return to(this,null,t,e)}getCenterPoint(t){const{x:e,y:i,base:s,horizontal:n}=this.getProps(["x","y","base","horizontal"],t);return{x:n?(e+s)/2:e,y:n?i:(i+s)/2}}getRange(t){return"x"===t?this.width/2:this.height/2}}so.id="bar",so.defaults={borderSkipped:"start",borderWidth:0,borderRadius:0,inflateAmount:"auto",pointStyle:void 0},so.defaultRoutes={backgroundColor:"backgroundColor",borderColor:"borderColor"};var no=Object.freeze({__proto__:null,ArcElement:Vn,LineElement:qn,PointElement:Gn,BarElement:so});function oo(t){if(t._decimated){const e=t._data;delete t._decimated,delete t._data,Object.defineProperty(t,"data",{value:e})}}function ao(t){t.data.datasets.forEach((t=>{oo(t)}))}var ro={id:"decimation",defaults:{algorithm:"min-max",enabled:!1},beforeElementsUpdate:(t,e,i)=>{if(!i.enabled)return void ao(t);const s=t.width;t.data.datasets.forEach(((e,n)=>{const{_data:o,indexAxis:a}=e,r=t.getDatasetMeta(n),l=o||e.data;if("y"===je([a,t.options.indexAxis]))return;if("line"!==r.type)return;const h=t.scales[r.xAxisID];if("linear"!==h.type&&"time"!==h.type)return;if(t.options.parsing)return;let{start:c,count:d}=function(t,e){const i=e.length;let s,n=0;const{iScale:o}=t,{min:a,max:r,minDefined:l,maxDefined:h}=o.getUserBounds();return l&&(n=jt(re(e,o.axis,a).lo,0,i-1)),s=h?jt(re(e,o.axis,r).hi+1,n,i)-n:i-n,{start:n,count:s}}(r,l);if(d<=(i.threshold||4*s))return void oo(e);let u;switch($(o)&&(e._data=l,delete e.data,Object.defineProperty(e,"data",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(t){this._data=t}})),i.algorithm){case"lttb":u=function(t,e,i,s,n){const o=n.samples||s;if(o>=i)return t.slice(e,e+i);const a=[],r=(i-2)/(o-2);let l=0;const h=e+i-1;let c,d,u,f,g,p=e;for(a[l++]=t[p],c=0;c<o-2;c++){let s,n=0,o=0;const h=Math.floor((c+1)*r)+1+e,m=Math.min(Math.floor((c+2)*r)+1,i)+e,x=m-h;for(s=h;s<m;s++)n+=t[s].x,o+=t[s].y;n/=x,o/=x;const b=Math.floor(c*r)+1+e,_=Math.min(Math.floor((c+1)*r)+1,i)+e,{x:y,y:v}=t[p];for(u=f=-1,s=b;s<_;s++)f=.5*Math.abs((y-n)*(t[s].y-v)-(y-t[s].x)*(o-v)),f>u&&(u=f,d=t[s],g=s);a[l++]=d,p=g}return a[l++]=t[h],a}(l,c,d,s,i);break;case"min-max":u=function(t,e,i,s){let n,o,a,r,l,h,c,d,u,f,g=0,p=0;const m=[],x=e+i-1,b=t[e].x,_=t[x].x-b;for(n=e;n<e+i;++n){o=t[n],a=(o.x-b)/_*s,r=o.y;const e=0|a;if(e===l)r<u?(u=r,h=n):r>f&&(f=r,c=n),g=(p*g+o.x)/++p;else{const i=n-1;if(!$(h)&&!$(c)){const e=Math.min(h,c),s=Math.max(h,c);e!==d&&e!==i&&m.push({...t[e],x:g}),s!==d&&s!==i&&m.push({...t[s],x:g})}n>0&&i!==d&&m.push(t[i]),m.push(o),l=e,p=0,u=f=r,h=c=d=n}}return m}(l,c,d,s);break;default:throw new Error(`Unsupported decimation algorithm '${i.algorithm}'`)}e._decimated=u}))},destroy(t){ao(t)}};function lo(t,e,i){const s=function(t){const e=t.options,i=e.fill;let s=K(i&&i.target,i);return void 0===s&&(s=!!e.backgroundColor),!1!==s&&null!==s&&(!0===s?"origin":s)}(t);if(U(s))return!isNaN(s.value)&&s;let n=parseFloat(s);return X(n)&&Math.floor(n)===n?("-"!==s[0]&&"+"!==s[0]||(n=e+n),!(n===e||n<0||n>=i)&&n):["origin","start","end","stack","shape"].indexOf(s)>=0&&s}class ho{constructor(t){this.x=t.x,this.y=t.y,this.radius=t.radius}pathSegment(t,e,i){const{x:s,y:n,radius:o}=this;return e=e||{start:0,end:yt},t.arc(s,n,o,e.end,e.start,!0),!i.bounds}interpolate(t){const{x:e,y:i,radius:s}=this,n=t.angle;return{x:e+Math.cos(n)*s,y:i+Math.sin(n)*s,angle:n}}}function co(t){return(t.scale||{}).getPointPositionForValue?function(t){const{scale:e,fill:i}=t,s=e.options,n=e.getLabels().length,o=[],a=s.reverse?e.max:e.min,r=s.reverse?e.min:e.max;let l,h,c;if(c="start"===i?a:"end"===i?r:U(i)?i.value:e.getBaseValue(),s.grid.circular)return h=e.getPointPositionForValue(0,a),new ho({x:h.x,y:h.y,radius:e.getDistanceFromCenterForValue(c)});for(l=0;l<n;++l)o.push(e.getPointPositionForValue(l,c));return o}(t):function(t){const{scale:e={},fill:i}=t;let s,n=null;return"start"===i?n=e.bottom:"end"===i?n=e.top:U(i)?n=e.getPixelForValue(i.value):e.getBasePixel&&(n=e.getBasePixel()),X(n)?(s=e.isHorizontal(),{x:s?n:null,y:s?null:n}):null}(t)}function uo(t,e,i){for(;e>t;e--){const t=i[e];if(!isNaN(t.x)&&!isNaN(t.y))break}return e}function fo(t,e,i){const s=[];for(let n=0;n<i.length;n++){const o=i[n],{first:a,last:r,point:l}=go(o,e,"x");if(!(!l||a&&r))if(a)s.unshift(l);else if(t.push(l),!r)break}t.push(...s)}function go(t,e,i){const s=t.interpolate(e,i);if(!s)return{};const n=s[i],o=t.segments,a=t.points;let r=!1,l=!1;for(let t=0;t<o.length;t++){const e=o[t],s=a[e.start][i],h=a[e.end][i];if(Yt(n,s,h)){r=n===s,l=n===h;break}}return{first:r,last:l,point:s}}function po(t){const{chart:e,fill:i,line:s}=t;if(X(i))return function(t,e){const i=t.getDatasetMeta(e);return i&&t.isDatasetVisible(e)?i.dataset:null}(e,i);if("stack"===i)return function(t){const{scale:e,index:i,line:s}=t,n=[],o=s.segments,a=s.points,r=function(t,e){const i=[],s=t.getMatchingVisibleMetas("line");for(let t=0;t<s.length;t++){const n=s[t];if(n.index===e)break;n.hidden||i.unshift(n.dataset)}return i}(e,i);r.push(mo({x:null,y:e.bottom},s));for(let t=0;t<o.length;t++){const e=o[t];for(let t=e.start;t<=e.end;t++)fo(n,a[t],r)}return new qn({points:n,options:{}})}(t);if("shape"===i)return!0;const n=co(t);return n instanceof ho?n:mo(n,s)}function mo(t,e){let i=[],s=!1;return Y(t)?(s=!0,i=t):i=function(t,e){const{x:i=null,y:s=null}=t||{},n=e.points,o=[];return e.segments.forEach((({start:t,end:e})=>{e=uo(t,e,n);const a=n[t],r=n[e];null!==s?(o.push({x:a.x,y:s}),o.push({x:r.x,y:s})):null!==i&&(o.push({x:i,y:a.y}),o.push({x:i,y:r.y}))})),o}(t,e),i.length?new qn({points:i,options:{tension:0},_loop:s,_fullLoop:s}):null}function xo(t,e,i){let s=t[e].fill;const n=[e];let o;if(!i)return s;for(;!1!==s&&-1===n.indexOf(s);){if(!X(s))return s;if(o=t[s],!o)return!1;if(o.visible)return s;n.push(s),s=o.fill}return!1}function bo(t,e,i){t.beginPath(),e.path(t),t.lineTo(e.last().x,i),t.lineTo(e.first().x,i),t.closePath(),t.clip()}function _o(t,e,i,s){if(s)return;let n=e[t],o=i[t];return"angle"===t&&(n=Nt(n),o=Nt(o)),{property:t,start:n,end:o}}function yo(t,e,i,s){return t&&e?s(t[i],e[i]):t?t[i]:e?e[i]:0}function vo(t,e,i){const{top:s,bottom:n}=e.chart.chartArea,{property:o,start:a,end:r}=i||{};"x"===o&&(t.beginPath(),t.rect(a,s,r-a,n-s),t.clip())}function wo(t,e,i,s){const n=e.interpolate(i,s);n&&t.lineTo(n.x,n.y)}function Mo(t,e){const{line:i,target:s,property:n,color:o,scale:a}=e,r=function(t,e,i){const s=t.segments,n=t.points,o=e.points,a=[];for(const t of s){let{start:s,end:r}=t;r=uo(s,r,n);const l=_o(i,n[s],n[r],t.loop);if(!e.segments){a.push({source:t,target:l,start:n[s],end:n[r]});continue}const h=Wi(e,l);for(const e of h){const s=_o(i,o[e.start],o[e.end],e.loop),r=Vi(t,n,s);for(const t of r)a.push({source:t,target:e,start:{[i]:yo(l,s,"start",Math.max)},end:{[i]:yo(l,s,"end",Math.min)}})}}return a}(i,s,n);for(const{source:e,target:l,start:h,end:c}of r){const{style:{backgroundColor:r=o}={}}=e,d=!0!==s;t.save(),t.fillStyle=r,vo(t,a,d&&_o(n,h,c)),t.beginPath();const u=!!i.pathSegment(t,e);let f;if(d){u?t.closePath():wo(t,s,c,n);const e=!!s.pathSegment(t,l,{move:u,reverse:!0});f=u&&e,f||wo(t,s,h,n)}t.closePath(),t.fill(f?"evenodd":"nonzero"),t.restore()}}function ko(t,e,i){const s=po(e),{line:n,scale:o,axis:a}=e,r=n.options,l=r.fill,h=r.backgroundColor,{above:c=h,below:d=h}=l||{};s&&n.points.length&&(Qt(t,i),function(t,e){const{line:i,target:s,above:n,below:o,area:a,scale:r}=e,l=i._loop?"angle":e.axis;t.save(),"x"===l&&o!==n&&(bo(t,s,a.top),Mo(t,{line:i,target:s,color:n,scale:r,property:l}),t.restore(),t.save(),bo(t,s,a.bottom)),Mo(t,{line:i,target:s,color:o,scale:r,property:l}),t.restore()}(t,{line:n,target:s,above:c,below:d,area:i,scale:o,axis:a}),te(t))}var So={id:"filler",afterDatasetsUpdate(t,e,i){const s=(t.data.datasets||[]).length,n=[];let o,a,r,l;for(a=0;a<s;++a)o=t.getDatasetMeta(a),r=o.dataset,l=null,r&&r.options&&r instanceof qn&&(l={visible:t.isDatasetVisible(a),index:a,fill:lo(r,a,s),chart:t,axis:o.controller.options.indexAxis,scale:o.vScale,line:r}),o.$filler=l,n.push(l);for(a=0;a<s;++a)l=n[a],l&&!1!==l.fill&&(l.fill=xo(n,a,i.propagate))},beforeDraw(t,e,i){const s="beforeDraw"===i.drawTime,n=t.getSortedVisibleDatasetMetas(),o=t.chartArea;for(let e=n.length-1;e>=0;--e){const i=n[e].$filler;i&&(i.line.updateControlPoints(o,i.axis),s&&ko(t.ctx,i,o))}},beforeDatasetsDraw(t,e,i){if("beforeDatasetsDraw"!==i.drawTime)return;const s=t.getSortedVisibleDatasetMetas();for(let e=s.length-1;e>=0;--e){const i=s[e].$filler;i&&ko(t.ctx,i,t.chartArea)}},beforeDatasetDraw(t,e,i){const s=e.meta.$filler;s&&!1!==s.fill&&"beforeDatasetDraw"===i.drawTime&&ko(t.ctx,s,t.chartArea)},defaults:{propagate:!0,drawTime:"beforeDatasetDraw"}};const Po=(t,e)=>{let{boxHeight:i=e,boxWidth:s=e}=t;return t.usePointStyle&&(i=Math.min(i,e),s=Math.min(s,e)),{boxWidth:s,boxHeight:i,itemHeight:Math.max(e,i)}};class Do extends Ds{constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e,i){this.maxWidth=t,this.maxHeight=e,this._margins=i,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){const t=this.options.labels||{};let e=J(t.generateLabels,[this.chart],this)||[];t.filter&&(e=e.filter((e=>t.filter(e,this.chart.data)))),t.sort&&(e=e.sort(((e,i)=>t.sort(e,i,this.chart.data)))),this.options.reverse&&e.reverse(),this.legendItems=e}fit(){const{options:t,ctx:e}=this;if(!t.display)return void(this.width=this.height=0);const i=t.labels,s=He(i.font),n=s.size,o=this._computeTitleHeight(),{boxWidth:a,itemHeight:r}=Po(i,n);let l,h;e.font=s.string,this.isHorizontal()?(l=this.maxWidth,h=this._fitRows(o,n,a,r)+10):(h=this.maxHeight,l=this._fitCols(o,n,a,r)+10),this.width=Math.min(l,t.maxWidth||this.maxWidth),this.height=Math.min(h,t.maxHeight||this.maxHeight)}_fitRows(t,e,i,s){const{ctx:n,maxWidth:o,options:{labels:{padding:a}}}=this,r=this.legendHitBoxes=[],l=this.lineWidths=[0],h=s+a;let c=t;n.textAlign="left",n.textBaseline="middle";let d=-1,u=-h;return this.legendItems.forEach(((t,f)=>{const g=i+e/2+n.measureText(t.text).width;(0===f||l[l.length-1]+g+2*a>o)&&(c+=h,l[l.length-(f>0?0:1)]=0,u+=h,d++),r[f]={left:0,top:u,row:d,width:g,height:s},l[l.length-1]+=g+a})),c}_fitCols(t,e,i,s){const{ctx:n,maxHeight:o,options:{labels:{padding:a}}}=this,r=this.legendHitBoxes=[],l=this.columnSizes=[],h=o-t;let c=a,d=0,u=0,f=0,g=0;return this.legendItems.forEach(((t,o)=>{const p=i+e/2+n.measureText(t.text).width;o>0&&u+s+2*a>h&&(c+=d+a,l.push({width:d,height:u}),f+=d+a,g++,d=u=0),r[o]={left:f,top:u,col:g,width:p,height:s},d=Math.max(d,p),u+=s+a})),c+=d,l.push({width:d,height:u}),c}adjustHitBoxes(){if(!this.options.display)return;const t=this._computeTitleHeight(),{legendHitBoxes:e,options:{align:i,labels:{padding:s},rtl:o}}=this,a=Ei(o,this.left,this.width);if(this.isHorizontal()){let o=0,r=n(i,this.left+s,this.right-this.lineWidths[o]);for(const l of e)o!==l.row&&(o=l.row,r=n(i,this.left+s,this.right-this.lineWidths[o])),l.top+=this.top+t+s,l.left=a.leftForLtr(a.x(r),l.width),r+=l.width+s}else{let o=0,r=n(i,this.top+t+s,this.bottom-this.columnSizes[o].height);for(const l of e)l.col!==o&&(o=l.col,r=n(i,this.top+t+s,this.bottom-this.columnSizes[o].height)),l.top=r,l.left+=this.left+s,l.left=a.leftForLtr(a.x(l.left),l.width),r+=l.height+s}}isHorizontal(){return"top"===this.options.position||"bottom"===this.options.position}draw(){if(this.options.display){const t=this.ctx;Qt(t,this),this._draw(),te(t)}}_draw(){const{options:t,columnSizes:e,lineWidths:i,ctx:s}=this,{align:a,labels:r}=t,l=bt.color,h=Ei(t.rtl,this.left,this.width),c=He(r.font),{color:d,padding:u}=r,f=c.size,g=f/2;let p;this.drawTitle(),s.textAlign=h.textAlign("left"),s.textBaseline="middle",s.lineWidth=.5,s.font=c.string;const{boxWidth:m,boxHeight:x,itemHeight:b}=Po(r,f),_=this.isHorizontal(),y=this._computeTitleHeight();p=_?{x:n(a,this.left+u,this.right-i[0]),y:this.top+u+y,line:0}:{x:this.left+u,y:n(a,this.top+y+u,this.bottom-e[0].height),line:0},Ii(this.ctx,t.textDirection);const v=b+u;this.legendItems.forEach(((w,M)=>{s.strokeStyle=w.fontColor||d,s.fillStyle=w.fontColor||d;const k=s.measureText(w.text).width,S=h.textAlign(w.textAlign||(w.textAlign=r.textAlign)),P=m+g+k;let D=p.x,C=p.y;h.setWidth(this.width),_?M>0&&D+P+u>this.right&&(C=p.y+=v,p.line++,D=p.x=n(a,this.left+u,this.right-i[p.line])):M>0&&C+v>this.bottom&&(D=p.x=D+e[p.line].width+u,p.line++,C=p.y=n(a,this.top+y+u,this.bottom-e[p.line].height));!function(t,e,i){if(isNaN(m)||m<=0||isNaN(x)||x<0)return;s.save();const n=K(i.lineWidth,1);if(s.fillStyle=K(i.fillStyle,l),s.lineCap=K(i.lineCap,"butt"),s.lineDashOffset=K(i.lineDashOffset,0),s.lineJoin=K(i.lineJoin,"miter"),s.lineWidth=n,s.strokeStyle=K(i.strokeStyle,l),s.setLineDash(K(i.lineDash,[])),r.usePointStyle){const o={radius:m*Math.SQRT2/2,pointStyle:i.pointStyle,rotation:i.rotation,borderWidth:n},a=h.xPlus(t,m/2);Zt(s,o,a,e+g)}else{const o=e+Math.max((f-x)/2,0),a=h.leftForLtr(t,m),r=We(i.borderRadius);s.beginPath(),Object.values(r).some((t=>0!==t))?oe(s,{x:a,y:o,w:m,h:x,radius:r}):s.rect(a,o,m,x),s.fill(),0!==n&&s.stroke()}s.restore()}(h.x(D),C,w),D=o(S,D+m+g,_?D+P:this.right,t.rtl),function(t,e,i){se(s,i.text,t,e+b/2,c,{strikethrough:i.hidden,textAlign:h.textAlign(i.textAlign)})}(h.x(D),C,w),_?p.x+=P+u:p.y+=v})),zi(this.ctx,t.textDirection)}drawTitle(){const t=this.options,e=t.title,i=He(e.font),o=Ne(e.padding);if(!e.display)return;const a=Ei(t.rtl,this.left,this.width),r=this.ctx,l=e.position,h=i.size/2,c=o.top+h;let d,u=this.left,f=this.width;if(this.isHorizontal())f=Math.max(...this.lineWidths),d=this.top+c,u=n(t.align,u,this.right-f);else{const e=this.columnSizes.reduce(((t,e)=>Math.max(t,e.height)),0);d=c+n(t.align,this.top,this.bottom-e-t.labels.padding-this._computeTitleHeight())}const g=n(l,u,u+f);r.textAlign=a.textAlign(s(l)),r.textBaseline="middle",r.strokeStyle=e.color,r.fillStyle=e.color,r.font=i.string,se(r,e.text,g,d,i)}_computeTitleHeight(){const t=this.options.title,e=He(t.font),i=Ne(t.padding);return t.display?e.lineHeight+i.height:0}_getLegendItemAt(t,e){let i,s,n;if(Yt(t,this.left,this.right)&&Yt(e,this.top,this.bottom))for(n=this.legendHitBoxes,i=0;i<n.length;++i)if(s=n[i],Yt(t,s.left,s.left+s.width)&&Yt(e,s.top,s.top+s.height))return this.legendItems[i];return null}handleEvent(t){const e=this.options;if(!function(t,e){if("mousemove"===t&&(e.onHover||e.onLeave))return!0;if(e.onClick&&("click"===t||"mouseup"===t))return!0;return!1}(t.type,e))return;const i=this._getLegendItemAt(t.x,t.y);if("mousemove"===t.type){const o=this._hoveredItem,a=(n=i,null!==(s=o)&&null!==n&&s.datasetIndex===n.datasetIndex&&s.index===n.index);o&&!a&&J(e.onLeave,[t,o,this],this),this._hoveredItem=i,i&&!a&&J(e.onHover,[t,i,this],this)}else i&&J(e.onClick,[t,i,this],this);var s,n}}var Co={id:"legend",_element:Do,start(t,e,i){const s=t.legend=new Do({ctx:t.ctx,options:i,chart:t});ni.configure(t,s,i),ni.addBox(t,s)},stop(t){ni.removeBox(t,t.legend),delete t.legend},beforeUpdate(t,e,i){const s=t.legend;ni.configure(t,s,i),s.options=i},afterUpdate(t){const e=t.legend;e.buildLabels(),e.adjustHitBoxes()},afterEvent(t,e){e.replay||t.legend.handleEvent(e.event)},defaults:{display:!0,position:"top",align:"center",fullSize:!0,reverse:!1,weight:1e3,onClick(t,e,i){const s=e.datasetIndex,n=i.chart;n.isDatasetVisible(s)?(n.hide(s),e.hidden=!0):(n.show(s),e.hidden=!1)},onHover:null,onLeave:null,labels:{color:t=>t.chart.options.color,boxWidth:40,padding:10,generateLabels(t){const e=t.data.datasets,{labels:{usePointStyle:i,pointStyle:s,textAlign:n,color:o}}=t.legend.options;return t._getSortedDatasetMetas().map((t=>{const a=t.controller.getStyle(i?0:void 0),r=Ne(a.borderWidth);return{text:e[t.index].label,fillStyle:a.backgroundColor,fontColor:o,hidden:!t.visible,lineCap:a.borderCapStyle,lineDash:a.borderDash,lineDashOffset:a.borderDashOffset,lineJoin:a.borderJoinStyle,lineWidth:(r.width+r.height)/4,strokeStyle:a.borderColor,pointStyle:s||a.pointStyle,rotation:a.rotation,textAlign:n||a.textAlign,borderRadius:0,datasetIndex:t.index}}),this)}},title:{color:t=>t.chart.options.color,display:!1,position:"center",text:""}},descriptors:{_scriptable:t=>!t.startsWith("on"),labels:{_scriptable:t=>!["generateLabels","filter","sort"].includes(t)}}};class Oo extends Ds{constructor(t){super(),this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e){const i=this.options;if(this.left=0,this.top=0,!i.display)return void(this.width=this.height=this.right=this.bottom=0);this.width=this.right=t,this.height=this.bottom=e;const s=Y(i.text)?i.text.length:1;this._padding=Ne(i.padding);const n=s*He(i.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=n:this.width=n}isHorizontal(){const t=this.options.position;return"top"===t||"bottom"===t}_drawArgs(t){const{top:e,left:i,bottom:s,right:o,options:a}=this,r=a.align;let l,h,c,d=0;return this.isHorizontal()?(h=n(r,i,o),c=e+t,l=o-i):("left"===a.position?(h=i+t,c=n(r,s,e),d=-.5*_t):(h=o-t,c=n(r,e,s),d=.5*_t),l=s-e),{titleX:h,titleY:c,maxWidth:l,rotation:d}}draw(){const t=this.ctx,e=this.options;if(!e.display)return;const i=He(e.font),n=i.lineHeight/2+this._padding.top,{titleX:o,titleY:a,maxWidth:r,rotation:l}=this._drawArgs(n);se(t,e.text,0,0,i,{color:e.color,maxWidth:r,rotation:l,textAlign:s(e.align),textBaseline:"middle",translation:[o,a]})}}var Ao={id:"title",_element:Oo,start(t,e,i){!function(t,e){const i=new Oo({ctx:t.ctx,options:e,chart:t});ni.configure(t,i,e),ni.addBox(t,i),t.titleBlock=i}(t,i)},stop(t){const e=t.titleBlock;ni.removeBox(t,e),delete t.titleBlock},beforeUpdate(t,e,i){const s=t.titleBlock;ni.configure(t,s,i),s.options=i},defaults:{align:"center",display:!1,font:{weight:"bold"},fullSize:!0,padding:10,position:"top",text:"",weight:2e3},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const To=new WeakMap;var Lo={id:"subtitle",start(t,e,i){const s=new Oo({ctx:t.ctx,options:i,chart:t});ni.configure(t,s,i),ni.addBox(t,s),To.set(t,s)},stop(t){ni.removeBox(t,To.get(t)),To.delete(t)},beforeUpdate(t,e,i){const s=To.get(t);ni.configure(t,s,i),s.options=i},defaults:{align:"center",display:!1,font:{weight:"normal"},fullSize:!0,padding:0,position:"top",text:"",weight:1500},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const Ro={average(t){if(!t.length)return!1;let e,i,s=0,n=0,o=0;for(e=0,i=t.length;e<i;++e){const i=t[e].element;if(i&&i.hasValue()){const t=i.tooltipPosition();s+=t.x,n+=t.y,++o}}return{x:s/o,y:n/o}},nearest(t,e){if(!t.length)return!1;let i,s,n,o=e.x,a=e.y,r=Number.POSITIVE_INFINITY;for(i=0,s=t.length;i<s;++i){const s=t[i].element;if(s&&s.hasValue()){const t=Vt(e,s.getCenterPoint());t<r&&(r=t,n=s)}}if(n){const t=n.tooltipPosition();o=t.x,a=t.y}return{x:o,y:a}}};function Eo(t,e){return e&&(Y(e)?Array.prototype.push.apply(t,e):t.push(e)),t}function Io(t){return("string"==typeof t||t instanceof String)&&t.indexOf("\n")>-1?t.split("\n"):t}function zo(t,e){const{element:i,datasetIndex:s,index:n}=e,o=t.getDatasetMeta(s).controller,{label:a,value:r}=o.getLabelAndValue(n);return{chart:t,label:a,parsed:o.getParsed(n),raw:t.data.datasets[s].data[n],formattedValue:r,dataset:o.getDataset(),dataIndex:n,datasetIndex:s,element:i}}function Fo(t,e){const i=t.chart.ctx,{body:s,footer:n,title:o}=t,{boxWidth:a,boxHeight:r}=e,l=He(e.bodyFont),h=He(e.titleFont),c=He(e.footerFont),d=o.length,u=n.length,f=s.length,g=Ne(e.padding);let p=g.height,m=0,x=s.reduce(((t,e)=>t+e.before.length+e.lines.length+e.after.length),0);if(x+=t.beforeBody.length+t.afterBody.length,d&&(p+=d*h.lineHeight+(d-1)*e.titleSpacing+e.titleMarginBottom),x){p+=f*(e.displayColors?Math.max(r,l.lineHeight):l.lineHeight)+(x-f)*l.lineHeight+(x-1)*e.bodySpacing}u&&(p+=e.footerMarginTop+u*c.lineHeight+(u-1)*e.footerSpacing);let b=0;const _=function(t){m=Math.max(m,i.measureText(t).width+b)};return i.save(),i.font=h.string,Q(t.title,_),i.font=l.string,Q(t.beforeBody.concat(t.afterBody),_),b=e.displayColors?a+2+e.boxPadding:0,Q(s,(t=>{Q(t.before,_),Q(t.lines,_),Q(t.after,_)})),b=0,i.font=c.string,Q(t.footer,_),i.restore(),m+=g.width,{width:m,height:p}}function Bo(t,e,i,s){const{x:n,width:o}=i,{width:a,chartArea:{left:r,right:l}}=t;let h="center";return"center"===s?h=n<=(r+l)/2?"left":"right":n<=o/2?h="left":n>=a-o/2&&(h="right"),function(t,e,i,s){const{x:n,width:o}=s,a=i.caretSize+i.caretPadding;return"left"===t&&n+o+a>e.width||"right"===t&&n-o-a<0||void 0}(h,t,e,i)&&(h="center"),h}function Vo(t,e,i){const s=i.yAlign||e.yAlign||function(t,e){const{y:i,height:s}=e;return i<s/2?"top":i>t.height-s/2?"bottom":"center"}(t,i);return{xAlign:i.xAlign||e.xAlign||Bo(t,e,i,s),yAlign:s}}function Wo(t,e,i,s){const{caretSize:n,caretPadding:o,cornerRadius:a}=t,{xAlign:r,yAlign:l}=i,h=n+o,{topLeft:c,topRight:d,bottomLeft:u,bottomRight:f}=We(a);let g=function(t,e){let{x:i,width:s}=t;return"right"===e?i-=s:"center"===e&&(i-=s/2),i}(e,r);const p=function(t,e,i){let{y:s,height:n}=t;return"top"===e?s+=i:s-="bottom"===e?n+i:n/2,s}(e,l,h);return"center"===l?"left"===r?g+=h:"right"===r&&(g-=h):"left"===r?g-=Math.max(c,u)+n:"right"===r&&(g+=Math.max(d,f)+n),{x:jt(g,0,s.width-e.width),y:jt(p,0,s.height-e.height)}}function No(t,e,i){const s=Ne(i.padding);return"center"===e?t.x+t.width/2:"right"===e?t.x+t.width-s.right:t.x+s.left}function Ho(t){return Eo([],Io(t))}function jo(t,e){const i=e&&e.dataset&&e.dataset.tooltip&&e.dataset.tooltip.callbacks;return i?t.override(i):t}class $o extends Ds{constructor(t){super(),this.opacity=0,this._active=[],this._eventPosition=void 0,this._size=void 0,this._cachedAnimations=void 0,this._tooltipItems=[],this.$animations=void 0,this.$context=void 0,this.chart=t.chart||t._chart,this._chart=this.chart,this.options=t.options,this.dataPoints=void 0,this.title=void 0,this.beforeBody=void 0,this.body=void 0,this.afterBody=void 0,this.footer=void 0,this.xAlign=void 0,this.yAlign=void 0,this.x=void 0,this.y=void 0,this.height=void 0,this.width=void 0,this.caretX=void 0,this.caretY=void 0,this.labelColors=void 0,this.labelPointStyles=void 0,this.labelTextColors=void 0}initialize(t){this.options=t,this._cachedAnimations=void 0,this.$context=void 0}_resolveAnimations(){const t=this._cachedAnimations;if(t)return t;const e=this.chart,i=this.options.setContext(this.getContext()),s=i.enabled&&e.options.animation&&i.animations,n=new gs(this.chart,s);return s._cacheable&&(this._cachedAnimations=Object.freeze(n)),n}getContext(){return this.$context||(this.$context=(t=this.chart.getContext(),e=this,i=this._tooltipItems,Ye(t,{tooltip:e,tooltipItems:i,type:"tooltip"})));var t,e,i}getTitle(t,e){const{callbacks:i}=e,s=i.beforeTitle.apply(this,[t]),n=i.title.apply(this,[t]),o=i.afterTitle.apply(this,[t]);let a=[];return a=Eo(a,Io(s)),a=Eo(a,Io(n)),a=Eo(a,Io(o)),a}getBeforeBody(t,e){return Ho(e.callbacks.beforeBody.apply(this,[t]))}getBody(t,e){const{callbacks:i}=e,s=[];return Q(t,(t=>{const e={before:[],lines:[],after:[]},n=jo(i,t);Eo(e.before,Io(n.beforeLabel.call(this,t))),Eo(e.lines,n.label.call(this,t)),Eo(e.after,Io(n.afterLabel.call(this,t))),s.push(e)})),s}getAfterBody(t,e){return Ho(e.callbacks.afterBody.apply(this,[t]))}getFooter(t,e){const{callbacks:i}=e,s=i.beforeFooter.apply(this,[t]),n=i.footer.apply(this,[t]),o=i.afterFooter.apply(this,[t]);let a=[];return a=Eo(a,Io(s)),a=Eo(a,Io(n)),a=Eo(a,Io(o)),a}_createItems(t){const e=this._active,i=this.chart.data,s=[],n=[],o=[];let a,r,l=[];for(a=0,r=e.length;a<r;++a)l.push(zo(this.chart,e[a]));return t.filter&&(l=l.filter(((e,s,n)=>t.filter(e,s,n,i)))),t.itemSort&&(l=l.sort(((e,s)=>t.itemSort(e,s,i)))),Q(l,(e=>{const i=jo(t.callbacks,e);s.push(i.labelColor.call(this,e)),n.push(i.labelPointStyle.call(this,e)),o.push(i.labelTextColor.call(this,e))})),this.labelColors=s,this.labelPointStyles=n,this.labelTextColors=o,this.dataPoints=l,l}update(t,e){const i=this.options.setContext(this.getContext()),s=this._active;let n,o=[];if(s.length){const t=Ro[i.position].call(this,s,this._eventPosition);o=this._createItems(i),this.title=this.getTitle(o,i),this.beforeBody=this.getBeforeBody(o,i),this.body=this.getBody(o,i),this.afterBody=this.getAfterBody(o,i),this.footer=this.getFooter(o,i);const e=this._size=Fo(this,i),a=Object.assign({},t,e),r=Vo(this.chart,i,a),l=Wo(i,a,r,this.chart);this.xAlign=r.xAlign,this.yAlign=r.yAlign,n={opacity:1,x:l.x,y:l.y,width:e.width,height:e.height,caretX:t.x,caretY:t.y}}else 0!==this.opacity&&(n={opacity:0});this._tooltipItems=o,this.$context=void 0,n&&this._resolveAnimations().update(this,n),t&&i.external&&i.external.call(this,{chart:this.chart,tooltip:this,replay:e})}drawCaret(t,e,i,s){const n=this.getCaretPosition(t,i,s);e.lineTo(n.x1,n.y1),e.lineTo(n.x2,n.y2),e.lineTo(n.x3,n.y3)}getCaretPosition(t,e,i){const{xAlign:s,yAlign:n}=this,{caretSize:o,cornerRadius:a}=i,{topLeft:r,topRight:l,bottomLeft:h,bottomRight:c}=We(a),{x:d,y:u}=t,{width:f,height:g}=e;let p,m,x,b,_,y;return"center"===n?(_=u+g/2,"left"===s?(p=d,m=p-o,b=_+o,y=_-o):(p=d+f,m=p+o,b=_-o,y=_+o),x=p):(m="left"===s?d+Math.max(r,h)+o:"right"===s?d+f-Math.max(l,c)-o:this.caretX,"top"===n?(b=u,_=b-o,p=m-o,x=m+o):(b=u+g,_=b+o,p=m+o,x=m-o),y=b),{x1:p,x2:m,x3:x,y1:b,y2:_,y3:y}}drawTitle(t,e,i){const s=this.title,n=s.length;let o,a,r;if(n){const l=Ei(i.rtl,this.x,this.width);for(t.x=No(this,i.titleAlign,i),e.textAlign=l.textAlign(i.titleAlign),e.textBaseline="middle",o=He(i.titleFont),a=i.titleSpacing,e.fillStyle=i.titleColor,e.font=o.string,r=0;r<n;++r)e.fillText(s[r],l.x(t.x),t.y+o.lineHeight/2),t.y+=o.lineHeight+a,r+1===n&&(t.y+=i.titleMarginBottom-a)}}_drawColorBox(t,e,i,s,n){const o=this.labelColors[i],a=this.labelPointStyles[i],{boxHeight:r,boxWidth:l,boxPadding:h}=n,c=He(n.bodyFont),d=No(this,"left",n),u=s.x(d),f=r<c.lineHeight?(c.lineHeight-r)/2:0,g=e.y+f;if(n.usePointStyle){const e={radius:Math.min(l,r)/2,pointStyle:a.pointStyle,rotation:a.rotation,borderWidth:1},i=s.leftForLtr(u,l)+l/2,h=g+r/2;t.strokeStyle=n.multiKeyBackground,t.fillStyle=n.multiKeyBackground,Zt(t,e,i,h),t.strokeStyle=o.borderColor,t.fillStyle=o.backgroundColor,Zt(t,e,i,h)}else{t.lineWidth=o.borderWidth||1,t.strokeStyle=o.borderColor,t.setLineDash(o.borderDash||[]),t.lineDashOffset=o.borderDashOffset||0;const e=s.leftForLtr(u,l-h),i=s.leftForLtr(s.xPlus(u,1),l-h-2),a=We(o.borderRadius);Object.values(a).some((t=>0!==t))?(t.beginPath(),t.fillStyle=n.multiKeyBackground,oe(t,{x:e,y:g,w:l,h:r,radius:a}),t.fill(),t.stroke(),t.fillStyle=o.backgroundColor,t.beginPath(),oe(t,{x:i,y:g+1,w:l-2,h:r-2,radius:a}),t.fill()):(t.fillStyle=n.multiKeyBackground,t.fillRect(e,g,l,r),t.strokeRect(e,g,l,r),t.fillStyle=o.backgroundColor,t.fillRect(i,g+1,l-2,r-2))}t.fillStyle=this.labelTextColors[i]}drawBody(t,e,i){const{body:s}=this,{bodySpacing:n,bodyAlign:o,displayColors:a,boxHeight:r,boxWidth:l,boxPadding:h}=i,c=He(i.bodyFont);let d=c.lineHeight,u=0;const f=Ei(i.rtl,this.x,this.width),g=function(i){e.fillText(i,f.x(t.x+u),t.y+d/2),t.y+=d+n},p=f.textAlign(o);let m,x,b,_,y,v,w;for(e.textAlign=o,e.textBaseline="middle",e.font=c.string,t.x=No(this,p,i),e.fillStyle=i.bodyColor,Q(this.beforeBody,g),u=a&&"right"!==p?"center"===o?l/2+h:l+2+h:0,_=0,v=s.length;_<v;++_){for(m=s[_],x=this.labelTextColors[_],e.fillStyle=x,Q(m.before,g),b=m.lines,a&&b.length&&(this._drawColorBox(e,t,_,f,i),d=Math.max(c.lineHeight,r)),y=0,w=b.length;y<w;++y)g(b[y]),d=c.lineHeight;Q(m.after,g)}u=0,d=c.lineHeight,Q(this.afterBody,g),t.y-=n}drawFooter(t,e,i){const s=this.footer,n=s.length;let o,a;if(n){const r=Ei(i.rtl,this.x,this.width);for(t.x=No(this,i.footerAlign,i),t.y+=i.footerMarginTop,e.textAlign=r.textAlign(i.footerAlign),e.textBaseline="middle",o=He(i.footerFont),e.fillStyle=i.footerColor,e.font=o.string,a=0;a<n;++a)e.fillText(s[a],r.x(t.x),t.y+o.lineHeight/2),t.y+=o.lineHeight+i.footerSpacing}}drawBackground(t,e,i,s){const{xAlign:n,yAlign:o}=this,{x:a,y:r}=t,{width:l,height:h}=i,{topLeft:c,topRight:d,bottomLeft:u,bottomRight:f}=We(s.cornerRadius);e.fillStyle=s.backgroundColor,e.strokeStyle=s.borderColor,e.lineWidth=s.borderWidth,e.beginPath(),e.moveTo(a+c,r),"top"===o&&this.drawCaret(t,e,i,s),e.lineTo(a+l-d,r),e.quadraticCurveTo(a+l,r,a+l,r+d),"center"===o&&"right"===n&&this.drawCaret(t,e,i,s),e.lineTo(a+l,r+h-f),e.quadraticCurveTo(a+l,r+h,a+l-f,r+h),"bottom"===o&&this.drawCaret(t,e,i,s),e.lineTo(a+u,r+h),e.quadraticCurveTo(a,r+h,a,r+h-u),"center"===o&&"left"===n&&this.drawCaret(t,e,i,s),e.lineTo(a,r+c),e.quadraticCurveTo(a,r,a+c,r),e.closePath(),e.fill(),s.borderWidth>0&&e.stroke()}_updateAnimationTarget(t){const e=this.chart,i=this.$animations,s=i&&i.x,n=i&&i.y;if(s||n){const i=Ro[t.position].call(this,this._active,this._eventPosition);if(!i)return;const o=this._size=Fo(this,t),a=Object.assign({},i,this._size),r=Vo(e,t,a),l=Wo(t,a,r,e);s._to===l.x&&n._to===l.y||(this.xAlign=r.xAlign,this.yAlign=r.yAlign,this.width=o.width,this.height=o.height,this.caretX=i.x,this.caretY=i.y,this._resolveAnimations().update(this,l))}}draw(t){const e=this.options.setContext(this.getContext());let i=this.opacity;if(!i)return;this._updateAnimationTarget(e);const s={width:this.width,height:this.height},n={x:this.x,y:this.y};i=Math.abs(i)<.001?0:i;const o=Ne(e.padding),a=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;e.enabled&&a&&(t.save(),t.globalAlpha=i,this.drawBackground(n,t,s,e),Ii(t,e.textDirection),n.y+=o.top,this.drawTitle(n,t,e),this.drawBody(n,t,e),this.drawFooter(n,t,e),zi(t,e.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){const i=this._active,s=t.map((({datasetIndex:t,index:e})=>{const i=this.chart.getDatasetMeta(t);if(!i)throw new Error("Cannot find a dataset at index "+t);return{datasetIndex:t,element:i.data[e],index:e}})),n=!tt(i,s),o=this._positionChanged(s,e);(n||o)&&(this._active=s,this._eventPosition=e,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,e,i=!0){if(e&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;const s=this.options,n=this._active||[],o=this._getActiveElements(t,n,e,i),a=this._positionChanged(o,t),r=e||!tt(o,n)||a;return r&&(this._active=o,(s.enabled||s.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,e))),r}_getActiveElements(t,e,i,s){const n=this.options;if("mouseout"===t.type)return[];if(!s)return e;const o=this.chart.getElementsAtEventForMode(t,n.mode,n,i);return n.reverse&&o.reverse(),o}_positionChanged(t,e){const{caretX:i,caretY:s,options:n}=this,o=Ro[n.position].call(this,t,e);return!1!==o&&(i!==o.x||s!==o.y)}}$o.positioners=Ro;var Yo={id:"tooltip",_element:$o,positioners:Ro,afterInit(t,e,i){i&&(t.tooltip=new $o({chart:t,options:i}))},beforeUpdate(t,e,i){t.tooltip&&t.tooltip.initialize(i)},reset(t,e,i){t.tooltip&&t.tooltip.initialize(i)},afterDraw(t){const e=t.tooltip,i={tooltip:e};!1!==t.notifyPlugins("beforeTooltipDraw",i)&&(e&&e.draw(t.ctx),t.notifyPlugins("afterTooltipDraw",i))},afterEvent(t,e){if(t.tooltip){const i=e.replay;t.tooltip.handleEvent(e.event,i,e.inChartArea)&&(e.changed=!0)}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(t,e)=>e.bodyFont.size,boxWidth:(t,e)=>e.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:{beforeTitle:H,title(t){if(t.length>0){const e=t[0],i=e.chart.data.labels,s=i?i.length:0;if(this&&this.options&&"dataset"===this.options.mode)return e.dataset.label||"";if(e.label)return e.label;if(s>0&&e.dataIndex<s)return i[e.dataIndex]}return""},afterTitle:H,beforeBody:H,beforeLabel:H,label(t){if(this&&this.options&&"dataset"===this.options.mode)return t.label+": "+t.formattedValue||t.formattedValue;let e=t.dataset.label||"";e&&(e+=": ");const i=t.formattedValue;return $(i)||(e+=i),e},labelColor(t){const e=t.chart.getDatasetMeta(t.datasetIndex).controller.getStyle(t.dataIndex);return{borderColor:e.borderColor,backgroundColor:e.backgroundColor,borderWidth:e.borderWidth,borderDash:e.borderDash,borderDashOffset:e.borderDashOffset,borderRadius:0}},labelTextColor(){return this.options.bodyColor},labelPointStyle(t){const e=t.chart.getDatasetMeta(t.datasetIndex).controller.getStyle(t.dataIndex);return{pointStyle:e.pointStyle,rotation:e.rotation}},afterLabel:H,afterBody:H,beforeFooter:H,footer:H,afterFooter:H}},defaultRoutes:{bodyFont:"font",footerFont:"font",titleFont:"font"},descriptors:{_scriptable:t=>"filter"!==t&&"itemSort"!==t&&"external"!==t,_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]},Uo=Object.freeze({__proto__:null,Decimation:ro,Filler:So,Legend:Co,SubTitle:Lo,Title:Ao,Tooltip:Yo});function Xo(t,e,i,s){const n=t.indexOf(e);if(-1===n)return((t,e,i,s)=>("string"==typeof e?(i=t.push(e)-1,s.unshift({index:i,label:e})):isNaN(e)&&(i=null),i))(t,e,i,s);return n!==t.lastIndexOf(e)?i:n}class qo extends Bs{constructor(t){super(t),this._startValue=void 0,this._valueRange=0,this._addedLabels=[]}init(t){const e=this._addedLabels;if(e.length){const t=this.getLabels();for(const{index:i,label:s}of e)t[i]===s&&t.splice(i,1);this._addedLabels=[]}super.init(t)}parse(t,e){if($(t))return null;const i=this.getLabels();return((t,e)=>null===t?null:jt(Math.round(t),0,e))(e=isFinite(e)&&i[e]===t?e:Xo(i,t,K(e,t),this._addedLabels),i.length-1)}determineDataLimits(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let{min:i,max:s}=this.getMinMax(!0);"ticks"===this.options.bounds&&(t||(i=0),e||(s=this.getLabels().length-1)),this.min=i,this.max=s}buildTicks(){const t=this.min,e=this.max,i=this.options.offset,s=[];let n=this.getLabels();n=0===t&&e===n.length-1?n:n.slice(t,e+1),this._valueRange=Math.max(n.length-(i?0:1),1),this._startValue=this.min-(i?.5:0);for(let i=t;i<=e;i++)s.push({value:i});return s}getLabelForValue(t){const e=this.getLabels();return t>=0&&t<e.length?e[t]:t}configure(){super.configure(),this.isHorizontal()||(this._reversePixels=!this._reversePixels)}getPixelForValue(t){return"number"!=typeof t&&(t=this.parse(t)),null===t?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}}function Ko(t,e,{horizontal:i,minRotation:s}){const n=It(s),o=(i?Math.sin(n):Math.cos(n))||.001,a=.75*e*(""+t).length;return Math.min(e/o,a)}qo.id="category",qo.defaults={ticks:{callback:qo.prototype.getLabelForValue}};class Go extends Bs{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(t,e){return $(t)||("number"==typeof t||t instanceof Number)&&!isFinite(+t)?null:+t}handleTickRangeOptions(){const{beginAtZero:t}=this.options,{minDefined:e,maxDefined:i}=this.getUserBounds();let{min:s,max:n}=this;const o=t=>s=e?s:t,a=t=>n=i?n:t;if(t){const t=Ct(s),e=Ct(n);t<0&&e<0?a(0):t>0&&e>0&&o(0)}if(s===n){let e=1;(n>=Number.MAX_SAFE_INTEGER||s<=Number.MIN_SAFE_INTEGER)&&(e=Math.abs(.05*n)),a(n+e),t||o(s-e)}this.min=s,this.max=n}getTickLimit(){const t=this.options.ticks;let e,{maxTicksLimit:i,stepSize:s}=t;return s?(e=Math.ceil(this.max/s)-Math.floor(this.min/s)+1,e>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${s} would result generating up to ${e} ticks. Limiting to 1000.`),e=1e3)):(e=this.computeTickLimit(),i=i||11),i&&(e=Math.min(i,e)),e}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){const t=this.options,e=t.ticks;let i=this.getTickLimit();i=Math.max(2,i);const s=function(t,e){const i=[],{bounds:s,step:n,min:o,max:a,precision:r,count:l,maxTicks:h,maxDigits:c,includeBounds:d}=t,u=n||1,f=h-1,{min:g,max:p}=e,m=!$(o),x=!$(a),b=!$(l),_=(p-g)/(c+1);let y,v,w,M,k=Ot((p-g)/f/u)*u;if(k<1e-14&&!m&&!x)return[{value:g},{value:p}];M=Math.ceil(p/k)-Math.floor(g/k),M>f&&(k=Ot(M*k/f/u)*u),$(r)||(y=Math.pow(10,r),k=Math.ceil(k*y)/y),"ticks"===s?(v=Math.floor(g/k)*k,w=Math.ceil(p/k)*k):(v=g,w=p),m&&x&&n&&Rt((a-o)/n,k/1e3)?(M=Math.round(Math.min((a-o)/k,h)),k=(a-o)/M,v=o,w=a):b?(v=m?o:v,w=x?a:w,M=l-1,k=(w-v)/M):(M=(w-v)/k,M=Lt(M,Math.round(M),k/1e3)?Math.round(M):Math.ceil(M));const S=Math.max(Ft(k),Ft(v));y=Math.pow(10,$(r)?S:r),v=Math.round(v*y)/y,w=Math.round(w*y)/y;let P=0;for(m&&(d&&v!==o?(i.push({value:o}),v<o&&P++,Lt(Math.round((v+P*k)*y)/y,o,Ko(o,_,t))&&P++):v<o&&P++);P<M;++P)i.push({value:Math.round((v+P*k)*y)/y});return x&&d&&w!==a?i.length&&Lt(i[i.length-1].value,a,Ko(a,_,t))?i[i.length-1].value=a:i.push({value:a}):x&&w!==a||i.push({value:w}),i}({maxTicks:i,bounds:t.bounds,min:t.min,max:t.max,precision:e.precision,step:e.stepSize,count:e.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:e.minRotation||0,includeBounds:!1!==e.includeBounds},this._range||this);return"ticks"===t.bounds&&Et(s,this,"value"),t.reverse?(s.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),s}configure(){const t=this.ticks;let e=this.min,i=this.max;if(super.configure(),this.options.offset&&t.length){const s=(i-e)/Math.max(t.length-1,1)/2;e-=s,i+=s}this._startValue=e,this._endValue=i,this._valueRange=i-e}getLabelForValue(t){return Ri(t,this.chart.options.locale,this.options.ticks.format)}}class Zo extends Go{determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=X(t)?t:0,this.max=X(e)?e:1,this.handleTickRangeOptions()}computeTickLimit(){const t=this.isHorizontal(),e=t?this.width:this.height,i=It(this.options.ticks.minRotation),s=(t?Math.sin(i):Math.cos(i))||.001,n=this._resolveTickFontOptions(0);return Math.ceil(e/Math.min(40,n.lineHeight/s))}getPixelForValue(t){return null===t?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange}}function Jo(t){return 1===t/Math.pow(10,Math.floor(Dt(t)))}Zo.id="linear",Zo.defaults={ticks:{callback:Os.formatters.numeric}};class Qo extends Bs{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(t,e){const i=Go.prototype.parse.apply(this,[t,e]);if(0!==i)return X(i)&&i>0?i:null;this._zero=!0}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=X(t)?Math.max(0,t):null,this.max=X(e)?Math.max(0,e):null,this.options.beginAtZero&&(this._zero=!0),this.handleTickRangeOptions()}handleTickRangeOptions(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let i=this.min,s=this.max;const n=e=>i=t?i:e,o=t=>s=e?s:t,a=(t,e)=>Math.pow(10,Math.floor(Dt(t))+e);i===s&&(i<=0?(n(1),o(10)):(n(a(i,-1)),o(a(s,1)))),i<=0&&n(a(s,-1)),s<=0&&o(a(i,1)),this._zero&&this.min!==this._suggestedMin&&i===a(this.min,0)&&n(a(i,-1)),this.min=i,this.max=s}buildTicks(){const t=this.options,e=function(t,e){const i=Math.floor(Dt(e.max)),s=Math.ceil(e.max/Math.pow(10,i)),n=[];let o=q(t.min,Math.pow(10,Math.floor(Dt(e.min)))),a=Math.floor(Dt(o)),r=Math.floor(o/Math.pow(10,a)),l=a<0?Math.pow(10,Math.abs(a)):1;do{n.push({value:o,major:Jo(o)}),++r,10===r&&(r=1,++a,l=a>=0?1:l),o=Math.round(r*Math.pow(10,a)*l)/l}while(a<i||a===i&&r<s);const h=q(t.max,o);return n.push({value:h,major:Jo(o)}),n}({min:this._userMin,max:this._userMax},this);return"ticks"===t.bounds&&Et(e,this,"value"),t.reverse?(e.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),e}getLabelForValue(t){return void 0===t?"0":Ri(t,this.chart.options.locale,this.options.ticks.format)}configure(){const t=this.min;super.configure(),this._startValue=Dt(t),this._valueRange=Dt(this.max)-Dt(t)}getPixelForValue(t){return void 0!==t&&0!==t||(t=this.min),null===t||isNaN(t)?NaN:this.getPixelForDecimal(t===this.min?0:(Dt(t)-this._startValue)/this._valueRange)}getValueForPixel(t){const e=this.getDecimalForPixel(t);return Math.pow(10,this._startValue+e*this._valueRange)}}function ta(t){const e=t.ticks;if(e.display&&t.display){const t=Ne(e.backdropPadding);return K(e.font&&e.font.size,bt.font.size)+t.height}return 0}function ea(t,e,i,s,n){return t===s||t===n?{start:e-i/2,end:e+i/2}:t<s||t>n?{start:e-i,end:e}:{start:e,end:e+i}}function ia(t){const e={l:t.left+t._padding.left,r:t.right-t._padding.right,t:t.top+t._padding.top,b:t.bottom-t._padding.bottom},i=Object.assign({},e),s=[],n=[],o=t._pointLabels.length,a=t.options.pointLabels,r=a.centerPointLabels?_t/o:0;for(let d=0;d<o;d++){const o=a.setContext(t.getPointLabelContext(d));n[d]=o.padding;const u=t.getPointPosition(d,t.drawingArea+n[d],r),f=He(o.font),g=(l=t.ctx,h=f,c=Y(c=t._pointLabels[d])?c:[c],{w:qt(l,h.string,c),h:c.length*h.lineHeight});s[d]=g;const p=Nt(t.getIndexAngle(d)+r),m=Math.round(zt(p));sa(i,e,p,ea(m,u.x,g.w,0,180),ea(m,u.y,g.h,90,270))}var l,h,c;t.setCenterPoint(e.l-i.l,i.r-e.r,e.t-i.t,i.b-e.b),t._pointLabelItems=function(t,e,i){const s=[],n=t._pointLabels.length,o=t.options,a=ta(o)/2,r=t.drawingArea,l=o.pointLabels.centerPointLabels?_t/n:0;for(let o=0;o<n;o++){const n=t.getPointPosition(o,r+a+i[o],l),h=Math.round(zt(Nt(n.angle+kt))),c=e[o],d=aa(n.y,c.h,h),u=na(h),f=oa(n.x,c.w,u);s.push({x:n.x,y:d,textAlign:u,left:f,top:d,right:f+c.w,bottom:d+c.h})}return s}(t,s,n)}function sa(t,e,i,s,n){const o=Math.abs(Math.sin(i)),a=Math.abs(Math.cos(i));let r=0,l=0;s.start<e.l?(r=(e.l-s.start)/o,t.l=Math.min(t.l,e.l-r)):s.end>e.r&&(r=(s.end-e.r)/o,t.r=Math.max(t.r,e.r+r)),n.start<e.t?(l=(e.t-n.start)/a,t.t=Math.min(t.t,e.t-l)):n.end>e.b&&(l=(n.end-e.b)/a,t.b=Math.max(t.b,e.b+l))}function na(t){return 0===t||180===t?"center":t<180?"left":"right"}function oa(t,e,i){return"right"===i?t-=e:"center"===i&&(t-=e/2),t}function aa(t,e,i){return 90===i||270===i?t-=e/2:(i>270||i<90)&&(t-=e),t}function ra(t,e,i,s){const{ctx:n}=t;if(i)n.arc(t.xCenter,t.yCenter,e,0,yt);else{let i=t.getPointPosition(0,e);n.moveTo(i.x,i.y);for(let o=1;o<s;o++)i=t.getPointPosition(o,e),n.lineTo(i.x,i.y)}}Qo.id="logarithmic",Qo.defaults={ticks:{callback:Os.formatters.logarithmic,major:{enabled:!0}}};class la extends Go{constructor(t){super(t),this.xCenter=void 0,this.yCenter=void 0,this.drawingArea=void 0,this._pointLabels=[],this._pointLabelItems=[]}setDimensions(){const t=this._padding=Ne(ta(this.options)/2),e=this.width=this.maxWidth-t.width,i=this.height=this.maxHeight-t.height;this.xCenter=Math.floor(this.left+e/2+t.left),this.yCenter=Math.floor(this.top+i/2+t.top),this.drawingArea=Math.floor(Math.min(e,i)/2)}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!1);this.min=X(t)&&!isNaN(t)?t:0,this.max=X(e)&&!isNaN(e)?e:0,this.handleTickRangeOptions()}computeTickLimit(){return Math.ceil(this.drawingArea/ta(this.options))}generateTickLabels(t){Go.prototype.generateTickLabels.call(this,t),this._pointLabels=this.getLabels().map(((t,e)=>{const i=J(this.options.pointLabels.callback,[t,e],this);return i||0===i?i:""})).filter(((t,e)=>this.chart.getDataVisibility(e)))}fit(){const t=this.options;t.display&&t.pointLabels.display?ia(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(t,e,i,s){this.xCenter+=Math.floor((t-e)/2),this.yCenter+=Math.floor((i-s)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(t,e,i,s))}getIndexAngle(t){return Nt(t*(yt/(this._pointLabels.length||1))+It(this.options.startAngle||0))}getDistanceFromCenterForValue(t){if($(t))return NaN;const e=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-t)*e:(t-this.min)*e}getValueForDistanceFromCenter(t){if($(t))return NaN;const e=t/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-e:this.min+e}getPointLabelContext(t){const e=this._pointLabels||[];if(t>=0&&t<e.length){const i=e[t];return function(t,e,i){return Ye(t,{label:i,index:e,type:"pointLabel"})}(this.getContext(),t,i)}}getPointPosition(t,e,i=0){const s=this.getIndexAngle(t)-kt+i;return{x:Math.cos(s)*e+this.xCenter,y:Math.sin(s)*e+this.yCenter,angle:s}}getPointPositionForValue(t,e){return this.getPointPosition(t,this.getDistanceFromCenterForValue(e))}getBasePosition(t){return this.getPointPositionForValue(t||0,this.getBaseValue())}getPointLabelPosition(t){const{left:e,top:i,right:s,bottom:n}=this._pointLabelItems[t];return{left:e,top:i,right:s,bottom:n}}drawBackground(){const{backgroundColor:t,grid:{circular:e}}=this.options;if(t){const i=this.ctx;i.save(),i.beginPath(),ra(this,this.getDistanceFromCenterForValue(this._endValue),e,this._pointLabels.length),i.closePath(),i.fillStyle=t,i.fill(),i.restore()}}drawGrid(){const t=this.ctx,e=this.options,{angleLines:i,grid:s}=e,n=this._pointLabels.length;let o,a,r;if(e.pointLabels.display&&function(t,e){const{ctx:i,options:{pointLabels:s}}=t;for(let n=e-1;n>=0;n--){const e=s.setContext(t.getPointLabelContext(n)),o=He(e.font),{x:a,y:r,textAlign:l,left:h,top:c,right:d,bottom:u}=t._pointLabelItems[n],{backdropColor:f}=e;if(!$(f)){const t=Ne(e.backdropPadding);i.fillStyle=f,i.fillRect(h-t.left,c-t.top,d-h+t.width,u-c+t.height)}se(i,t._pointLabels[n],a,r+o.lineHeight/2,o,{color:e.color,textAlign:l,textBaseline:"middle"})}}(this,n),s.display&&this.ticks.forEach(((t,e)=>{if(0!==e){a=this.getDistanceFromCenterForValue(t.value);!function(t,e,i,s){const n=t.ctx,o=e.circular,{color:a,lineWidth:r}=e;!o&&!s||!a||!r||i<0||(n.save(),n.strokeStyle=a,n.lineWidth=r,n.setLineDash(e.borderDash),n.lineDashOffset=e.borderDashOffset,n.beginPath(),ra(t,i,o,s),n.closePath(),n.stroke(),n.restore())}(this,s.setContext(this.getContext(e-1)),a,n)}})),i.display){for(t.save(),o=n-1;o>=0;o--){const s=i.setContext(this.getPointLabelContext(o)),{color:n,lineWidth:l}=s;l&&n&&(t.lineWidth=l,t.strokeStyle=n,t.setLineDash(s.borderDash),t.lineDashOffset=s.borderDashOffset,a=this.getDistanceFromCenterForValue(e.ticks.reverse?this.min:this.max),r=this.getPointPosition(o,a),t.beginPath(),t.moveTo(this.xCenter,this.yCenter),t.lineTo(r.x,r.y),t.stroke())}t.restore()}}drawBorder(){}drawLabels(){const t=this.ctx,e=this.options,i=e.ticks;if(!i.display)return;const s=this.getIndexAngle(0);let n,o;t.save(),t.translate(this.xCenter,this.yCenter),t.rotate(s),t.textAlign="center",t.textBaseline="middle",this.ticks.forEach(((s,a)=>{if(0===a&&!e.reverse)return;const r=i.setContext(this.getContext(a)),l=He(r.font);if(n=this.getDistanceFromCenterForValue(this.ticks[a].value),r.showLabelBackdrop){t.font=l.string,o=t.measureText(s.label).width,t.fillStyle=r.backdropColor;const e=Ne(r.backdropPadding);t.fillRect(-o/2-e.left,-n-l.size/2-e.top,o+e.width,l.size+e.height)}se(t,s.label,0,-n,l,{color:r.color})})),t.restore()}drawTitle(){}}la.id="radialLinear",la.defaults={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,lineWidth:1,borderDash:[],borderDashOffset:0},grid:{circular:!1},startAngle:0,ticks:{showLabelBackdrop:!0,callback:Os.formatters.numeric},pointLabels:{backdropColor:void 0,backdropPadding:2,display:!0,font:{size:10},callback:t=>t,padding:5,centerPointLabels:!1}},la.defaultRoutes={"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"},la.descriptors={angleLines:{_fallback:"grid"}};const ha={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},ca=Object.keys(ha);function da(t,e){return t-e}function ua(t,e){if($(e))return null;const i=t._adapter,{parser:s,round:n,isoWeekday:o}=t._parseOpts;let a=e;return"function"==typeof s&&(a=s(a)),X(a)||(a="string"==typeof s?i.parse(a,s):i.parse(a)),null===a?null:(n&&(a="week"!==n||!Tt(o)&&!0!==o?i.startOf(a,n):i.startOf(a,"isoWeek",o)),+a)}function fa(t,e,i,s){const n=ca.length;for(let o=ca.indexOf(t);o<n-1;++o){const t=ha[ca[o]],n=t.steps?t.steps:Number.MAX_SAFE_INTEGER;if(t.common&&Math.ceil((i-e)/(n*t.size))<=s)return ca[o]}return ca[n-1]}function ga(t,e,i){if(i){if(i.length){const{lo:s,hi:n}=ae(i,e);t[i[s]>=e?i[s]:i[n]]=!0}}else t[e]=!0}function pa(t,e,i){const s=[],n={},o=e.length;let a,r;for(a=0;a<o;++a)r=e[a],n[r]=a,s.push({value:r,major:!1});return 0!==o&&i?function(t,e,i,s){const n=t._adapter,o=+n.startOf(e[0].value,s),a=e[e.length-1].value;let r,l;for(r=o;r<=a;r=+n.add(r,1,s))l=i[r],l>=0&&(e[l].major=!0);return e}(t,s,n,i):s}class ma extends Bs{constructor(t){super(t),this._cache={data:[],labels:[],all:[]},this._unit="day",this._majorUnit=void 0,this._offsets={},this._normalized=!1,this._parseOpts=void 0}init(t,e){const i=t.time||(t.time={}),s=this._adapter=new mn._date(t.adapters.date);ot(i.displayFormats,s.formats()),this._parseOpts={parser:i.parser,round:i.round,isoWeekday:i.isoWeekday},super.init(t),this._normalized=e.normalized}parse(t,e){return void 0===t?null:ua(this,t)}beforeLayout(){super.beforeLayout(),this._cache={data:[],labels:[],all:[]}}determineDataLimits(){const t=this.options,e=this._adapter,i=t.time.unit||"day";let{min:s,max:n,minDefined:o,maxDefined:a}=this.getUserBounds();function r(t){o||isNaN(t.min)||(s=Math.min(s,t.min)),a||isNaN(t.max)||(n=Math.max(n,t.max))}o&&a||(r(this._getLabelBounds()),"ticks"===t.bounds&&"labels"===t.ticks.source||r(this.getMinMax(!1))),s=X(s)&&!isNaN(s)?s:+e.startOf(Date.now(),i),n=X(n)&&!isNaN(n)?n:+e.endOf(Date.now(),i)+1,this.min=Math.min(s,n-1),this.max=Math.max(s+1,n)}_getLabelBounds(){const t=this.getLabelTimestamps();let e=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;return t.length&&(e=t[0],i=t[t.length-1]),{min:e,max:i}}buildTicks(){const t=this.options,e=t.time,i=t.ticks,s="labels"===i.source?this.getLabelTimestamps():this._generate();"ticks"===t.bounds&&s.length&&(this.min=this._userMin||s[0],this.max=this._userMax||s[s.length-1]);const n=this.min,o=he(s,n,this.max);return this._unit=e.unit||(i.autoSkip?fa(e.minUnit,this.min,this.max,this._getLabelCapacity(n)):function(t,e,i,s,n){for(let o=ca.length-1;o>=ca.indexOf(i);o--){const i=ca[o];if(ha[i].common&&t._adapter.diff(n,s,i)>=e-1)return i}return ca[i?ca.indexOf(i):0]}(this,o.length,e.minUnit,this.min,this.max)),this._majorUnit=i.major.enabled&&"year"!==this._unit?function(t){for(let e=ca.indexOf(t)+1,i=ca.length;e<i;++e)if(ha[ca[e]].common)return ca[e]}(this._unit):void 0,this.initOffsets(s),t.reverse&&o.reverse(),pa(this,o,this._majorUnit)}initOffsets(t){let e,i,s=0,n=0;this.options.offset&&t.length&&(e=this.getDecimalForValue(t[0]),s=1===t.length?1-e:(this.getDecimalForValue(t[1])-e)/2,i=this.getDecimalForValue(t[t.length-1]),n=1===t.length?i:(i-this.getDecimalForValue(t[t.length-2]))/2);const o=t.length<3?.5:.25;s=jt(s,0,o),n=jt(n,0,o),this._offsets={start:s,end:n,factor:1/(s+1+n)}}_generate(){const t=this._adapter,e=this.min,i=this.max,s=this.options,n=s.time,o=n.unit||fa(n.minUnit,e,i,this._getLabelCapacity(e)),a=K(n.stepSize,1),r="week"===o&&n.isoWeekday,l=Tt(r)||!0===r,h={};let c,d,u=e;if(l&&(u=+t.startOf(u,"isoWeek",r)),u=+t.startOf(u,l?"day":o),t.diff(i,e,o)>1e5*a)throw new Error(e+" and "+i+" are too far apart with stepSize of "+a+" "+o);const f="data"===s.ticks.source&&this.getDataTimestamps();for(c=u,d=0;c<i;c=+t.add(c,a,o),d++)ga(h,c,f);return c!==i&&"ticks"!==s.bounds&&1!==d||ga(h,c,f),Object.keys(h).sort(((t,e)=>t-e)).map((t=>+t))}getLabelForValue(t){const e=this._adapter,i=this.options.time;return i.tooltipFormat?e.format(t,i.tooltipFormat):e.format(t,i.displayFormats.datetime)}_tickFormatFunction(t,e,i,s){const n=this.options,o=n.time.displayFormats,a=this._unit,r=this._majorUnit,l=a&&o[a],h=r&&o[r],c=i[e],d=r&&h&&c&&c.major,u=this._adapter.format(t,s||(d?h:l)),f=n.ticks.callback;return f?J(f,[u,e,i],this):u}generateTickLabels(t){let e,i,s;for(e=0,i=t.length;e<i;++e)s=t[e],s.label=this._tickFormatFunction(s.value,e,t)}getDecimalForValue(t){return null===t?NaN:(t-this.min)/(this.max-this.min)}getPixelForValue(t){const e=this._offsets,i=this.getDecimalForValue(t);return this.getPixelForDecimal((e.start+i)*e.factor)}getValueForPixel(t){const e=this._offsets,i=this.getDecimalForPixel(t)/e.factor-e.end;return this.min+i*(this.max-this.min)}_getLabelSize(t){const e=this.options.ticks,i=this.ctx.measureText(t).width,s=It(this.isHorizontal()?e.maxRotation:e.minRotation),n=Math.cos(s),o=Math.sin(s),a=this._resolveTickFontOptions(0).size;return{w:i*n+a*o,h:i*o+a*n}}_getLabelCapacity(t){const e=this.options.time,i=e.displayFormats,s=i[e.unit]||i.millisecond,n=this._tickFormatFunction(t,0,pa(this,[t],this._majorUnit),s),o=this._getLabelSize(n),a=Math.floor(this.isHorizontal()?this.width/o.w:this.height/o.h)-1;return a>0?a:1}getDataTimestamps(){let t,e,i=this._cache.data||[];if(i.length)return i;const s=this.getMatchingVisibleMetas();if(this._normalized&&s.length)return this._cache.data=s[0].controller.getAllParsedValues(this);for(t=0,e=s.length;t<e;++t)i=i.concat(s[t].controller.getAllParsedValues(this));return this._cache.data=this.normalize(i)}getLabelTimestamps(){const t=this._cache.labels||[];let e,i;if(t.length)return t;const s=this.getLabels();for(e=0,i=s.length;e<i;++e)t.push(ua(this,s[e]));return this._cache.labels=this._normalized?t:this.normalize(t)}normalize(t){return fe(t.sort(da))}}function xa(t,e,i){let s,n,o,a,r=0,l=t.length-1;i?(e>=t[r].pos&&e<=t[l].pos&&({lo:r,hi:l}=re(t,"pos",e)),({pos:s,time:o}=t[r]),({pos:n,time:a}=t[l])):(e>=t[r].time&&e<=t[l].time&&({lo:r,hi:l}=re(t,"time",e)),({time:s,pos:o}=t[r]),({time:n,pos:a}=t[l]));const h=n-s;return h?o+(a-o)*(e-s)/h:o}ma.id="time",ma.defaults={bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{source:"auto",major:{enabled:!1}}};class ba extends ma{constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){const t=this._getTimestampsForTable(),e=this._table=this.buildLookupTable(t);this._minPos=xa(e,this.min),this._tableRange=xa(e,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){const{min:e,max:i}=this,s=[],n=[];let o,a,r,l,h;for(o=0,a=t.length;o<a;++o)l=t[o],l>=e&&l<=i&&s.push(l);if(s.length<2)return[{time:e,pos:0},{time:i,pos:1}];for(o=0,a=s.length;o<a;++o)h=s[o+1],r=s[o-1],l=s[o],Math.round((h+r)/2)!==l&&n.push({time:l,pos:o/(a-1)});return n}_getTimestampsForTable(){let t=this._cache.all||[];if(t.length)return t;const e=this.getDataTimestamps(),i=this.getLabelTimestamps();return t=e.length&&i.length?this.normalize(e.concat(i)):e.length?e:i,t=this._cache.all=t,t}getDecimalForValue(t){return(xa(this._table,t)-this._minPos)/this._tableRange}getValueForPixel(t){const e=this._offsets,i=this.getDecimalForPixel(t)/e.factor-e.end;return xa(this._table,i*this._tableRange+this._minPos,!0)}}ba.id="timeseries",ba.defaults=ma.defaults;var _a=Object.freeze({__proto__:null,CategoryScale:qo,LinearScale:Zo,LogarithmicScale:Qo,RadialLinearScale:la,TimeScale:ma,TimeSeriesScale:ba});return dn.register(Rn,_a,no,Uo),dn.helpers={...Yi},dn._adapters=mn,dn.Animation=us,dn.Animations=gs,dn.animator=a,dn.controllers=Ws.controllers.items,dn.DatasetController=Ps,dn.Element=Ds,dn.elements=no,dn.Interaction=Ee,dn.layouts=ni,dn.platforms=hs,dn.Scale=Bs,dn.Ticks=Os,Object.assign(dn,Rn,_a,no,Uo,hs),dn.Chart=dn,"undefined"!=typeof window&&(window.Chart=dn),dn}));
cookie-notice.php CHANGED
@@ -2,7 +2,7 @@
2
  /*
3
  Plugin Name: Cookie Notice & Compliance for GDPR / CCPA
4
  Description: Cookie Notice allows you to you elegantly inform users that your site uses cookies and helps you comply with GDPR, CCPA and other data privacy laws.
5
- Version: 2.2.1
6
  Author: Hu-manity.co
7
  Author URI: https://hu-manity.co/
8
  Plugin URI: https://hu-manity.co/
@@ -12,7 +12,7 @@ Text Domain: cookie-notice
12
  Domain Path: /languages
13
 
14
  Cookie Notice
15
- Copyright (C) 2021, Hu-manity.co - info@hu-manity.co
16
 
17
  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:
18
 
@@ -29,7 +29,7 @@ if ( ! defined( 'ABSPATH' ) )
29
  * Cookie Notice class.
30
  *
31
  * @class Cookie_Notice
32
- * @version 2.2.1
33
  */
34
  class Cookie_Notice {
35
 
@@ -86,7 +86,7 @@ class Cookie_Notice {
86
  'update_notice' => true,
87
  'update_delay_date' => 0
88
  ),
89
- 'version' => '2.2.1'
90
  );
91
  private $deactivaion_url = '';
92
 
@@ -116,6 +116,7 @@ class Cookie_Notice {
116
  self::$_instance->includes();
117
 
118
  self::$_instance->bot_detect = new Cookie_Notice_Bot_Detect();
 
119
  self::$_instance->frontend = new Cookie_Notice_Frontend();
120
  self::$_instance->settings = new Cookie_Notice_Settings();
121
  self::$_instance->welcome = new Cookie_Notice_Welcome();
@@ -177,6 +178,7 @@ class Cookie_Notice {
177
  */
178
  private function includes() {
179
  include_once( plugin_dir_path( __FILE__ ) . 'includes/bot-detect.php' );
 
180
  include_once( plugin_dir_path( __FILE__ ) . 'includes/frontend.php' );
181
  include_once( plugin_dir_path( __FILE__ ) . 'includes/functions.php' );
182
  include_once( plugin_dir_path( __FILE__ ) . 'includes/settings.php' );
@@ -245,14 +247,14 @@ class Cookie_Notice {
245
 
246
  // if visiting settings, mark notice as read
247
  if ( ! empty( $_GET['page'] ) && $_GET['page'] === 'cookie-notice' && ! empty( $_GET['welcome'] ) ) {
248
- $this->options['general'] = wp_parse_args( array( 'update_notice' => true ), $this->options['general'] );
249
  update_option( 'cookie_notice_options', $this->options['general'] );
250
  }
251
 
252
  // show notice, if no compliance only
253
  if ( $this->options['general']['update_notice'] === true && empty( $this->status ) ) {
254
  // set_transient( 'cn_show_welcome', 1 );
255
- $this->add_notice( '<div class="cn-notice-text"><h2>' . __( 'Make sure your website complies with the latest cookie consent laws', 'cookie-notice' ) . '</h2><p>' . __( 'Run compliance check to learn if your website complies with the lastes consent record storage and cookie blocking requirements.', 'cookie-notice' ) . '</p><p class="cn-notice-actions"><a href="' . admin_url( 'admin.php' ) . '?page=cookie-notice&welcome=1' . '" class="button button-primary">' . __( 'Run Compliance Check', 'cookie-notice' ) . '</a> <a href="#" class="button-link cn-notice-dismiss">' . __( 'Dismiss Notice', 'cookie-notice' ) . '</a></p></div>', '', 'div' );
256
  }
257
  }
258
 
2
  /*
3
  Plugin Name: Cookie Notice & Compliance for GDPR / CCPA
4
  Description: Cookie Notice allows you to you elegantly inform users that your site uses cookies and helps you comply with GDPR, CCPA and other data privacy laws.
5
+ Version: 2.2.2
6
  Author: Hu-manity.co
7
  Author URI: https://hu-manity.co/
8
  Plugin URI: https://hu-manity.co/
12
  Domain Path: /languages
13
 
14
  Cookie Notice
15
+ Copyright (C) 2022, Hu-manity.co - info@hu-manity.co
16
 
17
  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:
18
 
29
  * Cookie Notice class.
30
  *
31
  * @class Cookie_Notice
32
+ * @version 2.2.2
33
  */
34
  class Cookie_Notice {
35
 
86
  'update_notice' => true,
87
  'update_delay_date' => 0
88
  ),
89
+ 'version' => '2.2.2'
90
  );
91
  private $deactivaion_url = '';
92
 
116
  self::$_instance->includes();
117
 
118
  self::$_instance->bot_detect = new Cookie_Notice_Bot_Detect();
119
+ self::$_instance->dashboard = new Cookie_Notice_Dashboard();
120
  self::$_instance->frontend = new Cookie_Notice_Frontend();
121
  self::$_instance->settings = new Cookie_Notice_Settings();
122
  self::$_instance->welcome = new Cookie_Notice_Welcome();
178
  */
179
  private function includes() {
180
  include_once( plugin_dir_path( __FILE__ ) . 'includes/bot-detect.php' );
181
+ include_once( plugin_dir_path( __FILE__ ) . 'includes/dashboard.php' );
182
  include_once( plugin_dir_path( __FILE__ ) . 'includes/frontend.php' );
183
  include_once( plugin_dir_path( __FILE__ ) . 'includes/functions.php' );
184
  include_once( plugin_dir_path( __FILE__ ) . 'includes/settings.php' );
247
 
248
  // if visiting settings, mark notice as read
249
  if ( ! empty( $_GET['page'] ) && $_GET['page'] === 'cookie-notice' && ! empty( $_GET['welcome'] ) ) {
250
+ $this->options['general'] = wp_parse_args( array( 'update_notice' => false ), $this->options['general'] );
251
  update_option( 'cookie_notice_options', $this->options['general'] );
252
  }
253
 
254
  // show notice, if no compliance only
255
  if ( $this->options['general']['update_notice'] === true && empty( $this->status ) ) {
256
  // set_transient( 'cn_show_welcome', 1 );
257
+ $this->add_notice( '<div class="cn-notice-text"><h2>' . __( 'Compliance fines exceeded &euro;1.3 BILLION in 2021. Avoid the risk by making sure your website complies with the latest cookie consent laws.', 'cookie-notice' ) . '</h2><p>' . __( 'Run compliance check to learn if your website complies with the latest consent record storage and cookie blocking requirements.', 'cookie-notice' ) . '</p><p class="cn-notice-actions"><a href="' . admin_url( 'admin.php' ) . '?page=cookie-notice&welcome=1' . '" class="button button-primary cn-button">' . __( 'Run Compliance Check', 'cookie-notice' ) . '</a> <a href="#" class="button-link cn-notice-dismiss">' . __( 'Dismiss Notice', 'cookie-notice' ) . '</a></p></div>', 'error', 'div' );
258
  }
259
  }
260
 
css/admin-dashboard.css ADDED
@@ -0,0 +1,348 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .cn-dashboard-container {
2
+ min-height: 130px;
3
+ margin: 0 -4px;
4
+ text-align: center;
5
+ position: relative;
6
+ display: flex;
7
+ flex-direction: column;
8
+ }
9
+
10
+ .cn-dashboard-container .spinner {
11
+ position: absolute;
12
+ left: 50%;
13
+ top: 40%;
14
+ margin-left: -10px;
15
+ z-index: 10;
16
+ }
17
+
18
+ .cn-dashboard-container.loading {
19
+ pointer-events: none;
20
+ }
21
+
22
+ .cn-dashboard-container.loading:after {
23
+ position: absolute;
24
+ content: '';
25
+ display: block;
26
+ height: 100%;
27
+ width: 100%;
28
+ top: 0;
29
+ left: 0;
30
+ background-color: rgba(255,255,255,0.8);
31
+ z-index: 1;
32
+ transition: all 0.2s;
33
+ }
34
+
35
+ .cn-dashboard_stats p.sub {
36
+ color: #8f8f8f;
37
+ font-size: 14px;
38
+ text-align: left;
39
+ padding-bottom: 3px;
40
+ border-bottom: 1px solid #ececec;
41
+ }
42
+
43
+ .cn-table-responsive {
44
+ overflow-x: auto;
45
+ -webkit-overflow-scrolling: touch;
46
+ }
47
+
48
+ .cn-table {
49
+ caption-side: bottom;
50
+ border-collapse: collapse;
51
+ width: 100%;
52
+ margin-bottom: 1rem;
53
+ color: inherit;
54
+ vertical-align: top;
55
+ border-color: #dee2e6;
56
+ text-align: left;
57
+ }
58
+
59
+ .cn-table > thead {
60
+ vertical-align: bottom;
61
+ color: #212529;
62
+ }
63
+
64
+ .cn-table > tbody {
65
+ vertical-align: inherit;
66
+ }
67
+
68
+ .cn-table tbody,
69
+ .cn-table td,
70
+ .cn-table tfoot,
71
+ .cn-table th,
72
+ .cn-table thead,
73
+ .cn-table tr {
74
+ border-color: inherit;
75
+ border-style: solid;
76
+ border-width: 0;
77
+ }
78
+
79
+ .cn-table th,
80
+ .cn-table td {
81
+ text-align: inherit;
82
+ text-align: -webkit-match-parent;
83
+ }
84
+
85
+ .cn-table th:first-child,
86
+ .cn-table td:first-child {
87
+ width: 1px;
88
+ white-space: nowrap;
89
+ }
90
+
91
+ .cn-table th:last-child,
92
+ .cn-table td:last-child {
93
+ text-align: right;
94
+ }
95
+
96
+ .cn-table .no-posts :last-child {
97
+ text-align: left;
98
+ }
99
+
100
+ .cn-table > :not(caption) > * > * {
101
+ padding: .5rem .5rem;
102
+ background-color: transparent;
103
+ border-bottom-width: 1px;
104
+ box-shadow: inset 0 0 0 9999px transparent;
105
+ }
106
+
107
+ #cn_dashboard_stats .inside {
108
+ margin: 0;
109
+ padding: 0;
110
+ }
111
+
112
+ .cn-accordion-toggle {
113
+ cursor: pointer;
114
+ line-height: 1;
115
+ position: relative;
116
+ font-size: 14px;
117
+ font-weight: 400;
118
+ line-height: 1;
119
+ margin: 0;
120
+ padding: 15px 15px 0;
121
+ color: #23282c;
122
+ }
123
+
124
+ .cn-accordion-title {
125
+ display: inline-block;
126
+ padding-right: 10px;
127
+ }
128
+
129
+ .cn-accordion-actions {
130
+ position: absolute;
131
+ top: 0;
132
+ right: 0;
133
+ z-index: 1;
134
+ padding: 11px 30px 11px 0;
135
+ height: 14px;
136
+ line-height: 1;
137
+ }
138
+
139
+ .cn-accordion-actions .cn-accordion-action,
140
+ .cn-accordion-actions .cn-accordion-action::before {
141
+ font-size: 14px;
142
+ height: 14px;
143
+ width: 14px;
144
+ color: #72777c;
145
+ }
146
+
147
+ .cn-tooltip {
148
+ position: relative;
149
+ }
150
+
151
+ .cn-tooltip-icon {
152
+ display: inline-block;
153
+ width: 16px;
154
+ cursor: help;
155
+ }
156
+
157
+ .cn-tooltip-icon::before {
158
+ color: #b4b9be;
159
+ content: "\f14c";
160
+ display: inline-block;
161
+ font: normal 16px/1 dashicons;
162
+ position: absolute;
163
+ text-decoration: none !important;
164
+ speak: none;
165
+ -webkit-font-smoothing: antialiased;
166
+ -moz-osx-font-smoothing: grayscale;
167
+ left: 0;
168
+ top: 2px;
169
+ }
170
+
171
+ .cn-according-header {
172
+ display: flex;
173
+ align-items: center;
174
+ justify-content: space-between;
175
+ }
176
+
177
+ .cn-accordion-content {
178
+ padding: 20px 20px 15px;
179
+ height: 100%;
180
+ }
181
+
182
+ .cn-collapsed .cn-accordion-toggle::before {
183
+ transform: rotate(180deg);
184
+ }
185
+
186
+ .cn-collapsed .cn-accordion-content {
187
+ display: none;
188
+ }
189
+
190
+ .cn-infobox-container {
191
+ display: flex;
192
+ flex-wrap: wrap;
193
+ border: 1px solid #eee;
194
+ }
195
+
196
+ .cn-infobox-container:not(:first-child) {
197
+ border-top-color: transparent;
198
+ }
199
+
200
+ .cn-infobox {
201
+ width: 50%;
202
+ padding: 12px 10px 10px 15px;
203
+ position: relative;
204
+ text-align: left;
205
+ box-sizing: border-box;
206
+ border-left: 1px solid transparent;
207
+ min-height: 135px;
208
+ }
209
+
210
+ #cn-visits-infobox-consents {
211
+ border-left-color: #eee;
212
+ }
213
+
214
+ #cn-visits-infobox-limits,
215
+ #cn-visits-chart-limits {
216
+ border-top-color: #eee;
217
+ }
218
+
219
+ .cn-infobox-notice {
220
+ width: 100%;
221
+ margin: 5px 10px 15px 15px;
222
+ padding: 15px 12px;
223
+ position: relative;
224
+ text-align: left;
225
+ box-sizing: border-box;
226
+ background: rgba(255, 193, 7, 0.05);
227
+ border: 1px solid rgb(255, 193, 7);
228
+ }
229
+
230
+ .cn-infobox-notice p {
231
+ margin-top: 0;
232
+ }
233
+
234
+ .cn-infobox-notice p:last-child {
235
+ margin-bottom: 0;
236
+ }
237
+
238
+ .cn-infobox-notice p b {
239
+ font-size: 15px;
240
+ color: #222;
241
+ }
242
+
243
+ .cn-infobox-title {
244
+ font-size: 16px;
245
+ color: #393f4c;
246
+ font-weight: 700;
247
+ margin-top: 0;
248
+ padding-right: 18px;
249
+ text-overflow: ellipsis;
250
+ overflow: hidden;
251
+ white-space: pre;
252
+ line-height: 1.2;
253
+ }
254
+
255
+ .cn-infobox-number {
256
+ font-size: 36px;
257
+ float: none;
258
+ font-weight: 400;
259
+ display: inline-block;
260
+ line-height: 1;
261
+ margin-top: 11px;
262
+ color: rgb(32, 193, 158);
263
+ }
264
+
265
+ .cn-infobox-subtitle {
266
+ margin-top: 22px;
267
+ color: #a4a9ae;
268
+ }
269
+
270
+ .cn-infobox-subtitle p {
271
+ margin: 0 0 5px;
272
+ }
273
+
274
+
275
+ .cn-infobox-tooltip {
276
+ position: absolute;
277
+ top: 12px;
278
+ right: 15px;
279
+ }
280
+
281
+ .cn-widget-block {
282
+ position: relative;
283
+ overflow: hidden;
284
+ }
285
+
286
+ #cn-dashboard-upgrade {
287
+ position: absolute;
288
+ left: 0;
289
+ top: 0;
290
+ height: 100%;
291
+ width: 100%;
292
+ overflow: hidden;
293
+ box-sizing: border-box;
294
+ background: rgba(255,255,255,0.8);
295
+ min-height: 400px;
296
+ }
297
+
298
+ #cn-dashboard-modal {
299
+ position: absolute;
300
+ top: 50%;
301
+ left: 50%;
302
+ transform: translate(-50%, -50%);
303
+ padding: 1.5em 3em;
304
+ box-shadow: 0 0 25px 10px rgba(0,0,0,0.1);
305
+ border-radius: 3px;
306
+ background-color: #fff;
307
+ text-align: center;
308
+ width: 22em;
309
+ }
310
+
311
+ #cn-dashboard-modal p {
312
+ margin: 0;
313
+ }
314
+
315
+ #cn-dashboard-modal h2 {
316
+ margin-bottom: 10px;
317
+ font-size: 21px;
318
+ }
319
+
320
+ .button.cn-button {
321
+ margin-top: 25px;
322
+ margin-bottom: 10px;
323
+ background-color: #20c19e;
324
+ border-color: #20c19e;
325
+ }
326
+
327
+ .button.cn-button:hover,
328
+ .button.cn-button:active,
329
+ .button.cn-button:focus {
330
+ background-color: #1ca98a;
331
+ border-color: #1ca98a;
332
+ }
333
+
334
+ .button.cn-button:focus {
335
+ box-shadow: 0 0 0 1px #fff, 0 0 0 3px #20c19e;
336
+ }
337
+
338
+ .cn-text-succcess {
339
+ color: #20c19e;
340
+ }
341
+
342
+ .cn-text-warning {
343
+ color: rgb(255, 193, 7);
344
+ }
345
+
346
+ .cn-text-danger {
347
+ color: rgb(200, 35, 51);
348
+ }
css/admin-notice.css CHANGED
@@ -1,48 +1,48 @@
1
  #cn-admin-notice.cn-notice {
2
- border-left-color: #00a99d;
3
  }
4
 
5
  .cn-notice .cn-notice-container {
6
- padding: 1em;
7
- display: flex;
8
- justify-content: space-between;
9
- align-items: center;
10
  }
11
 
12
  .cn-notice .cn-notice-actions {
13
- margin-bottom: 0;
14
  }
15
 
16
  .cn-notice .cn-notice-actions .button {
17
- display: inline-block;
18
- margin: 0.5em 0 0;
19
  }
20
 
21
  .cn-notice .cn-notice-text h2 {
22
- margin-top: 0;
23
- margin-bottom: 0.5em;
24
  }
25
 
26
  .cn-notice .cn-notice-dismiss {
27
- margin-left: 1em;
28
  }
29
 
30
  .cn-notice .cn-notice-text strong {
31
- color: #000;
32
  }
33
 
34
  .cn-notice .cn-notice-icon svg path {
35
- fill: #666 !important;
36
  }
37
 
38
  @media only screen and (max-width: 960px) {
39
- .cn-notice .cn-notice-container {
40
- flex-direction: column;
41
- align-items: initial;
42
- }
43
-
44
- .cn-notice .cn-notice-container .cn-notice-text {
45
- order: 1;
46
- padding-top: 1em;
47
- }
48
  }
1
  #cn-admin-notice.cn-notice {
2
+ border-left-color: #20c19e;
3
  }
4
 
5
  .cn-notice .cn-notice-container {
6
+ padding: 1em;
7
+ display: flex;
8
+ justify-content: space-between;
9
+ align-items: center;
10
  }
11
 
12
  .cn-notice .cn-notice-actions {
13
+ margin-bottom: 0;
14
  }
15
 
16
  .cn-notice .cn-notice-actions .button {
17
+ display: inline-block;
18
+ margin: 0.5em 0 0;
19
  }
20
 
21
  .cn-notice .cn-notice-text h2 {
22
+ margin-top: 0;
23
+ margin-bottom: 0.5em;
24
  }
25
 
26
  .cn-notice .cn-notice-dismiss {
27
+ margin-left: 1em;
28
  }
29
 
30
  .cn-notice .cn-notice-text strong {
31
+ color: #000;
32
  }
33
 
34
  .cn-notice .cn-notice-icon svg path {
35
+ fill: #666 !important;
36
  }
37
 
38
  @media only screen and (max-width: 960px) {
39
+ .cn-notice .cn-notice-container {
40
+ flex-direction: column;
41
+ align-items: initial;
42
+ }
43
+
44
+ .cn-notice .cn-notice-container .cn-notice-text {
45
+ order: 1;
46
+ padding-top: 1em;
47
+ }
48
  }
css/admin-welcome.css CHANGED
@@ -1,46 +1,46 @@
1
  .cn-welcome-wrap #wpcontent {
2
- padding-left: 0;
3
  }
4
 
5
  .cn-welcome-wrap .update-nag {
6
- display: none;
7
  }
8
 
9
  .cn-welcome-wrap * {
10
- box-sizing: border-box;
11
  }
12
 
13
  .cn-welcome-wrap #wpbody-content {
14
- padding-bottom: 0;
15
  }
16
 
17
  .cn-welcome-wrap #wpfooter {
18
- display: none !important;
19
  }
20
 
21
  #cn_upgrade_iframe iframe {
22
- width: 100%;
23
- height: 100%;
24
- margin: 0;
25
- border: 0;
26
- padding: 0;
27
  }
28
 
29
  .cn-welcome-wrap {
30
- display: flex;
31
- height: calc(100vh - 32px);
32
- margin: 0;
33
- background: #fff;
34
- color: #191e23;
35
- /*
36
- position: fixed;
37
- width: calc(100% - 160px);
38
- */
39
- width: 100%;
40
  }
41
 
42
  .folded .cn-welcome-wrap {
43
- width: calc(100% - 36px);
44
  }
45
 
46
  .cn-welcome-wrap h1,
@@ -48,7 +48,7 @@
48
  .cn-welcome-wrap h3,
49
  .cn-welcome-wrap h4,
50
  .cn-welcome-wrap h5 {
51
- margin-top: 0;
52
  }
53
 
54
  .cn-content h1,
@@ -56,8 +56,8 @@
56
  .cn-content h3,
57
  .cn-content h4,
58
  .cn-content h5 {
59
- color: #191e23;
60
- padding: 0;
61
  }
62
 
63
  .cn-content h1,
@@ -65,8 +65,8 @@
65
  .cn-content h3,
66
  .cn-content h4,
67
  .cn-content h5 {
68
- color: #191e23;
69
- padding: 0;
70
  }
71
 
72
  .cn-sidebar h1,
@@ -74,643 +74,643 @@
74
  .cn-sidebar h3,
75
  .cn-sidebar h4,
76
  .cn-sidebar h5 {
77
- color: #fff;
78
  }
79
 
80
  .cn-content h1 + h2,
81
  .cn-content h1 + h3 {
82
- margin-top: 0.5em;
83
  }
84
 
85
  .cn-welcome-wrap h1 {
86
- font-size: 4em;
87
- line-height: 1.1;
88
  }
89
  .cn-welcome-wrap h2 {
90
- font-size: 2em;
91
- line-height: 1.1;
92
  }
93
  .cn-welcome-wrap h4 {
94
- font-size: 1.5em;
95
  }
96
  .cn-welcome-wrap h5 {
97
- font-size: 1.35em;
98
  }
99
 
100
  .cn-welcome-wrap a,
101
  .cn-welcome-wrap .cn-btn {
102
- transition: all 0.2s;
103
  }
104
 
105
  .cn-welcome-step-1 h3:first-child {
106
- margin-bottom: 0;
107
  }
108
 
109
  .cn-welcome-step-1 .cn-content .cn-lead {
110
- margin-top: 1.5em;
111
- max-width: 100%;
112
  }
113
 
114
  .cn-welcome-step-1 .cn-content .cn-lead p:first-child {
115
- margin-bottom: 1em;
116
  }
117
 
118
  .cn-welcome-step-1 .cn-content h1 {
119
- margin-bottom: 5px;
120
  }
121
 
122
  .cn-welcome-step-1 .cn-content h2 {
123
- margin-bottom: 1em;
124
  }
125
 
126
  .cn-welcome-step-1 .cn-content h4 {
127
- margin-top: 1.5em;
128
  }
129
 
130
  .cn-welcome-step-1 .cn-sidebar .cn-lead {
131
- margin-bottom: 1em;
132
  }
133
 
134
  .cn-welcome-step-1 .cn-sidebar .cn-inner,
135
  .cn-welcome-step-1 .cn-content .cn-inner {
136
- padding: 6em;
137
  }
138
 
139
  .cn-welcome-wrap.cn-welcome-step-1 .cn-sidebar {
140
- width: 50%;
141
  }
142
 
143
  .cn-welcome-wrap.cn-welcome-step-1 .cn-content.cn-sidebar-visible {
144
- width: 50%;
145
  }
146
 
147
  .cn-welcome-wrap .cn-content a.cn-link {
148
- color: #20C19E;
149
- text-decoration: none;
150
- font-style: normal;
151
- outline: none;
152
- box-shadow: none;
153
  }
154
 
155
  .cn-welcome-wrap .cn-sidebar {
156
- width: 25%;
157
- min-height: 100%;
158
- background: #35353F;
159
- /*
160
- background: rgba(7,137,145,0.7);
161
- background: linear-gradient(145deg, rgba(7,137,145,.7), rgba(32,193,158,.7));
162
- */
163
- /*
164
- display: flex;
165
- justify-content: center;
166
- align-items: center;
167
- */
168
- position: relative;
169
- text-align: left;
170
- overflow-y: scroll;
171
- -ms-overflow-style: none; /* IE and Edge */
172
- scrollbar-width: none; /* Firefox */
173
  }
174
 
175
  .cn-welcome-wrap .cn-content {
176
- width: 100%;
177
- min-height: 100%;
178
- background-size: cover;
179
- position: relative;
180
- /*
181
- display: flex;
182
- justify-content: space-between;
183
- align-items: center;
184
- */
185
- text-align: center;
186
- overflow-y: scroll;
187
- -ms-overflow-style: none; /* IE and Edge */
188
- scrollbar-width: none; /* Firefox */
189
  }
190
 
191
  .cn-welcome-wrap .cn-content::-webkit-scrollbar,
192
  .cn-welcome-wrap .cn-sidebar::-webkit-scrollbar {
193
- width: 0;
194
- height: 0;
195
  }
196
 
197
  .cn-welcome-wrap .cn-hero-image {
198
- display: flex;
199
- justify-content: center;
200
- align-items: flex-start;
201
- max-width: 70%;
202
- margin: 2em auto;
203
  }
204
 
205
  .cn-welcome-wrap .cn-hero-image img {
206
- align-self: center;
207
- max-width: 600px;
208
  }
209
 
210
  .cn-welcome-wrap .cn-hero-image .cn-flex-item img {
211
- max-width: 400px;
212
  }
213
 
214
  .cn-welcome-wrap .cn-flex-item {
215
- flex-grow: 1;
216
- flex-basis: 0;
217
  }
218
 
219
  .cn-welcome-wrap .cn-flex-item:first-child,
220
  .cn-welcome-wrap .cn-flex-item:last-child {
221
- flex-grow: 4;
222
  }
223
 
224
  .cn-welcome-wrap .cn-flex-item:nth-child(2) img {
225
- margin-top: 130px;
226
  }
227
 
228
  .cn-welcome-wrap .cn-flex-item ul {
229
- padding: 0;
230
- margin: 0;
231
- list-style: none;
232
- font-size: 15px;
233
  }
234
 
235
  .cn-welcome-wrap .cn-flex-item ul li {
236
- padding: 0;
237
- font-size: 15px;
238
- line-height: 1.1;
239
- margin: 1em 0;
240
  }
241
 
242
  .cn-welcome-wrap .cn-flex-item ul li span {
243
- display: inline-block;
244
- position: relative;
245
- padding-left: 20px;
246
  }
247
 
248
  .cn-welcome-wrap .cn-flex-item ul li span::before {
249
- font-family: 'dashicons';
250
- line-height: 1;
251
- font-weight: 400;
252
- font-style: normal;
253
- text-transform: none;
254
- text-rendering: auto;
255
- font-size: 16px;
256
- text-align: center;
257
- display: block;
258
- content: "\f15e";
259
- position: absolute;
260
- top: 2px;
261
- left: 0;
262
- line-height: 1;
263
- width: 16px;
264
- height: 16px;
265
- margin: 0;
266
- color: #20C19E;
267
- background: none;
268
  }
269
 
270
  .cn-welcome-wrap .cn-flex-item ul li b {
271
- font-weight: bold;
272
- font-size: 16px;
273
  }
274
 
275
  .cn-welcome-wrap .cn-logo-container {
276
- margin-bottom: 1em;
277
  }
278
 
279
  .cn-welcome-wrap .cn-logo-container > * {
280
- vertical-align: middle;
281
- margin-bottom: 0.5em;
282
  }
283
 
284
  .cn-welcome-wrap .cn-logo-container img {
285
- display: inline-block;
286
  }
287
 
288
  .cn-welcome-wrap .cn-badge {
289
- background: #ccc;
290
- color: #191e23;
291
- border-radius: 3px;
292
- text-transform: uppercase;
293
- line-height: 1;
294
- display: inline-block;
295
- padding: 5px;
296
- margin-left: 5px;
297
- margin-right: 5px;
298
  }
299
 
300
  .cn-welcome-wrap.cn-welcome-step-2 .cn-content {
301
- background-size: cover;
302
  }
303
 
304
  .cn-welcome-wrap.cn-welcome-step-3 .cn-content {
305
- background-size: cover;
306
  }
307
 
308
  .cn-welcome-wrap.cn-welcome-step-4 .cn-content {
309
- background-size: cover;
310
  }
311
 
312
  .cn-welcome-wrap .cn-content.cn-sidebar-visible {
313
- width: 75%;
314
  }
315
 
316
  .cn-welcome-wrap .cn-content-header {
317
- text-align: center;
318
- margin-bottom: 2em;
319
- line-height: 1em;
320
- display: flex;
321
- flex-direction: row;
322
  }
323
 
324
  .cn-welcome-wrap .cn-content-header:before,
325
  .cn-welcome-wrap .cn-content-header:after {
326
- content:'';
327
- flex: 1 1;
328
- margin: auto;
329
- border-bottom: 1px solid rgba(255,255,255,.7);
330
  }
331
 
332
  .cn-welcome-wrap .cn-content-header:before {
333
- margin-right: 1em;
334
  }
335
 
336
  .cn-welcome-wrap .cn-content-header:after {
337
- margin-left: 1em;
338
  }
339
 
340
  .cn-welcome-wrap .cn-inner {
341
- position: relative;
342
- z-index: 1;
343
- padding: 4em;
344
- min-height: 100%;
345
- width: 100%;
346
- display: flex;
347
- justify-content: space-between;
348
  }
349
 
350
  .cn-sidebar .cn-inner {
351
- flex-direction: column;
352
- justify-content: space-between;
353
- padding-bottom: 2em;
354
  }
355
 
356
  .cn-content .cn-inner {
357
- flex-direction: row;
358
- justify-content: space-around;
359
- align-items: center;
360
  }
361
 
362
  .cn-content .cn-lead {
363
- margin: 0 auto;
364
- max-width: 75%;
365
  }
366
 
367
  .cn-content .cn-lead p {
368
- font-size: 1.3em;
369
- margin: 0.5em 0;
370
  }
371
 
372
  .cn-content .cn-lead p:last-child {
373
- margin-bottom: 0;
374
  }
375
 
376
  .cn-content .cn-content-full {
377
- width: 100%;
378
  }
379
 
380
  .cn-sidebar {
381
- color: #BBBBC0;
382
  }
383
 
384
  .cn-sidebar a,
385
  .cn-sidebar em {
386
- color: #20C19E;
387
- text-decoration: none;
388
- font-style: normal;
389
- outline: none;
390
- box-shadow: none;
391
  }
392
 
393
  .cn-sidebar a:hover {
394
- text-decoration: underline;
395
  }
396
 
397
  .cn-sidebar .cn-lead {
398
- margin-bottom: 2em;
399
  }
400
 
401
  .cn-sidebar .cn-lead b {
402
- color: #fff;
403
- font-weight: bold;
404
- font-size: 15px;
405
  }
406
 
407
  .cn-sidebar .cn-lead p:last-child {
408
- margin-bottom: 0;
409
  }
410
 
411
  .cn-sidebar .cn-buttons,
412
  .cn-content .cn-buttons {
413
- margin-top: 3em;
414
  }
415
 
416
  .cn-welcome-step-3 .cn-content .cn-buttons {
417
- margin-top: 0;
418
  }
419
 
420
  .cn-header {
421
- margin-bottom: 3em;
422
  }
423
 
424
  .cn-footer {
425
- margin-top: 3em;
426
- text-align: left;
427
  }
428
 
429
  .cn-footer .cn-btn.cn-skip-button {
430
- color: #86868F;
431
- font-weight: normal;
432
- font-size: inherit;
433
- text-decoration: none;
434
  }
435
 
436
  .cn-footer .cn-btn.cn-skip-button:hover {
437
- color: #fff;
438
- text-decoration: none;
439
  }
440
 
441
  .cn-footer a:hover {
442
- color: #20C19E;
443
  }
444
 
445
  .cn-welcome-wrap .cn-pricing-select {
446
- margin-top: 1.5em;
447
  }
448
 
449
  .cn-welcome-wrap .cn-pricing-table {
450
- display: flex;
451
- justify-content: center;
452
- align-items: center;
453
- margin-top: 3em;
454
  }
455
 
456
  .cn-welcome-wrap .cn-pricing-table .cn-pricing-item {
457
- margin: 0 1.5em 3em;
458
- min-width: 300px;
459
  }
460
 
461
  .cn-welcome-wrap .cn-pricing-table .cn-pricing-item h4 {
462
- margin-bottom: 0.5em;
463
- position: relative;
464
- font-size: 1.3em;
465
  }
466
 
467
  .cn-welcome-wrap .cn-pricing-table .cn-pricing-item h4:after {
468
- content: '';
469
- display: block;
470
- width: 60px;
471
- border-bottom: 1px solid #86868F;
472
- margin: 1em auto 0;
473
  }
474
 
475
  .cn-welcome-wrap .cn-pricing-table .cn-pricing-item button {
476
- pointer-events: none;
477
  }
478
 
479
  .cn-welcome-wrap .cn-pricing-table .cn-pricing-item:hover .cn-pricing-info {
480
- border-color: rgba(0, 0, 0, 0.1);
481
  }
482
 
483
  .cn-welcome-wrap .cn-pricing-table .cn-pricing-item .cn-pricing-info {
484
- box-shadow: 0px 0px 13px 0px rgba(236, 236, 241, 1);
485
- border: 1px solid transparent;
486
- border-radius: 5px;
487
- position: relative;
488
- overflow: hidden;
489
  }
490
 
491
  .cn-welcome-wrap .cn-pricing-table .cn-pricing-item input {
492
- display: none;
493
  }
494
 
495
  .cn-welcome-wrap .cn-pricing-table .cn-pricing-item input:checked + .cn-pricing-info {
496
- border-color: #20C19E;
497
  }
498
 
499
  .cn-welcome-wrap .cn-pricing-table .cn-pricing-item .cn-pricing-info > div {
500
- padding: 2em 1.5em;
501
  }
502
 
503
  .cn-welcome-wrap .cn-pricing-table input#cn_pricing_plan_free + .cn-pricing-info .cn-plan-price {
504
- color: #515151;
505
- font-size: 1.25em;
506
- line-height: 1.5em;
507
  }
508
 
509
  .cn-welcome-wrap .cn-pricing-table input#cn_pricing_plan_yearly + .cn-pricing-info h4 {
510
- color: #FF9E0D;
511
  }
512
 
513
  .cn-welcome-wrap .cn-pricing-table input#cn_pricing_plan_yearly + .cn-pricing-info .cn-pricing-body p:last-child b,
514
  .cn-welcome-wrap .cn-pricing-table input#cn_pricing_plan_yearly + .cn-pricing-info .cn-pricing-body p:last-child .cn-icon,
515
  .cn-welcome-wrap .cn-pricing-table input#cn_pricing_plan_yearly + .cn-pricing-info .cn-pricing-body p:last-child .cn-icon:after {
516
- color: #FF9E0D;
517
- border-color: #FF9E0D;
518
  }
519
 
520
  .cn-welcome-wrap .cn-pricing-table input#cn_pricing_plan_yearly + .cn-pricing-info .cn-plan-promo {
521
- color: #fff;
522
- background: #20C19E;
523
- position: absolute;
524
- left: 50%;
525
- top: 0;
526
- font-weight: bold;
527
- font-size: 1.1em;
528
- line-height: 1.1em;
529
- text-transform: uppercase;
530
- display: inline-block;
531
- letter-spacing: 1px;
532
- border-radius: 0 0 5px 5px;
533
- padding: 0.25em 2em;
534
- transform: translateX(-50%);
535
  }
536
 
537
  .cn-welcome-wrap .cn-pricing-table .cn-pricing-item .cn-pricing-info .cn-pricing-head {
538
- border-bottom: 1px solid rgba(0, 0, 0, 0.05);
539
- padding: 3em 1.5em 2.5em;
540
  }
541
 
542
  .cn-welcome-wrap .cn-pricing-table .cn-pricing-info div.cn-pricing-body {
543
- padding-bottom: 0;
544
- font-size: 14px;
545
- text-align: left;
546
  }
547
 
548
  .cn-welcome-wrap .cn-pricing-table .cn-pricing-info div.cn-pricing-body p {
549
- padding-left: 35px;
550
- line-height: 1.5;
551
- margin: 1em 0;
552
  }
553
 
554
  .cn-welcome-wrap .cn-plan-pricing {
555
- display: block;
556
- font-size: 1.5em;
557
- color: #515151;
558
  }
559
 
560
  .cn-welcome-wrap .cn-pricing-table .cn-plan-price {
561
- font-size: 1.5em;
562
- font-weight: bold;
563
- line-height: 1.1;
564
- color: #20C19E;
565
- text-transform: uppercase;
566
  }
567
 
568
  .cn-welcome-wrap .cn-pricing-table .cn-plan-price sup {
569
- font-weight: normal;
570
  }
571
 
572
  .cn-welcome-wrap .cn-billing-wrapper {
573
- font-weight: normal;
574
  }
575
 
576
  .cn-welcome-wrap .cn-billing-wrapper input {
577
- display: none;
578
  }
579
 
580
  .cn-welcome-wrap .cn-billing-wrapper label {
581
- position: relative;
582
- display: inline-block;
583
- padding: .5em 1em;
584
- box-sizing: content-box;
585
  }
586
 
587
  .cn-welcome-wrap .cn-billing-wrapper input:checked + span {
588
- color: #fff;
589
  }
590
 
591
  .cn-welcome-wrap .cn-billing-wrapper input:checked + span .cn-plan-overlay {
592
- background-color: rgba(53,53,63,1);
593
  }
594
 
595
  .cn-welcome-wrap .cn-billing-wrapper .cn-plan-overlay {
596
- border: none;
597
- width: 100%;
598
- height: 100%;
599
- border-radius: 3px;
600
- position: absolute;
601
- left: 0;
602
- top: 0;
603
- transition: border-color 0.2s;
604
- z-index: -1;
605
- background-color: rgba(53,53,63,0.1);
606
  }
607
 
608
  .cn-welcome-wrap .cn-billing-wrapper :first-child > span .cn-plan-overlay {
609
- border-top-right-radius: 0;
610
- border-bottom-right-radius: 0;
611
  }
612
 
613
  .cn-welcome-wrap .cn-billing-wrapper :last-child > span .cn-plan-overlay {
614
- border-top-left-radius: 0;
615
- border-bottom-left-radius: 0;
616
  }
617
 
618
  .cn-btn {
619
- border-radius: 3em;
620
- padding: 1em 3em;
621
- box-shadow: none;
622
- border: 2px solid #20C19E;
623
- outline: none;
624
- background: #20C19E;
625
- font-size: 15px;
626
- font-weight: bold;
627
- color: #fff;
628
- cursor: pointer;
629
- display: inline-block;
630
- text-decoration: none;
631
  }
632
 
633
  .cn-btn:hover,
634
  .cn-btn:focus {
635
- box-shadow: none;
636
- outline: none;
637
- border: 2px solid #20C19E;
638
- background: #20C19E;
639
- color: #fff;
640
- text-decoration: none !important;
641
  }
642
 
643
  .cn-btn.cn-btn-outline {
644
- background: transparent;
645
- color: #20C19E;
646
- box-shadow: 0 0 15px 0 rgba(255,255,255,.4), inset 0 0 15px rgba(255,255,255,.4);
647
  }
648
 
649
  .cn-btn.cn-btn-outline:hover {
650
- text-shadow: 0 0 10px rgba(255,255,255,.4), 0 0 20px rgba(255,255,255,.4), 0 0 30px rgba(255,255,255,.4), 0 0 40px rgba(255,255,255,.4);
651
  }
652
 
653
  .cn-btn.cn-btn-outline .cn-spinner::after {
654
- border-color: #fff transparent #fff transparent;
655
  }
656
 
657
  .cn-btn.cn-btn-transparent,
658
  .cn-btn.cn-btn-transparent:hover,
659
  .cn-btn.cn-btn-transparent:focus {
660
- box-shadow: none;
661
- background: transparent;
662
- color: #BBBBC0;
663
- border-color: transparent;
664
  }
665
 
666
  .cn-btn.cn-btn-lg {
667
- border-radius: 4em;
668
- padding: 1.5em 4em;
669
- font-size: 15px;
670
  }
671
 
672
  .cn-btn.cn-btn-link {
673
- background: none;
674
- border-color: transparent;
675
- color: inherit;
676
- padding: 0;
677
  }
678
 
679
  .cn-top-bar {
680
- display: flex;
681
- justify-content: space-between;
682
- align-items: center;
683
  }
684
 
685
  .cn-stepper {
686
- padding: 1.5em;
687
- margin: 1.5em -1.5em;
688
- overflow-x: hidden;
689
- overflow-y: auto;
690
- display: flex;
691
- justify-content: space-between;
692
  }
693
 
694
  .cn-stepper li {
695
- position: relative;
696
- display: flex;
697
- flex: 1;
698
- align-items: center;
699
- transition: .2s;
700
- margin: 0;
701
  }
702
 
703
  .cn-stepper li:not(:last-child):after {
704
- position: relative;
705
- flex: 1;
706
- height: 1px;
707
- margin: .35em 0 0 0;
708
- content: '';
709
- background-color: #86868F;
710
  }
711
 
712
  .cn-stepper li .cn-step {
713
- cursor: default;
714
  }
715
 
716
  .cn-stepper li .cn-step .cn-circle {
@@ -718,7 +718,7 @@
718
  width: 2em;
719
  height: 2em;
720
  line-height: 2em;
721
- font-weight: bold;
722
  color: #fff;
723
  text-align: center;
724
  background: #86868F;
@@ -726,178 +726,178 @@
726
  }
727
 
728
  .cn-stepper li.cn-completed .cn-step .cn-circle {
729
- color: transparent;
730
- background: #20C19E;
731
  }
732
  .cn-stepper li.cn-completed .cn-step .cn-circle:before{
733
- font-family: dashicons;
734
- line-height: 1;
735
- font-weight: 400;
736
- font-style: normal;
737
- text-transform: none;
738
- text-rendering: auto;
739
- font-size: 14px;
740
- text-align: center;
741
- display: block;
742
- content: "\f15e";
743
- position: absolute;
744
- top: 0;
745
- left: -2px;
746
- line-height: 2em;
747
- width: 2em;
748
- pointer-events: none;
749
- transform: scale(1.25, 1.25);
750
- color: #fff;
751
  }
752
 
753
  .cn-stepper li.cn-active .cn-step .cn-circle {
754
- background: #20C19E;
755
  }
756
 
757
  .cn-features-list .cn-feature {
758
- display: flex;
759
- margin-bottom: 2em;
760
- padding: 2em;
761
- border: 1px solid rgba(255,255,255,0.1);
762
- border-radius: 3px;
763
- box-sizing: content-box;
764
- background-color: rgba(255,255,255,0.1);
765
  }
766
 
767
  .cn-features-list .cn-feature:last-child {
768
- margin-bottom: 0;
769
  }
770
 
771
  .cn-features-list .cn-feature img {
772
- width: 48px;
773
- height: 48px;
774
- margin-right: 2em;
775
  }
776
  .cn-features-list .cn-feature h5 {
777
- margin-bottom: 0.5em;
778
  }
779
 
780
  .cn-features-list .cn-feature-description p:last-child {
781
- margin-bottom: 0;
782
  }
783
 
784
  .cn-form-container {
785
- margin-left: -15px;
786
- margin-right: -15px;
787
- padding-left: 15px;
788
- padding-right: 15px;
789
- background: rgba(255,255,255,0.05);
790
- padding-bottom: 1px;
791
  }
792
 
793
  .cn-form-header {
794
- font-size: 15px;
795
- font-style: normal;
796
- font-weight: bold;
797
- color: #fff;
798
- width: 100%;
799
- text-align: left;
800
- margin: 0;
801
- padding: 15px 0;
802
- color: #fff;
803
  }
804
 
805
  .cn-small {
806
- font-size: 12px;
807
  }
808
 
809
  .cn-form.cn-form-disabled[data-action="payment"] {
810
- pointer-events: none;
811
- opacity: 0.5;
812
  }
813
 
814
  .cn-form.cn-form-disabled .cn-accordion-collapse {
815
- pointer-events: none;
816
  }
817
 
818
  .cn-welcome-wrap form {
819
- position: relative;
820
- margin: 0;
821
  }
822
 
823
  .cn-welcome-wrap form .cn-form-feedback {
824
- position: relative;
825
- margin-bottom: 1.5em;
826
- color: #fff;
827
- overflow-y: hidden;
828
- max-height: 500px; /* approximate max height */
829
- transition: all .3s cubic-bezier(0, 1, 0.5, 1);
830
- transition-delay: 0.3s;
831
- opacity: 1;
832
  }
833
 
834
  .cn-welcome-wrap form .cn-form-feedback p {
835
- padding: 15px;
836
- margin: 0;
837
  }
838
 
839
  .cn-welcome-wrap form .cn-form-feedback p.cn-error {
840
- border: 1px solid #da2439;
841
- border-radius: 3px;
842
- background: rgba( 218,36,57, 0.5);
843
  }
844
 
845
  .cn-welcome-wrap form .cn-form-feedback p.cn-warning {
846
- border: 1px solid #e78d26;
847
- border-radius: 3px;
848
- background: rgba( 231,141,38, 0.5);
849
  }
850
 
851
  .cn-welcome-wrap form .cn-form-feedback p.cn-message {
852
- border: 1px solid #008000;
853
- border-radius: 3px;
854
- background: rgba( 0,128,0, 0.5);
855
  }
856
 
857
  .cn-welcome-wrap form .cn-form-feedback.cn-hidden {
858
- max-height: 0;
859
- margin-bottom: 0;
860
- opacity: 0;
861
  }
862
 
863
  .cn-welcome-wrap form .cn-field:not(:last-child) {
864
- position: relative;
865
- margin: 0 0 0.5em;
866
  }
867
 
868
  .cn-welcome-wrap form .cn-field.cn-hidden {
869
- display: none;
870
  }
871
 
872
  .cn-welcome-wrap form .cn-field.cn-field-half {
873
- width: calc(50% - 0.5em);
874
- display: inline-block;
875
- margin: auto 0.25em;
876
  }
877
 
878
  .cn-welcome-wrap form .cn-field.cn-field-first {
879
- margin-left: 0;
880
  }
881
 
882
  .cn-welcome-wrap form .cn-field.cn-field-last {
883
- margin-right: 0;
884
  }
885
 
886
  .cn-welcome-wrap form label {
887
- color: #fff;
888
- margin: 0 0 0.5em;
889
- display: block;
890
  }
891
 
892
  .cn-welcome-wrap form .cn-field > label {
893
- color: #fff;
894
- margin: 0 0 0.5em;
895
- display: block;
896
- font-weight: 700;
897
  }
898
 
899
  .cn-welcome-wrap form .cn-field.cn-field-submit {
900
- margin: 1.5em 0 0 0;
901
  }
902
 
903
  .cn-welcome-wrap form input[type="text"],
@@ -905,552 +905,552 @@
905
  .cn-welcome-wrap form input[type="checkbox"],
906
  .cn-welcome-wrap form input[type="radio"],
907
  .cn-welcome-wrap form select {
908
- background: transparent;
909
- border: 1px solid #86868F;
910
- margin: 0;
911
- padding: 0 15px;
912
- color: #fff;
913
- transition: border-color 0.2s;
914
  }
915
 
916
  .cn-welcome-wrap form input[type="checkbox"],
917
  .cn-welcome-wrap form input[type="radio"] {
918
- transition: none;
919
  }
920
 
921
  .cn-welcome-wrap form input[type="checkbox"] b,
922
  .cn-welcome-wrap form input[type="radio"] b {
923
- font-weight: 700;
924
  }
925
 
926
  .cn-welcome-wrap form input[type="text"],
927
  .cn-welcome-wrap form input[type="password"],
928
  .cn-welcome-wrap form select {
929
- width: 100%;
930
- line-height: 3;
931
  }
932
 
933
  .cn-welcome-wrap form .cn-select-wrapper {
934
- position: relative;
935
- margin: 0;
936
  }
937
  .cn-welcome-wrap form .cn-select-wrapper:after {
938
- font-family: dashicons;
939
- line-height: 1;
940
- font-weight: 400;
941
- font-style: normal;
942
- text-transform: none;
943
- text-rendering: auto;
944
- font-size: 18px;
945
- text-align: center;
946
- display: block;
947
- content: "\f347";
948
- position: absolute;
949
- top: 50%;
950
- margin-top: -9px;
951
- right: 15px;
952
- line-height: 1;
953
- pointer-events: none;
954
- color: #fff;
955
  }
956
 
957
  .cn-welcome-wrap form .cn-checkbox-wrapper,
958
  .cn-welcome-wrap form .cn-radio-wrapper {
959
- position: relative;
960
  }
961
 
962
  .cn-welcome-wrap form .cn-checkbox-wrapper label,
963
  .cn-welcome-wrap form .cn-radio-wrapper label {
964
- color: #BBBBC0;
965
  }
966
 
967
  .cn-welcome-wrap form .cn-checkbox-wrapper.cn-horizontal-wrapper label,
968
  .cn-welcome-wrap form .cn-radio-wrapper.cn-horizontal-wrapper label {
969
- display: inline-block;
970
- margin-right: 0.5em;
971
  }
972
 
973
  .cn-welcome-wrap form .cn-checkbox-wrapper.cn-horizontal-wrapper label:last-child,
974
  .cn-welcome-wrap form .cn-radio-wrapper.cn-horizontal-wrapper label:last-child {
975
- margin-right: 0;
976
  }
977
 
978
  .cn-welcome-wrap form .cn-checkbox-wrapper input,
979
  .cn-welcome-wrap form .cn-radio-wrapper input {
980
- position: absolute;
981
- margin: 2px 0;
982
  }
983
 
984
  .cn-welcome-wrap form .cn-checkbox-wrapper input:focus,
985
  .cn-welcome-wrap form .cn-radio-wrapper input:focus {
986
- border-color: #86868F;
987
  }
988
 
989
  .cn-welcome-wrap form .cn-checkbox-wrapper input:checked,
990
  .cn-welcome-wrap form .cn-radio-wrapper input:checked {
991
- background: none;
992
- border-color: #20C19E;
993
  }
994
 
995
  .cn-welcome-wrap form .cn-checkbox-wrapper input:checked,
996
  .cn-welcome-wrap form .cn-radio-wrapper input:checked {
997
- background: none;
998
- border-color: #20C19E;
999
  }
1000
 
1001
  .cn-welcome-wrap form .cn-checkbox-wrapper input:checked::before {
1002
- font-family: dashicons;
1003
- line-height: 1;
1004
- font-weight: 400;
1005
- font-style: normal;
1006
- text-transform: none;
1007
- text-rendering: auto;
1008
- font-size: 14px;
1009
- text-align: center;
1010
- display: block;
1011
- content: "\f15e";
1012
- position: absolute;
1013
- top: 0;
1014
- left: 0;
1015
- line-height: 1;
1016
- width: 16px;
1017
- height: 16px;
1018
- margin: 0 auto 0 -1px;
1019
- color: #fff;
1020
- background: none;
1021
  }
1022
 
1023
  .cn-welcome-wrap form .cn-color-picker-wrapper input {
1024
- border: none;
1025
  }
1026
 
1027
  .cn-welcome-wrap form .cn-color-picker-wrapper .sp-original-input-container {
1028
- margin-left: 0;
1029
- position: absolute;
1030
- border: 1px solid rgba(255,255,255,1);
1031
- border-radius: 0;
1032
  }
1033
 
1034
  .cn-welcome-wrap form .cn-color-picker-wrapper .sp-colorize-container {
1035
- height: 16px;
1036
  }
1037
 
1038
  .cn-welcome-wrap form .cn-color-picker-wrapper input:checked::before {
1039
- content: '';
1040
  }
1041
 
1042
  .cn-welcome-wrap form .cn-radio-wrapper label input:checked::before {
1043
- text-align: center;
1044
- display: block;
1045
- position: absolute;
1046
- top: 2px;
1047
- left: 2px;
1048
- line-height: 1;
1049
- width: 10px;
1050
- height: 10px;
1051
- margin: 0 auto;
1052
- color: #fff;
1053
- background: #20C19E;
1054
  }
1055
 
1056
  .cn-welcome-wrap form .cn-checkbox-wrapper label > span,
1057
  .cn-welcome-wrap form .cn-radio-wrapper label > span {
1058
- margin-left: 2em;
1059
- display: block;
1060
  }
1061
 
1062
  .cn-welcome-wrap form .cn-field-checkbox > label.cn-asterix::after {
1063
- content: '*';
1064
- right: 0;
1065
- top: 0;
1066
- line-height: 8px;
1067
- padding-left: 3px;
1068
- display: inline-block;
1069
  }
1070
 
1071
  .cn-welcome-wrap form .cn-checkbox-wrapper label > span.cn-asterix::after,
1072
  .cn-welcome-wrap form .cn-radio-wrapper label > span.cn-asterix::after {
1073
- content: '*';
1074
- right: 0;
1075
- top: 0;
1076
- line-height: 8px;
1077
- padding-left: 3px;
1078
- display: inline-block;
1079
  }
1080
 
1081
  .cn-welcome-wrap form .cn-checkbox-image-wrapper label,
1082
  .cn-welcome-wrap form .cn-radio-image-wrapper label {
1083
- display: inline-block;
1084
- margin: 0 0.25em;
1085
- position: relative;
1086
  }
1087
 
1088
  .cn-welcome-wrap form .cn-checkbox-image-wrapper label.cn-asterix,
1089
  .cn-welcome-wrap form .cn-radio-image-wrapper label.cn-asterix {
1090
- padding-right: 8px;
1091
  }
1092
  .cn-welcome-wrap form .cn-checkbox-image-wrapper label.cn-asterix::after,
1093
  .cn-welcome-wrap form .cn-radio-image-wrapper label.cn-asterix::after {
1094
- content: '*';
1095
- position: absolute;
1096
- right: 0;
1097
- top: 0;
1098
- line-height: 8px;
1099
  }
1100
 
1101
  .cn-sidebar form .cn-checkbox-image-wrapper span,
1102
  .cn-sidebar form .cn-radio-image-wrapper span {
1103
- display: block;
1104
- text-align: center;
1105
- font-weight: 600;
1106
  }
1107
 
1108
  .cn-welcome-wrap form .cn-checkbox-image-wrapper label:first-child,
1109
  .cn-welcome-wrap form .cn-radio-image-wrapper label:first-child {
1110
- margin-left: 0;
1111
  }
1112
 
1113
  .cn-welcome-wrap form .cn-checkbox-image-wrapper label:last-child,
1114
  .cn-welcome-wrap form .cn-radio-image-wrapper label:last-child {
1115
- margin-right: 0;
1116
  }
1117
 
1118
  .cn-welcome-wrap form .cn-checkbox-image-wrapper input,
1119
  .cn-welcome-wrap form .cn-radio-image-wrapper input {
1120
- display: none;
1121
  }
1122
 
1123
  .cn-welcome-wrap form .cn-checkbox-image-wrapper input:checked + img,
1124
  .cn-welcome-wrap form .cn-radio-image-wrapper input:checked + img {
1125
- border-color: #20C19E;
1126
  }
1127
 
1128
  .cn-welcome-wrap form .cn-checkbox-image-wrapper img,
1129
  .cn-welcome-wrap form .cn-radio-image-wrapper img {
1130
- display: inline-block;
1131
- padding: 0.5em;
1132
- border: 2px solid #86868F;
1133
- border-radius: 3px;
1134
- box-sizing: content-box;
1135
  }
1136
 
1137
  .cn-checkbox-image-wrapper .gdpr {
1138
- background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAC/ElEQVRoge2ZzZGjMBCFmcMet4rjHjlsANQmsGRgZ7BkMGRgZ7DOYMhgnME4A08GdgZ2AujbA41HiD8JEOawXUWVXUjd73WLVqsVBB4F+OlTv3cBciB7Ng4nAV6ADHjnSz6A7bOxPQQIh94Dd43AaSFodgKkFmNOGoHEYvwySw1IgJtFFHJgC6RD4GTJnedF2jQSAUfNqzfgMFFnAnxqOi9CvNc5UwzG1CWaQede03f1Bl6MhZqxz5l0Jot97BKBRH5nc3hLCETyO52qr1LqL4wjxWm5Akd/UMaJfOzdjpUs8xvYyXp8k//RcjA7Mf01MMVdE3IjyxyfvZyMLIVEIuoarGcZJhqOgY14bJITqO8VSd/AqobZy6T2UPUbi5RSH0op9EeW5igiguVAWZ50YxKvhRoZJ4MC/maCr56iKN5GEgi139EYHVailDpqYHMgKYpir5S6a5FIvQGYIuL9B3jjXapFYnUpOgiCIAC2mpcT872+lJ4Ab1hkqfQRuHslIB9wNHa+BYHrHAToOprKJuacJSgPLH+M1HmRtLkDdkqp95aU+tqb09tthcC5No/moeLcybKpMO5KmZbPydLON3HwzagSflQD9BIid/BI4gD2OpaA2DIbBan+8qC9sD5cOxD4FADZWAJir72kkAjE8sxN4FEGF0WRT4xAVtl1/X6sCQCZlpH6wDtHYHbpIFDVUskA+HUSUEqd9eKrB/xqCVQkNmb+X4SAy8fhmEYnEbDGJanKavDCBPoPWJSnsIvk2BvlAbr3RAaEssZPYx6blN2BK2obGFGX/bBf/EsLrm7SlL3J5k73ZMGmVS9MT5Qt8T0rulGhLHViyso3sZ20uvbif1kiKl5tuFSqI/WH+Gq78HUR4dytc7CRS86fLwo078YQQ5HFXKtLEOq3NMP53lVaNpPIcs4Fy0YB9S70LNdXpgGqjW5g3AvNlvgd+DUwb6vZmHT72aY8rtY+WgN4YI5+fh3cFPUNynqz8inUt//V7OpWAnwHNuZvH/IPPeDD9c6V9FUAAAAASUVORK5CYII=);
1139
- background-repeat: no-repeat;
1140
  background-position: center center;
1141
  }
1142
 
1143
  .cn-checkbox-image-wrapper .ccpa {
1144
- background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACcAAAAwCAYAAACScGMWAAACPElEQVRYheXYvXHbMBTAcY7AEbSA79Smskp30QiqkyLaQPQE8Qb2BtEG4QZil3Ry5ZZaAO/vAqANIwSJD1LmXXD3ToVE8sf3hEcQRVEUBXADfE+Mu2LOAVSkj/q/xj0sGVcvEgeUGTAvDlgBP4CD+Vyl4HaZuNa9WRH5JSK4oZT6CZQxuN+ZOBzYqQ9mxSkYmAuzcUqpyoE0InIUkWcng1UoLresWFlrOwCwczLa2EAispczWzvcxs5YzzXWDm4bistpwk1RfCypr2yppc3BVUvDXYAtsO7OsSRcbY5bAbfArYicrYu36Ob7Fj297wx8Ncf7JwewScGJSD3S00LjOJa9p0/E1SHlDQWm4rqmHI+LAKbgGsx/y23IMbiQVUos7g2G04yjcOYEObga2InIxQNrc3FjK2MvDtP7DOQYAIvGlcBzYub+WRKNwOJw5oRDvW8Ih4icImDxOHNiX3nHcF0GDwGwZJyvvCG4aZuwB9i31lsMbu/DAXsD9IZS6kEpVQ0FoQvPHlxfaU/jR15peGbuGf3mlhqHKYF95c0dj1MCY5ZV1wUy/uT4dOB2BtykwDmyNw0QOM6EyweS9547L/AKOID7VNwcLcUdf1Jxa3T27MjaDOoZL0m4AXRJ3uZ3Pg69p9fy/pxssVYW6GdxbrvJwjXoUnZh40oTFXrT53q4EXiNtYltkCkTaDoc71v734B9z/ex7WdSXHfxzcBvYsbfKXHlECwAd0H/JZ7MjX6ZDBcy0DPYBmyHbugVe8KbbhsHbZ0AAAAASUVORK5CYII=);
1145
- background-repeat: no-repeat;
1146
  background-position: center center;
1147
  }
1148
 
1149
  .cn-welcome-wrap form .cn-plan-wrapper {
1150
- margin-bottom: 1em;
1151
  }
1152
 
1153
  .cn-welcome-wrap form .cn-plan-wrapper label > span {
1154
- margin-left: 2em;
1155
  }
1156
 
1157
  .cn-welcome-wrap form .cn-plan-wrapper label {
1158
- position: relative;
1159
- display: block;
1160
- padding: 1.25em 1em;
1161
- box-sizing: content-box;
1162
  }
1163
 
1164
  .cn-welcome-wrap form .cn-plan-overlay {
1165
- border: 1px solid #86868F;
1166
- width: 100%;
1167
- height: 100%;
1168
- border-radius: 3px;
1169
- position: absolute;
1170
- left: 0;
1171
- top: 0;
1172
- transition: border-color 0.2s;
1173
- z-index: 0;
1174
- background-color: rgba(32,193,158,0);
1175
  }
1176
 
1177
  /*
1178
  .cn-welcome-wrap form .cn-plan-wrapper label input {
1179
- top: 50%;
1180
- margin: -8px 0 0;
1181
- width: 20px;
1182
- height: 20px;
1183
  }
1184
 
1185
  .cn-welcome-wrap form .cn-plan-wrapper label input:checked::before {
1186
- width: 20px;
1187
- height: 20px;
1188
- line-height: 20px;
1189
  }
1190
  */
1191
 
1192
  .cn-welcome-wrap form .cn-plan-wrapper input:checked + span .cn-plan-overlay {
1193
- border-color: #20C19E;
1194
- background-color: rgba(32,193,158,.1);
1195
  }
1196
 
1197
  .cn-welcome-wrap form .cn-plan-wrapper span .cn-plan-description {
1198
- font-weight: normal;
1199
  }
1200
 
1201
  .cn-welcome-wrap form .cn-plan-wrapper span .cn-plan-description b {
1202
- font-weight: bold;
1203
  }
1204
 
1205
  .cn-welcome-wrap form .cn-plan-wrapper input:checked + span {
1206
- color: #fff;
1207
  }
1208
 
1209
  .cn-welcome-wrap form .cn-plan-name {
1210
- display: block;
1211
- font-size: 1.1em;
1212
- font-weight: bold;
1213
- color: #fff;
1214
  }
1215
 
1216
  .cn-welcome-wrap form .cn-plan-pricing {
1217
- display: inline-block;
1218
- font-size: 1.1em;
1219
- float: right;
1220
  }
1221
 
1222
  .cn-welcome-wrap form .cn-price-off {
1223
- font-weight: bold;
1224
- color: #20C19E;
1225
  }
1226
 
1227
  .cn-welcome-wrap form .cn-plan-price {
1228
- font-weight: bold;
1229
  }
1230
 
1231
  .cn-welcome-wrap form input::placeholder,
1232
  .cn-welcome-wrap form select::placeholder {
1233
- color: #86868F;
1234
  }
1235
 
1236
  .cn-welcome-wrap form input:focus,
1237
  .cn-welcome-wrap form select:focus {
1238
- border-color: #20C19E;
1239
- box-shadow: none;
1240
  }
1241
 
1242
  .cn-welcome-wrap form select:focus {
1243
- color: #fff;
1244
  }
1245
 
1246
  .cn-welcome-wrap form select:hover {
1247
- color: #fff;
1248
  }
1249
 
1250
  .cn-welcome-wrap .cn-nav {
1251
- margin-top: 3em;
1252
  }
1253
 
1254
  .cn-welcome-wrap form .cn-nav {
1255
- margin-top: 2.5em;
1256
  }
1257
 
1258
  .cn-welcome-wrap .cn-nav .cn-btn {
1259
- margin: 0 0.25em;
1260
  }
1261
 
1262
  .cn-welcome-wrap .cn-nav .cn-btn:first-child {
1263
- margin-left: 0;
1264
  }
1265
 
1266
  .cn-welcome-wrap .cn-nav .cn-btn:last-child {
1267
- margin-right: 0;
1268
  }
1269
 
1270
  .cn-welcome-wrap #cn_preview_frame {
1271
- width: 100%;
1272
- height: 200px;
1273
- border: 1px solid #86868F;
1274
- margin-top: 2.5em;
1275
- box-shadow: 0 0 10px 0 rgba(0,0,0,.3);
1276
- position: relative;
1277
- overflow: hidden;
1278
  }
1279
 
1280
  .cn-welcome-wrap #cn_preview_frame img {
1281
- width: 100%;
1282
- height: auto;
1283
- display: block;
1284
- filter: blur(3px) grayscale(100%);
1285
  }
1286
 
1287
  .cn-welcome-wrap #cn_preview_frame_wrapper {
1288
- width: 400%;
1289
- height: 400%;
1290
- transform: scale(0.25) translate(-150%,-150%);
1291
- pointer-events: none;
1292
  }
1293
 
1294
  .cn-welcome-wrap #cn_preview_frame_wrapper::after {
1295
- content: '';
1296
- display: block;
1297
- width: 100%;
1298
- height: 100%;
1299
- background-color: rgba(0, 0, 0, 0);
1300
- position: absolute;
1301
- top: 0;
1302
- left: 0;
1303
  }
1304
 
1305
  .cn-welcome-wrap #cn_preview_frame_wrapper iframe {
1306
- width: 100%;
1307
- height: 100%;
1308
- filter: grayscale(100%);
1309
  }
1310
 
1311
  .cn-welcome-wrap #cn_preview_about {
1312
- margin-bottom: 1.5em;
1313
  }
1314
 
1315
  .cn-welcome-wrap #cn_preview_about p {
1316
- margin: 0;
1317
  }
1318
 
1319
  .cn-welcome-wrap #cn_preview_about p b {
1320
- color: #fff;
1321
  }
1322
 
1323
  .cn-comparison {
1324
- width: 100%;
1325
  }
1326
 
1327
  .cn-comparison tr:not(:last-child) {
1328
- box-shadow: 0px 1px 1px rgba(255,255,255,.5);
1329
  }
1330
-
1331
  .cn-comparison th,
1332
  .cn-comparison td {
1333
- padding: 1em;
1334
  }
1335
 
1336
  .cn-comparison th {
1337
- font-weight: bold;
1338
- text-transform: uppercase;
1339
- letter-spacing: 0.05em;
1340
  }
1341
 
1342
  .cn-spinner {
1343
- display: inline-block;
1344
- width: 14px;
1345
- height: 14px;
1346
- max-width: 0;
1347
- opacity: 0;
1348
- transition: opacity 0.2s, max-width 0.3s;
1349
  }
1350
  .cn-spinner.spin {
1351
- max-width: 14px;
1352
- opacity: 1;
1353
- margin-right: 10px;
1354
  }
1355
  .cn-spinner:after {
1356
- content: '';
1357
- display: block;
1358
- width: 12px;
1359
- height: 12px;
1360
- border-radius: 50%;
1361
- border: 2px solid #fff;
1362
- border-color: #fff transparent #fff transparent;
1363
- animation: cn-spin 0.8s linear infinite;
1364
  }
1365
 
1366
  @keyframes cn-spin {
1367
- 0% {
1368
- transform: rotate(0deg);
1369
- }
1370
- 100% {
1371
- transform: rotate(360deg);
1372
- }
1373
  }
1374
 
1375
  @keyframes cn-fadeIn {
1376
- from {
1377
- opacity: 0;
1378
- }
1379
 
1380
- to {
1381
- opacity: 1;
1382
- }
1383
  }
1384
 
1385
  @keyframes cn-fadeOut {
1386
- from {
1387
- opacity: 1;
1388
- }
1389
 
1390
- to {
1391
- opacity: 0;
1392
- }
1393
  }
1394
 
1395
  @keyframes cn-slideIn {
1396
- from {
1397
- transform: translate3d(0, -100%, 0);
1398
- visibility: visible;
1399
- }
1400
 
1401
- to {
1402
- transform: translate3d(0, 0, 0);
1403
- }
1404
  }
1405
 
1406
  @keyframes slideOut {
1407
- from {
1408
- transform: translate3d(0, 0, 0);
1409
- }
1410
 
1411
- to {
1412
- visibility: hidden;
1413
- transform: translate3d(0, -100%, 0);
1414
- }
1415
  }
1416
 
1417
  .cn-sidebar.cn-theme-light {
1418
- background: linear-gradient(-45deg, rgba(4,134,138,1), rgba(32,193,158,1));
1419
- color: #fff;
1420
  }
1421
 
1422
- .cn-sidebar.cn-theme-light a,
1423
  .cn-sidebar.cn-theme-light em {
1424
- color: #fff;
1425
- text-decoration: underline;
1426
  }
1427
 
1428
- .cn-sidebar.cn-theme-light a:hover,
1429
  .cn-sidebar.cn-theme-light em:hover {
1430
- text-decoration: none;
1431
  }
1432
 
1433
  .cn-sidebar.cn-theme-light .cn-btn:not(.cn-skip-button) {
1434
- border-color: #fff;
1435
- background-color: #fff;
1436
- color: #191e23;
1437
  }
1438
 
1439
  .cn-sidebar.cn-theme-light .cn-btn:not(.cn-skip-button) .cn-spinner::after {
1440
- border-color: #191e23 transparent #191e23 transparent;
1441
  }
1442
 
1443
  .cn-sidebar.cn-theme-light .cn-btn.cn-skip-button {
1444
- color: rgba(255,255,255,0.5);
1445
  }
1446
 
1447
  .cn-sidebar.cn-theme-light .cn-btn.cn-skip-button:hover {
1448
- color: rgba(255,255,255,1);
1449
  }
1450
 
1451
  .cn-sidebar.cn-theme-light #cn_iframe_preview {
1452
- border-color: #fff;
1453
- box-shadow: 0 0 10px 0 rgba(255,255,255,.3);
1454
  }
1455
 
1456
  .cn-sidebar.cn-theme-light form input[type="text"],
@@ -1458,401 +1458,401 @@
1458
  .cn-sidebar.cn-theme-light form input[type="checkbox"],
1459
  .cn-sidebar.cn-theme-light form input[type="radio"],
1460
  .cn-sidebar.cn-theme-light form select {
1461
- border-color: #fff;
1462
  }
1463
 
1464
  .cn-sidebar.cn-theme-light form .cn-checkbox-wrapper label,
1465
  .cn-sidebar.cn-theme-light form .cn-radio-wrapper label {
1466
- color: #fff;
1467
  }
1468
 
1469
  .cn-sidebar.cn-theme-light .cn-checkbox-image-wrapper input:checked + img,
1470
  .cn-sidebar.cn-theme-light .cn-radio-image-wrapper input:checked + img {
1471
- border-color: #fff;
1472
  }
1473
 
1474
  .cn-sidebar.cn-theme-light form .cn-checkbox-image-wrapper img,
1475
  .cn-sidebar.cn-theme-light form .cn-radio-image-wrapper img {
1476
- border-color: rgba(255,255,255,0.2);
1477
  }
1478
 
1479
  .cn-sidebar.cn-theme-light form .cn-radio-wrapper label input:checked::before {
1480
- background-color: #fff;
1481
  }
1482
 
1483
  .cn-sidebar.cn-theme-light form input::placeholder,
1484
  .cn-sidebar.cn-theme-light form select::placeholder {
1485
- color: rgba(255,255,255,0.7);
1486
  }
1487
 
1488
  .cn-sidebar.cn-theme-light form input:focus,
1489
  .cn-sidebar.cn-theme-light form select:focus {
1490
- border-color: #fff;
1491
  }
1492
 
1493
  .cn-sidebar.cn-theme-light form .cn-plan-overlay {
1494
- border-color: rgba(255,255,255,0.5);
1495
  }
1496
 
1497
  .cn-sidebar.cn-theme-light form .cn-plan-wrapper input:checked + span .cn-plan-overlay {
1498
- border-color: rgba(255,255,255,1);
1499
- background-color: rgba(255,255,255,.2);
1500
  }
1501
 
1502
  .cn-sidebar.cn-theme-light .cn-form-container {
1503
  background: rgba(0,0,0,0.1);
1504
- border: 1px solid rgba(255,255,255,.3);
1505
- transition: all 0.2s;
1506
  }
1507
 
1508
  .cn-sidebar.cn-theme-light .cn-form-container.cn-collapsed {
1509
- border-color: rgba(255,255,255,0);
1510
  }
1511
 
1512
  .cn-accordion .cn-accordion-item {
1513
- overflow: hidden;
1514
- border: 1px solid rgba(255,255,255,0.05);
1515
- transition: border-color 0.2s;
1516
  }
1517
 
1518
  .cn-accordion .cn-accordion-item:focus {
1519
- border-color: #20C19E;
1520
  }
1521
 
1522
  .cn-accordion .cn-accordion-item:not(:last-child) {
1523
- margin-bottom: 0.5em;
1524
  }
1525
 
1526
  .cn-accordion .cn-accordion-item.cn-disabled {
1527
- pointer-events: none;
1528
  }
1529
 
1530
  .cn-accordion .cn-accordion-item.cn-hidden {
1531
- visibility: hidden;
1532
  }
1533
 
1534
  .cn-accordion .cn-accordion-item.cn-collapsed .cn-accordion-button {
1535
- color: rgba(255,255,255,.7);
1536
  }
1537
 
1538
  .cn-accordion .cn-accordion-item.cn-collapsed .cn-accordion-button:hover {
1539
- color: #fff;
1540
  }
1541
 
1542
  .cn-accordion .cn-accordion-button {
1543
- text-align: left;
1544
- font-size: 15px;
1545
- font-style: normal;
1546
- font-weight: bold;
1547
- color: #fff;
1548
- width: 100%;
1549
- position: relative;
1550
- border: none;
1551
- outline: none;
1552
- background: none;
1553
- padding: 0;
1554
- margin: 0;
1555
- cursor: pointer;
1556
  }
1557
 
1558
  .cn-accordion .cn-accordion-button:hover {
1559
- color: #fff;
1560
  }
1561
 
1562
  /*
1563
  .cn-accordion .cn-accordion-button:after {
1564
- font-family: dashicons;
1565
- line-height: 1;
1566
- font-weight: 400;
1567
- font-style: normal;
1568
- text-transform: none;
1569
- text-rendering: auto;
1570
- font-size: 18px;
1571
- text-align: center;
1572
- display: block;
1573
- content: "\f347";
1574
- position: absolute;
1575
- top: 50%;
1576
- margin-top: -9px;
1577
- right: 0;
1578
- line-height: 1;
1579
- pointer-events: none;
1580
- color: #fff;
1581
- transform: rotate(180deg);
1582
- transition: all 0.3s ease-in-out;
1583
  }
1584
 
1585
  .cn-accordion .cn-collapsed .cn-accordion-button:after {
1586
- transform: rotate(0);
1587
  }*/
1588
 
1589
  .cn-accordion .cn-accordion-collapse {
1590
  overflow-y: hidden;
1591
- max-height: 1000px; /* approximate max height */
1592
 
1593
- transition-property: all;
1594
- transition-duration: .3s;
1595
- transition-timing-function: ease-in-out;
1596
  }
1597
 
1598
  .cn-accordion .cn-accordion-collapse.cn-form {
1599
- margin-bottom: 1.5em;
1600
  }
1601
 
1602
  .cn-accordion .cn-collapsed .cn-accordion-collapse {
1603
- max-height: 0;
1604
- margin-bottom: 0;
1605
  }
1606
 
1607
  #cn_card_number, #cn_expiration_date, #cn_cvv {
1608
- background: transparent;
1609
- border: 1px solid #86868F;
1610
- border-radius: 3px;
1611
- margin: 0;
1612
- padding: 0 15px;
1613
- color: #fff;
1614
- transition: border-color 0.2s;
1615
- height: 3em;
1616
- box-shadow: none;
1617
  }
1618
 
1619
  #cn_card_number.braintree-hosted-fields-focused, #cn_expiration_date.braintree-hosted-fields-focused, #cn_cvv.braintree-hosted-fields-focused {
1620
- border-color: #20C19E;
1621
- background-color: transparent;
1622
- box-shadow: none;
1623
  }
1624
 
1625
  #cn_card_number.braintree-hosted-fields-invalid, #cn_expiration_date.braintree-hosted-fields-invalid, #cn_cvv.braintree-hosted-fields-invalid {
1626
- border-color: #DA2439;
1627
- background-color: transparent;
1628
- box-shadow: none;
1629
  }
1630
 
1631
  #cn_card_number.braintree-hosted-fields-valid {
1632
- color: #fff;
1633
  }
1634
 
1635
  /* Loader */
1636
 
1637
  .cn-welcome-wrap .has-loader:before {
1638
- display: block;
1639
- content: '';
1640
- background: rgba(255,255,255,0);
1641
- transition: all 0.2s;
1642
- position: absolute;
1643
- width: 100%;
1644
- height: 100%;
1645
- z-index: -1;
1646
  }
1647
  .cn-welcome-wrap .has-loader.cn-loading:before {
1648
- /* background: rgba(32,193,158,.2); */
1649
- background: rgba(255,255,255,.2);
1650
- z-index: 99;
1651
  }
1652
 
1653
  .cn-welcome-wrap .has-loader > .cn-spinner {
1654
- position: absolute;
1655
- top: 50%;
1656
- left: 50%;
1657
- width: 21px;
1658
- height: 21px;
1659
- z-index: 100;
1660
  }
1661
 
1662
  .cn-welcome-wrap .has-loader > .cn-spinner:after {
1663
- border: 3px solid #20C19E;
1664
- border-color: #20C19E transparent #20C19E transparent;
1665
- width: 21px;
1666
- height: 21px;
1667
- border-radius: 50%;
1668
- opacity: 0;
1669
- transition: all 0.3s;
1670
  }
1671
 
1672
  .cn-welcome-wrap .has-loader.cn-loading > .cn-spinner {
1673
- max-width: 21px;
1674
- opacity: 1;
1675
  }
1676
 
1677
  .cn-welcome-wrap .has-loader.cn-loading > .cn-spinner:after {
1678
- opacity: 1;
1679
  }
1680
 
1681
  /* Progressbar */
1682
 
1683
  .cn-welcome-wrap .cn-compliance-check {
1684
- width: 100%;
1685
- margin: 0 0 10px 0;
1686
  }
1687
 
1688
  .cn-welcome-wrap .cn-compliance-feedback {
1689
- position: relative;
1690
- margin-bottom: 1.5em;
1691
- color: #fff;
1692
- overflow-y: hidden;
1693
- max-height: 500px; /* approximate max height */
1694
- transition: all .3s cubic-bezier(0, 1, 0.5, 1);
1695
- transition-delay: 0.3s;
1696
- opacity: 1;
1697
  }
1698
 
1699
  .cn-welcome-wrap .cn-compliance-feedback p {
1700
- padding: 15px;
1701
- margin: 0;
1702
  }
1703
 
1704
  .cn-welcome-wrap .cn-compliance-feedback p.cn-error {
1705
- border: 1px solid #da2439;
1706
- border-radius: 3px;
1707
- background: rgba( 218,36,57, 0.5);
1708
  }
1709
 
1710
  .cn-welcome-wrap .cn-compliance-feedback p.cn-error a {
1711
- color: inherit;
1712
- text-decoration: underline;
1713
  }
1714
 
1715
  .cn-welcome-wrap .cn-compliance-feedback p.cn-warning {
1716
- border: 1px solid #e78d26;
1717
- border-radius: 3px;
1718
- background: rgba( 231,141,38, 0.5);
1719
  }
1720
 
1721
  .cn-welcome-wrap .cn-compliance-feedback p.cn-message {
1722
- border: 1px solid #008000;
1723
- border-radius: 3px;
1724
- background: rgba( 0,128,0, 0.5);
1725
  }
1726
 
1727
  .cn-welcome-wrap .cn-compliance-feedback.cn-hidden {
1728
- max-height: 0;
1729
- margin-bottom: 0;
1730
- opacity: 0;
1731
  }
1732
 
1733
  .cn-welcome-wrap .cn-compliance-feedback em {
1734
- font-size: 15px;
1735
- font-weight: bold;
1736
- display: block;
1737
- margin-bottom: 10px;
1738
- color: inherit;
1739
  }
1740
 
1741
  .cn-welcome-wrap .cn-progressbar {
1742
- height: 26px;
1743
- margin: 0 0 20px;
1744
- width: 100%;
1745
- position: relative;
1746
  }
1747
 
1748
  .cn-welcome-wrap .cn-compliance-results .cn-compliance-item:not(:first-child) {
1749
- margin-top: 10px;
1750
  }
1751
 
1752
  .cn-welcome-wrap .cn-compliance-results .cn-compliance-item p {
1753
- display: flex;
1754
- justify-content: space-between;
1755
- margin: 0;
1756
  }
1757
 
1758
  .cn-welcome-wrap .cn-compliance-results .cn-compliance-item p:first-child {
1759
- font-size: 15px;
1760
- color: #fff;
1761
  }
1762
 
1763
- .cn-welcome-wrap .cn-compliance-results .cn-compliance-item p:last-child {
1764
  }
1765
 
1766
  .cn-welcome-wrap .cn-compliance-results .cn-compliance-label {
1767
  }
1768
 
1769
  .cn-welcome-wrap .cn-compliance-info {
1770
- font-size: 15px;
1771
- line-height: inherit;
1772
- opacity: 0.5;
1773
- cursor: pointer;
1774
  }
1775
 
1776
  .cn-welcome-wrap .cn-compliance-results .cn-compliance-status.cn-failed {
1777
- color: red;
1778
  }
1779
 
1780
  .cn-welcome-wrap .cn-compliance-results .cn-compliance-status.cn-passed {
1781
- color: #20C19E;
1782
  }
1783
 
1784
  .cn-welcome-wrap .cn-progress-label {
1785
  position: absolute;
1786
  left: 50%;
1787
- transform: translateX(-50%);
1788
- font-size: 14px;
1789
- font-weight: bold;
1790
  top: 3px;
1791
  color: #fff;
1792
  }
1793
 
1794
  .cn-welcome-wrap .ui-progressbar {
1795
- background: rgba(255,255,255,0.1);
1796
- border-radius: 3px;
1797
  }
1798
 
1799
  .cn-welcome-wrap .ui-progressbar .ui-progressbar-value {
1800
- background: #20C19E;
1801
- height: 100%;
1802
- border: 0 none;
1803
- border-radius: 3px;
1804
- margin: 3px 0;
1805
- color: #fff;
1806
- text-align: center;
1807
- float: left;
1808
- height: 20px;
1809
- line-height: 20px;
1810
- font-size: 20px;
1811
- width: 0;
1812
- min-width: 0;
1813
- -webkit-transition: width .5s ease;
1814
- -o-transition: width .5s ease;
1815
- transition: width .5s ease;
1816
  }
1817
 
1818
  /* Modaal */
1819
 
1820
  .cn-modal .modaal-content-container {
1821
- padding: 0;
1822
  }
1823
 
1824
  .cn-modal .modaal-inner-wrapper {
1825
- padding: 30px 30px 0;
1826
  }
1827
 
1828
  .modaal-overlay {
1829
- z-index: 9998 !important;
1830
  }
1831
 
1832
  .cn-included,
1833
  .cn-excluded {
1834
- position: relative;
1835
  }
1836
 
1837
  .cn-included .cn-icon,
1838
  .cn-excluded .cn-icon {
1839
- box-sizing: border-box;
1840
  position: absolute;
1841
- left: 0;
1842
  display: block;
1843
  transform: scale(1);
1844
  width: 22px;
1845
  height: 22px;
1846
  border: 2px solid;
1847
  }
1848
-
1849
  .cn-included .cn-icon {
1850
  border-radius: 100px;
1851
- color: #20C19E;
1852
  }
1853
 
1854
  .cn-included b {
1855
- color: #20C19E;
1856
  }
1857
 
1858
  .cn-included .cn-icon::after {
@@ -1873,11 +1873,11 @@
1873
 
1874
  .cn-excluded .cn-icon {
1875
  border-radius: 40px;
1876
- color: #FF0000;
1877
  }
1878
 
1879
  .cn-excluded b {
1880
- color: #FF0000;
1881
  }
1882
 
1883
  .cn-excluded .cn-icon::after,
1
  .cn-welcome-wrap #wpcontent {
2
+ padding-left: 0;
3
  }
4
 
5
  .cn-welcome-wrap .update-nag {
6
+ display: none;
7
  }
8
 
9
  .cn-welcome-wrap * {
10
+ box-sizing: border-box;
11
  }
12
 
13
  .cn-welcome-wrap #wpbody-content {
14
+ padding-bottom: 0;
15
  }
16
 
17
  .cn-welcome-wrap #wpfooter {
18
+ display: none !important;
19
  }
20
 
21
  #cn_upgrade_iframe iframe {
22
+ width: 100%;
23
+ height: 100%;
24
+ margin: 0;
25
+ border: 0;
26
+ padding: 0;
27
  }
28
 
29
  .cn-welcome-wrap {
30
+ display: flex;
31
+ height: calc(100vh - 32px);
32
+ margin: 0;
33
+ background: #fff;
34
+ color: #191e23;
35
+ /*
36
+ position: fixed;
37
+ width: calc(100% - 160px);
38
+ */
39
+ width: 100%;
40
  }
41
 
42
  .folded .cn-welcome-wrap {
43
+ width: calc(100% - 36px);
44
  }
45
 
46
  .cn-welcome-wrap h1,
48
  .cn-welcome-wrap h3,
49
  .cn-welcome-wrap h4,
50
  .cn-welcome-wrap h5 {
51
+ margin-top: 0;
52
  }
53
 
54
  .cn-content h1,
56
  .cn-content h3,
57
  .cn-content h4,
58
  .cn-content h5 {
59
+ color: #191e23;
60
+ padding: 0;
61
  }
62
 
63
  .cn-content h1,
65
  .cn-content h3,
66
  .cn-content h4,
67
  .cn-content h5 {
68
+ color: #191e23;
69
+ padding: 0;
70
  }
71
 
72
  .cn-sidebar h1,
74
  .cn-sidebar h3,
75
  .cn-sidebar h4,
76
  .cn-sidebar h5 {
77
+ color: #fff;
78
  }
79
 
80
  .cn-content h1 + h2,
81
  .cn-content h1 + h3 {
82
+ margin-top: 0.5em;
83
  }
84
 
85
  .cn-welcome-wrap h1 {
86
+ font-size: 4em;
87
+ line-height: 1.1;
88
  }
89
  .cn-welcome-wrap h2 {
90
+ font-size: 2em;
91
+ line-height: 1.1;
92
  }
93
  .cn-welcome-wrap h4 {
94
+ font-size: 1.5em;
95
  }
96
  .cn-welcome-wrap h5 {
97
+ font-size: 1.35em;
98
  }
99
 
100
  .cn-welcome-wrap a,
101
  .cn-welcome-wrap .cn-btn {
102
+ transition: all 0.2s;
103
  }
104
 
105
  .cn-welcome-step-1 h3:first-child {
106
+ margin-bottom: 0;
107
  }
108
 
109
  .cn-welcome-step-1 .cn-content .cn-lead {
110
+ margin-top: 1.5em;
111
+ max-width: 100%;
112
  }
113
 
114
  .cn-welcome-step-1 .cn-content .cn-lead p:first-child {
115
+ margin-bottom: 1em;
116
  }
117
 
118
  .cn-welcome-step-1 .cn-content h1 {
119
+ margin-bottom: 5px;
120
  }
121
 
122
  .cn-welcome-step-1 .cn-content h2 {
123
+ margin-bottom: 1em;
124
  }
125
 
126
  .cn-welcome-step-1 .cn-content h4 {
127
+ margin-top: 1.5em;
128
  }
129
 
130
  .cn-welcome-step-1 .cn-sidebar .cn-lead {
131
+ margin-bottom: 1em;
132
  }
133
 
134
  .cn-welcome-step-1 .cn-sidebar .cn-inner,
135
  .cn-welcome-step-1 .cn-content .cn-inner {
136
+ padding: 6em;
137
  }
138
 
139
  .cn-welcome-wrap.cn-welcome-step-1 .cn-sidebar {
140
+ width: 50%;
141
  }
142
 
143
  .cn-welcome-wrap.cn-welcome-step-1 .cn-content.cn-sidebar-visible {
144
+ width: 50%;
145
  }
146
 
147
  .cn-welcome-wrap .cn-content a.cn-link {
148
+ color: #20C19E;
149
+ text-decoration: none;
150
+ font-style: normal;
151
+ outline: none;
152
+ box-shadow: none;
153
  }
154
 
155
  .cn-welcome-wrap .cn-sidebar {
156
+ width: 25%;
157
+ min-height: 100%;
158
+ background: #35353F;
159
+ /*
160
+ background: rgba(7,137,145,0.7);
161
+ background: linear-gradient(145deg, rgba(7,137,145,.7), rgba(32,193,158,.7));
162
+ */
163
+ /*
164
+ display: flex;
165
+ justify-content: center;
166
+ align-items: center;
167
+ */
168
+ position: relative;
169
+ text-align: left;
170
+ overflow-y: scroll;
171
+ -ms-overflow-style: none; /* IE and Edge */
172
+ scrollbar-width: none; /* Firefox */
173
  }
174
 
175
  .cn-welcome-wrap .cn-content {
176
+ width: 100%;
177
+ min-height: 100%;
178
+ background-size: cover;
179
+ position: relative;
180
+ /*
181
+ display: flex;
182
+ justify-content: space-between;
183
+ align-items: center;
184
+ */
185
+ text-align: center;
186
+ overflow-y: scroll;
187
+ -ms-overflow-style: none; /* IE and Edge */
188
+ scrollbar-width: none; /* Firefox */
189
  }
190
 
191
  .cn-welcome-wrap .cn-content::-webkit-scrollbar,
192
  .cn-welcome-wrap .cn-sidebar::-webkit-scrollbar {
193
+ width: 0;
194
+ height: 0;
195
  }
196
 
197
  .cn-welcome-wrap .cn-hero-image {
198
+ display: flex;
199
+ justify-content: center;
200
+ align-items: flex-start;
201
+ max-width: 70%;
202
+ margin: 2em auto;
203
  }
204
 
205
  .cn-welcome-wrap .cn-hero-image img {
206
+ align-self: center;
207
+ max-width: 600px;
208
  }
209
 
210
  .cn-welcome-wrap .cn-hero-image .cn-flex-item img {
211
+ max-width: 400px;
212
  }
213
 
214
  .cn-welcome-wrap .cn-flex-item {
215
+ flex-grow: 1;
216
+ flex-basis: 0;
217
  }
218
 
219
  .cn-welcome-wrap .cn-flex-item:first-child,
220
  .cn-welcome-wrap .cn-flex-item:last-child {
221
+ flex-grow: 4;
222
  }
223
 
224
  .cn-welcome-wrap .cn-flex-item:nth-child(2) img {
225
+ margin-top: 130px;
226
  }
227
 
228
  .cn-welcome-wrap .cn-flex-item ul {
229
+ padding: 0;
230
+ margin: 0;
231
+ list-style: none;
232
+ font-size: 15px;
233
  }
234
 
235
  .cn-welcome-wrap .cn-flex-item ul li {
236
+ padding: 0;
237
+ font-size: 15px;
238
+ line-height: 1.1;
239
+ margin: 1em 0;
240
  }
241
 
242
  .cn-welcome-wrap .cn-flex-item ul li span {
243
+ display: inline-block;
244
+ position: relative;
245
+ padding-left: 20px;
246
  }
247
 
248
  .cn-welcome-wrap .cn-flex-item ul li span::before {
249
+ font-family: 'dashicons';
250
+ line-height: 1;
251
+ font-weight: 400;
252
+ font-style: normal;
253
+ text-transform: none;
254
+ text-rendering: auto;
255
+ font-size: 16px;
256
+ text-align: center;
257
+ display: block;
258
+ content: "\f15e";
259
+ position: absolute;
260
+ top: 2px;
261
+ left: 0;
262
+ line-height: 1;
263
+ width: 16px;
264
+ height: 16px;
265
+ margin: 0;
266
+ color: #20C19E;
267
+ background: none;
268
  }
269
 
270
  .cn-welcome-wrap .cn-flex-item ul li b {
271
+ font-weight: bold;
272
+ font-size: 16px;
273
  }
274
 
275
  .cn-welcome-wrap .cn-logo-container {
276
+ margin-bottom: 1em;
277
  }
278
 
279
  .cn-welcome-wrap .cn-logo-container > * {
280
+ vertical-align: middle;
281
+ margin-bottom: 0.5em;
282
  }
283
 
284
  .cn-welcome-wrap .cn-logo-container img {
285
+ display: inline-block;
286
  }
287
 
288
  .cn-welcome-wrap .cn-badge {
289
+ background: #ccc;
290
+ color: #191e23;
291
+ border-radius: 3px;
292
+ text-transform: uppercase;
293
+ line-height: 1;
294
+ display: inline-block;
295
+ padding: 5px;
296
+ margin-left: 5px;
297
+ margin-right: 5px;
298
  }
299
 
300
  .cn-welcome-wrap.cn-welcome-step-2 .cn-content {
301
+ background-size: cover;
302
  }
303
 
304
  .cn-welcome-wrap.cn-welcome-step-3 .cn-content {
305
+ background-size: cover;
306
  }
307
 
308
  .cn-welcome-wrap.cn-welcome-step-4 .cn-content {
309
+ background-size: cover;
310
  }
311
 
312
  .cn-welcome-wrap .cn-content.cn-sidebar-visible {
313
+ width: 75%;
314
  }
315
 
316
  .cn-welcome-wrap .cn-content-header {
317
+ text-align: center;
318
+ margin-bottom: 2em;
319
+ line-height: 1em;
320
+ display: flex;
321
+ flex-direction: row;
322
  }
323
 
324
  .cn-welcome-wrap .cn-content-header:before,
325
  .cn-welcome-wrap .cn-content-header:after {
326
+ content:'';
327
+ flex: 1 1;
328
+ margin: auto;
329
+ border-bottom: 1px solid rgba(255,255,255,.7);
330
  }
331
 
332
  .cn-welcome-wrap .cn-content-header:before {
333
+ margin-right: 1em;
334
  }
335
 
336
  .cn-welcome-wrap .cn-content-header:after {
337
+ margin-left: 1em;
338
  }
339
 
340
  .cn-welcome-wrap .cn-inner {
341
+ position: relative;
342
+ z-index: 1;
343
+ padding: 4em;
344
+ min-height: 100%;
345
+ width: 100%;
346
+ display: flex;
347
+ justify-content: space-between;
348
  }
349
 
350
  .cn-sidebar .cn-inner {
351
+ flex-direction: column;
352
+ justify-content: space-between;
353
+ padding-bottom: 2em;
354
  }
355
 
356
  .cn-content .cn-inner {
357
+ flex-direction: row;
358
+ justify-content: space-around;
359
+ align-items: center;
360
  }
361
 
362
  .cn-content .cn-lead {
363
+ margin: 0 auto;
364
+ max-width: 75%;
365
  }
366
 
367
  .cn-content .cn-lead p {
368
+ font-size: 1.3em;
369
+ margin: 0.5em 0;
370
  }
371
 
372
  .cn-content .cn-lead p:last-child {
373
+ margin-bottom: 0;
374
  }
375
 
376
  .cn-content .cn-content-full {
377
+ width: 100%;
378
  }
379
 
380
  .cn-sidebar {
381
+ color: #BBBBC0;
382
  }
383
 
384
  .cn-sidebar a,
385
  .cn-sidebar em {
386
+ color: #20C19E;
387
+ text-decoration: none;
388
+ font-style: normal;
389
+ outline: none;
390
+ box-shadow: none;
391
  }
392
 
393
  .cn-sidebar a:hover {
394
+ text-decoration: underline;
395
  }
396
 
397
  .cn-sidebar .cn-lead {
398
+ margin-bottom: 2em;
399
  }
400
 
401
  .cn-sidebar .cn-lead b {
402
+ color: #fff;
403
+ font-weight: bold;
404
+ font-size: 15px;
405
  }
406
 
407
  .cn-sidebar .cn-lead p:last-child {
408
+ margin-bottom: 0;
409
  }
410
 
411
  .cn-sidebar .cn-buttons,
412
  .cn-content .cn-buttons {
413
+ margin-top: 3em;
414
  }
415
 
416
  .cn-welcome-step-3 .cn-content .cn-buttons {
417
+ margin-top: 0;
418
  }
419
 
420
  .cn-header {
421
+ margin-bottom: 3em;
422
  }
423
 
424
  .cn-footer {
425
+ margin-top: 3em;
426
+ text-align: left;
427
  }
428
 
429
  .cn-footer .cn-btn.cn-skip-button {
430
+ color: #86868F;
431
+ font-weight: normal;
432
+ font-size: inherit;
433
+ text-decoration: none;
434
  }
435
 
436
  .cn-footer .cn-btn.cn-skip-button:hover {
437
+ color: #fff;
438
+ text-decoration: none;
439
  }
440
 
441
  .cn-footer a:hover {
442
+ color: #20C19E;
443
  }
444
 
445
  .cn-welcome-wrap .cn-pricing-select {
446
+ margin-top: 1.5em;
447
  }
448
 
449
  .cn-welcome-wrap .cn-pricing-table {
450
+ display: flex;
451
+ justify-content: center;
452
+ align-items: center;
453
+ margin-top: 3em;
454
  }
455
 
456
  .cn-welcome-wrap .cn-pricing-table .cn-pricing-item {
457
+ margin: 0 1.5em 3em;
458
+ min-width: 300px;
459
  }
460
 
461
  .cn-welcome-wrap .cn-pricing-table .cn-pricing-item h4 {
462
+ margin-bottom: 0.5em;
463
+ position: relative;
464
+ font-size: 1.3em;
465
  }
466
 
467
  .cn-welcome-wrap .cn-pricing-table .cn-pricing-item h4:after {
468
+ content: '';
469
+ display: block;
470
+ width: 60px;
471
+ border-bottom: 1px solid #86868F;
472
+ margin: 1em auto 0;
473
  }
474
 
475
  .cn-welcome-wrap .cn-pricing-table .cn-pricing-item button {
476
+ pointer-events: none;
477
  }
478
 
479
  .cn-welcome-wrap .cn-pricing-table .cn-pricing-item:hover .cn-pricing-info {
480
+ border-color: rgba(0, 0, 0, 0.1);
481
  }
482
 
483
  .cn-welcome-wrap .cn-pricing-table .cn-pricing-item .cn-pricing-info {
484
+ box-shadow: 0px 0px 13px 0px rgba(236, 236, 241, 1);
485
+ border: 1px solid transparent;
486
+ border-radius: 5px;
487
+ position: relative;
488
+ overflow: hidden;
489
  }
490
 
491
  .cn-welcome-wrap .cn-pricing-table .cn-pricing-item input {
492
+ display: none;
493
  }
494
 
495
  .cn-welcome-wrap .cn-pricing-table .cn-pricing-item input:checked + .cn-pricing-info {
496
+ border-color: #20C19E;
497
  }
498
 
499
  .cn-welcome-wrap .cn-pricing-table .cn-pricing-item .cn-pricing-info > div {
500
+ padding: 2em 1.5em;
501
  }
502
 
503
  .cn-welcome-wrap .cn-pricing-table input#cn_pricing_plan_free + .cn-pricing-info .cn-plan-price {
504
+ color: #515151;
505
+ font-size: 1.25em;
506
+ line-height: 1.5em;
507
  }
508
 
509
  .cn-welcome-wrap .cn-pricing-table input#cn_pricing_plan_yearly + .cn-pricing-info h4 {
510
+ color: #FF9E0D;
511
  }
512
 
513
  .cn-welcome-wrap .cn-pricing-table input#cn_pricing_plan_yearly + .cn-pricing-info .cn-pricing-body p:last-child b,
514
  .cn-welcome-wrap .cn-pricing-table input#cn_pricing_plan_yearly + .cn-pricing-info .cn-pricing-body p:last-child .cn-icon,
515
  .cn-welcome-wrap .cn-pricing-table input#cn_pricing_plan_yearly + .cn-pricing-info .cn-pricing-body p:last-child .cn-icon:after {
516
+ color: #FF9E0D;
517
+ border-color: #FF9E0D;
518
  }
519
 
520
  .cn-welcome-wrap .cn-pricing-table input#cn_pricing_plan_yearly + .cn-pricing-info .cn-plan-promo {
521
+ color: #fff;
522
+ background: #20C19E;
523
+ position: absolute;
524
+ left: 50%;
525
+ top: 0;
526
+ font-weight: bold;
527
+ font-size: 1.1em;
528
+ line-height: 1.1em;
529
+ text-transform: uppercase;
530
+ display: inline-block;
531
+ letter-spacing: 1px;
532
+ border-radius: 0 0 5px 5px;
533
+ padding: 0.25em 2em;
534
+ transform: translateX(-50%);
535
  }
536
 
537
  .cn-welcome-wrap .cn-pricing-table .cn-pricing-item .cn-pricing-info .cn-pricing-head {
538
+ border-bottom: 1px solid rgba(0, 0, 0, 0.05);
539
+ padding: 3em 1.5em 2.5em;
540
  }
541
 
542
  .cn-welcome-wrap .cn-pricing-table .cn-pricing-info div.cn-pricing-body {
543
+ padding-bottom: 0;
544
+ font-size: 14px;
545
+ text-align: left;
546
  }
547
 
548
  .cn-welcome-wrap .cn-pricing-table .cn-pricing-info div.cn-pricing-body p {
549
+ padding-left: 35px;
550
+ line-height: 1.5;
551
+ margin: 1em 0;
552
  }
553
 
554
  .cn-welcome-wrap .cn-plan-pricing {
555
+ display: block;
556
+ font-size: 1.5em;
557
+ color: #515151;
558
  }
559
 
560
  .cn-welcome-wrap .cn-pricing-table .cn-plan-price {
561
+ font-size: 1.5em;
562
+ font-weight: bold;
563
+ line-height: 1.1;
564
+ color: #20C19E;
565
+ text-transform: uppercase;
566
  }
567
 
568
  .cn-welcome-wrap .cn-pricing-table .cn-plan-price sup {
569
+ font-weight: normal;
570
  }
571
 
572
  .cn-welcome-wrap .cn-billing-wrapper {
573
+ font-weight: normal;
574
  }
575
 
576
  .cn-welcome-wrap .cn-billing-wrapper input {
577
+ display: none;
578
  }
579
 
580
  .cn-welcome-wrap .cn-billing-wrapper label {
581
+ position: relative;
582
+ display: inline-block;
583
+ padding: .5em 1em;
584
+ box-sizing: content-box;
585
  }
586
 
587
  .cn-welcome-wrap .cn-billing-wrapper input:checked + span {
588
+ color: #fff;
589
  }
590
 
591
  .cn-welcome-wrap .cn-billing-wrapper input:checked + span .cn-plan-overlay {
592
+ background-color: rgba(53,53,63,1);
593
  }
594
 
595
  .cn-welcome-wrap .cn-billing-wrapper .cn-plan-overlay {
596
+ border: none;
597
+ width: 100%;
598
+ height: 100%;
599
+ border-radius: 3px;
600
+ position: absolute;
601
+ left: 0;
602
+ top: 0;
603
+ transition: border-color 0.2s;
604
+ z-index: -1;
605
+ background-color: rgba(53,53,63,0.1);
606
  }
607
 
608
  .cn-welcome-wrap .cn-billing-wrapper :first-child > span .cn-plan-overlay {
609
+ border-top-right-radius: 0;
610
+ border-bottom-right-radius: 0;
611
  }
612
 
613
  .cn-welcome-wrap .cn-billing-wrapper :last-child > span .cn-plan-overlay {
614
+ border-top-left-radius: 0;
615
+ border-bottom-left-radius: 0;
616
  }
617
 
618
  .cn-btn {
619
+ border-radius: 3em;
620
+ padding: 1em 3em;
621
+ box-shadow: none;
622
+ border: 2px solid #20C19E;
623
+ outline: none;
624
+ background: #20C19E;
625
+ font-size: 15px;
626
+ font-weight: bold;
627
+ color: #fff;
628
+ cursor: pointer;
629
+ display: inline-block;
630
+ text-decoration: none;
631
  }
632
 
633
  .cn-btn:hover,
634
  .cn-btn:focus {
635
+ box-shadow: none;
636
+ outline: none;
637
+ border: 2px solid #20C19E;
638
+ background: #20C19E;
639
+ color: #fff;
640
+ text-decoration: none !important;
641
  }
642
 
643
  .cn-btn.cn-btn-outline {
644
+ background: transparent;
645
+ color: #20C19E;
646
+ box-shadow: 0 0 15px 0 rgba(255,255,255,.4), inset 0 0 15px rgba(255,255,255,.4);
647
  }
648
 
649
  .cn-btn.cn-btn-outline:hover {
650
+ text-shadow: 0 0 10px rgba(255,255,255,.4), 0 0 20px rgba(255,255,255,.4), 0 0 30px rgba(255,255,255,.4), 0 0 40px rgba(255,255,255,.4);
651
  }
652
 
653
  .cn-btn.cn-btn-outline .cn-spinner::after {
654
+ border-color: #fff transparent #fff transparent;
655
  }
656
 
657
  .cn-btn.cn-btn-transparent,
658
  .cn-btn.cn-btn-transparent:hover,
659
  .cn-btn.cn-btn-transparent:focus {
660
+ box-shadow: none;
661
+ background: transparent;
662
+ color: #BBBBC0;
663
+ border-color: transparent;
664
  }
665
 
666
  .cn-btn.cn-btn-lg {
667
+ border-radius: 4em;
668
+ padding: 1.5em 4em;
669
+ font-size: 15px;
670
  }
671
 
672
  .cn-btn.cn-btn-link {
673
+ background: none;
674
+ border-color: transparent;
675
+ color: inherit;
676
+ padding: 0;
677
  }
678
 
679
  .cn-top-bar {
680
+ display: flex;
681
+ justify-content: space-between;
682
+ align-items: center;
683
  }
684
 
685
  .cn-stepper {
686
+ padding: 1.5em;
687
+ margin: 1.5em -1.5em;
688
+ overflow-x: hidden;
689
+ overflow-y: auto;
690
+ display: flex;
691
+ justify-content: space-between;
692
  }
693
 
694
  .cn-stepper li {
695
+ position: relative;
696
+ display: flex;
697
+ flex: 1;
698
+ align-items: center;
699
+ transition: .2s;
700
+ margin: 0;
701
  }
702
 
703
  .cn-stepper li:not(:last-child):after {
704
+ position: relative;
705
+ flex: 1;
706
+ height: 1px;
707
+ margin: .35em 0 0 0;
708
+ content: '';
709
+ background-color: #86868F;
710
  }
711
 
712
  .cn-stepper li .cn-step {
713
+ cursor: default;
714
  }
715
 
716
  .cn-stepper li .cn-step .cn-circle {
718
  width: 2em;
719
  height: 2em;
720
  line-height: 2em;
721
+ font-weight: bold;
722
  color: #fff;
723
  text-align: center;
724
  background: #86868F;
726
  }
727
 
728
  .cn-stepper li.cn-completed .cn-step .cn-circle {
729
+ color: transparent;
730
+ background: #20C19E;
731
  }
732
  .cn-stepper li.cn-completed .cn-step .cn-circle:before{
733
+ font-family: dashicons;
734
+ line-height: 1;
735
+ font-weight: 400;
736
+ font-style: normal;
737
+ text-transform: none;
738
+ text-rendering: auto;
739
+ font-size: 14px;
740
+ text-align: center;
741
+ display: block;
742
+ content: "\f15e";
743
+ position: absolute;
744
+ top: 0;
745
+ left: -2px;
746
+ line-height: 2em;
747
+ width: 2em;
748
+ pointer-events: none;
749
+ transform: scale(1.25, 1.25);
750
+ color: #fff;
751
  }
752
 
753
  .cn-stepper li.cn-active .cn-step .cn-circle {
754
+ background: #20C19E;
755
  }
756
 
757
  .cn-features-list .cn-feature {
758
+ display: flex;
759
+ margin-bottom: 2em;
760
+ padding: 2em;
761
+ border: 1px solid rgba(255,255,255,0.1);
762
+ border-radius: 3px;
763
+ box-sizing: content-box;
764
+ background-color: rgba(255,255,255,0.1);
765
  }
766
 
767
  .cn-features-list .cn-feature:last-child {
768
+ margin-bottom: 0;
769
  }
770
 
771
  .cn-features-list .cn-feature img {
772
+ width: 48px;
773
+ height: 48px;
774
+ margin-right: 2em;
775
  }
776
  .cn-features-list .cn-feature h5 {
777
+ margin-bottom: 0.5em;
778
  }
779
 
780
  .cn-features-list .cn-feature-description p:last-child {
781
+ margin-bottom: 0;
782
  }
783
 
784
  .cn-form-container {
785
+ margin-left: -15px;
786
+ margin-right: -15px;
787
+ padding-left: 15px;
788
+ padding-right: 15px;
789
+ background: rgba(255,255,255,0.05);
790
+ padding-bottom: 1px;
791
  }
792
 
793
  .cn-form-header {
794
+ font-size: 15px;
795
+ font-style: normal;
796
+ font-weight: bold;
797
+ color: #fff;
798
+ width: 100%;
799
+ text-align: left;
800
+ margin: 0;
801
+ padding: 15px 0;
802
+ color: #fff;
803
  }
804
 
805
  .cn-small {
806
+ font-size: 12px;
807
  }
808
 
809
  .cn-form.cn-form-disabled[data-action="payment"] {
810
+ pointer-events: none;
811
+ opacity: 0.5;
812
  }
813
 
814
  .cn-form.cn-form-disabled .cn-accordion-collapse {
815
+ pointer-events: none;
816
  }
817
 
818
  .cn-welcome-wrap form {
819
+ position: relative;
820
+ margin: 0;
821
  }
822
 
823
  .cn-welcome-wrap form .cn-form-feedback {
824
+ position: relative;
825
+ margin-bottom: 1.5em;
826
+ color: #fff;
827
+ overflow-y: hidden;
828
+ max-height: 500px; /* approximate max height */
829
+ transition: all .3s cubic-bezier(0, 1, 0.5, 1);
830
+ transition-delay: 0.3s;
831
+ opacity: 1;
832
  }
833
 
834
  .cn-welcome-wrap form .cn-form-feedback p {
835
+ padding: 15px;
836
+ margin: 0;
837
  }
838
 
839
  .cn-welcome-wrap form .cn-form-feedback p.cn-error {
840
+ border: 1px solid #da2439;
841
+ border-radius: 3px;
842
+ background: rgba( 218,36,57, 0.5);
843
  }
844
 
845
  .cn-welcome-wrap form .cn-form-feedback p.cn-warning {
846
+ border: 1px solid #e78d26;
847
+ border-radius: 3px;
848
+ background: rgba( 231,141,38, 0.5);
849
  }
850
 
851
  .cn-welcome-wrap form .cn-form-feedback p.cn-message {
852
+ border: 1px solid #008000;
853
+ border-radius: 3px;
854
+ background: rgba( 0,128,0, 0.5);
855
  }
856
 
857
  .cn-welcome-wrap form .cn-form-feedback.cn-hidden {
858
+ max-height: 0;
859
+ margin-bottom: 0;
860
+ opacity: 0;
861
  }
862
 
863
  .cn-welcome-wrap form .cn-field:not(:last-child) {
864
+ position: relative;
865
+ margin: 0 0 0.5em;
866
  }
867
 
868
  .cn-welcome-wrap form .cn-field.cn-hidden {
869
+ display: none;
870
  }
871
 
872
  .cn-welcome-wrap form .cn-field.cn-field-half {
873
+ width: calc(50% - 0.5em);
874
+ display: inline-block;
875
+ margin: auto 0.25em;
876
  }
877
 
878
  .cn-welcome-wrap form .cn-field.cn-field-first {
879
+ margin-left: 0;
880
  }
881
 
882
  .cn-welcome-wrap form .cn-field.cn-field-last {
883
+ margin-right: 0;
884
  }
885
 
886
  .cn-welcome-wrap form label {
887
+ color: #fff;
888
+ margin: 0 0 0.5em;
889
+ display: block;
890
  }
891
 
892
  .cn-welcome-wrap form .cn-field > label {
893
+ color: #fff;
894
+ margin: 0 0 0.5em;
895
+ display: block;
896
+ font-weight: 700;
897
  }
898
 
899
  .cn-welcome-wrap form .cn-field.cn-field-submit {
900
+ margin: 1.5em 0 0 0;
901
  }
902
 
903
  .cn-welcome-wrap form input[type="text"],
905
  .cn-welcome-wrap form input[type="checkbox"],
906
  .cn-welcome-wrap form input[type="radio"],
907
  .cn-welcome-wrap form select {
908
+ background: transparent;
909
+ border: 1px solid #86868F;
910
+ margin: 0;
911
+ padding: 0 15px;
912
+ color: #fff;
913
+ transition: border-color 0.2s;
914
  }
915
 
916
  .cn-welcome-wrap form input[type="checkbox"],
917
  .cn-welcome-wrap form input[type="radio"] {
918
+ transition: none;
919
  }
920
 
921
  .cn-welcome-wrap form input[type="checkbox"] b,
922
  .cn-welcome-wrap form input[type="radio"] b {
923
+ font-weight: 700;
924
  }
925
 
926
  .cn-welcome-wrap form input[type="text"],
927
  .cn-welcome-wrap form input[type="password"],
928
  .cn-welcome-wrap form select {
929
+ width: 100%;
930
+ line-height: 3;
931
  }
932
 
933
  .cn-welcome-wrap form .cn-select-wrapper {
934
+ position: relative;
935
+ margin: 0;
936
  }
937
  .cn-welcome-wrap form .cn-select-wrapper:after {
938
+ font-family: dashicons;
939
+ line-height: 1;
940
+ font-weight: 400;
941
+ font-style: normal;
942
+ text-transform: none;
943
+ text-rendering: auto;
944
+ font-size: 18px;
945
+ text-align: center;
946
+ display: block;
947
+ content: "\f347";
948
+ position: absolute;
949
+ top: 50%;
950
+ margin-top: -9px;
951
+ right: 15px;
952
+ line-height: 1;
953
+ pointer-events: none;
954
+ color: #fff;
955
  }
956
 
957
  .cn-welcome-wrap form .cn-checkbox-wrapper,
958
  .cn-welcome-wrap form .cn-radio-wrapper {
959
+ position: relative;
960
  }
961
 
962
  .cn-welcome-wrap form .cn-checkbox-wrapper label,
963
  .cn-welcome-wrap form .cn-radio-wrapper label {
964
+ color: #BBBBC0;
965
  }
966
 
967
  .cn-welcome-wrap form .cn-checkbox-wrapper.cn-horizontal-wrapper label,
968
  .cn-welcome-wrap form .cn-radio-wrapper.cn-horizontal-wrapper label {
969
+ display: inline-block;
970
+ margin-right: 0.5em;
971
  }
972
 
973
  .cn-welcome-wrap form .cn-checkbox-wrapper.cn-horizontal-wrapper label:last-child,
974
  .cn-welcome-wrap form .cn-radio-wrapper.cn-horizontal-wrapper label:last-child {
975
+ margin-right: 0;
976
  }
977
 
978
  .cn-welcome-wrap form .cn-checkbox-wrapper input,
979
  .cn-welcome-wrap form .cn-radio-wrapper input {
980
+ position: absolute;
981
+ margin: 2px 0;
982
  }
983
 
984
  .cn-welcome-wrap form .cn-checkbox-wrapper input:focus,
985
  .cn-welcome-wrap form .cn-radio-wrapper input:focus {
986
+ border-color: #86868F;
987
  }
988
 
989
  .cn-welcome-wrap form .cn-checkbox-wrapper input:checked,
990
  .cn-welcome-wrap form .cn-radio-wrapper input:checked {
991
+ background: none;
992
+ border-color: #20C19E;
993
  }
994
 
995
  .cn-welcome-wrap form .cn-checkbox-wrapper input:checked,
996
  .cn-welcome-wrap form .cn-radio-wrapper input:checked {
997
+ background: none;
998
+ border-color: #20C19E;
999
  }
1000
 
1001
  .cn-welcome-wrap form .cn-checkbox-wrapper input:checked::before {
1002
+ font-family: dashicons;
1003
+ line-height: 1;
1004
+ font-weight: 400;
1005
+ font-style: normal;
1006
+ text-transform: none;
1007
+ text-rendering: auto;
1008
+ font-size: 14px;
1009
+ text-align: center;
1010
+ display: block;
1011
+ content: "\f15e";
1012
+ position: absolute;
1013
+ top: 0;
1014
+ left: 0;
1015
+ line-height: 1;
1016
+ width: 16px;
1017
+ height: 16px;
1018
+ margin: 0 auto 0 -1px;
1019
+ color: #fff;
1020
+ background: none;
1021
  }
1022
 
1023
  .cn-welcome-wrap form .cn-color-picker-wrapper input {
1024
+ border: none;
1025
  }
1026
 
1027
  .cn-welcome-wrap form .cn-color-picker-wrapper .sp-original-input-container {
1028
+ margin-left: 0;
1029
+ position: absolute;
1030
+ border: 1px solid rgba(255,255,255,1);
1031
+ border-radius: 0;
1032
  }
1033
 
1034
  .cn-welcome-wrap form .cn-color-picker-wrapper .sp-colorize-container {
1035
+ height: 16px;
1036
  }
1037
 
1038
  .cn-welcome-wrap form .cn-color-picker-wrapper input:checked::before {
1039
+ content: '';
1040
  }
1041
 
1042
  .cn-welcome-wrap form .cn-radio-wrapper label input:checked::before {
1043
+ text-align: center;
1044
+ display: block;
1045
+ position: absolute;
1046
+ top: 2px;
1047
+ left: 2px;
1048
+ line-height: 1;
1049
+ width: 10px;
1050
+ height: 10px;
1051
+ margin: 0 auto;
1052
+ color: #fff;
1053
+ background: #20C19E;
1054
  }
1055
 
1056
  .cn-welcome-wrap form .cn-checkbox-wrapper label > span,
1057
  .cn-welcome-wrap form .cn-radio-wrapper label > span {
1058
+ margin-left: 2em;
1059
+ display: block;
1060
  }
1061
 
1062
  .cn-welcome-wrap form .cn-field-checkbox > label.cn-asterix::after {
1063
+ content: '*';
1064
+ right: 0;
1065
+ top: 0;
1066
+ line-height: 8px;
1067
+ padding-left: 3px;
1068
+ display: inline-block;
1069
  }
1070
 
1071
  .cn-welcome-wrap form .cn-checkbox-wrapper label > span.cn-asterix::after,
1072
  .cn-welcome-wrap form .cn-radio-wrapper label > span.cn-asterix::after {
1073
+ content: '*';
1074
+ right: 0;
1075
+ top: 0;
1076
+ line-height: 8px;
1077
+ padding-left: 3px;
1078
+ display: inline-block;
1079
  }
1080
 
1081
  .cn-welcome-wrap form .cn-checkbox-image-wrapper label,
1082
  .cn-welcome-wrap form .cn-radio-image-wrapper label {
1083
+ display: inline-block;
1084
+ margin: 0 0.25em;
1085
+ position: relative;
1086
  }
1087
 
1088
  .cn-welcome-wrap form .cn-checkbox-image-wrapper label.cn-asterix,
1089
  .cn-welcome-wrap form .cn-radio-image-wrapper label.cn-asterix {
1090
+ padding-right: 8px;
1091
  }
1092
  .cn-welcome-wrap form .cn-checkbox-image-wrapper label.cn-asterix::after,
1093
  .cn-welcome-wrap form .cn-radio-image-wrapper label.cn-asterix::after {
1094
+ content: '*';
1095
+ position: absolute;
1096
+ right: 0;
1097
+ top: 0;
1098
+ line-height: 8px;
1099
  }
1100
 
1101
  .cn-sidebar form .cn-checkbox-image-wrapper span,
1102
  .cn-sidebar form .cn-radio-image-wrapper span {
1103
+ display: block;
1104
+ text-align: center;
1105
+ font-weight: 600;
1106
  }
1107
 
1108
  .cn-welcome-wrap form .cn-checkbox-image-wrapper label:first-child,
1109
  .cn-welcome-wrap form .cn-radio-image-wrapper label:first-child {
1110
+ margin-left: 0;
1111
  }
1112
 
1113
  .cn-welcome-wrap form .cn-checkbox-image-wrapper label:last-child,
1114
  .cn-welcome-wrap form .cn-radio-image-wrapper label:last-child {
1115
+ margin-right: 0;
1116
  }
1117
 
1118
  .cn-welcome-wrap form .cn-checkbox-image-wrapper input,
1119
  .cn-welcome-wrap form .cn-radio-image-wrapper input {
1120
+ display: none;
1121
  }
1122
 
1123
  .cn-welcome-wrap form .cn-checkbox-image-wrapper input:checked + img,
1124
  .cn-welcome-wrap form .cn-radio-image-wrapper input:checked + img {
1125
+ border-color: #20C19E;
1126
  }
1127
 
1128
  .cn-welcome-wrap form .cn-checkbox-image-wrapper img,
1129
  .cn-welcome-wrap form .cn-radio-image-wrapper img {
1130
+ display: inline-block;
1131
+ padding: 0.5em;
1132
+ border: 2px solid #86868F;
1133
+ border-radius: 3px;
1134
+ box-sizing: content-box;
1135
  }
1136
 
1137
  .cn-checkbox-image-wrapper .gdpr {
1138
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAC/ElEQVRoge2ZzZGjMBCFmcMet4rjHjlsANQmsGRgZ7BkMGRgZ7DOYMhgnME4A08GdgZ2AujbA41HiD8JEOawXUWVXUjd73WLVqsVBB4F+OlTv3cBciB7Ng4nAV6ADHjnSz6A7bOxPQQIh94Dd43AaSFodgKkFmNOGoHEYvwySw1IgJtFFHJgC6RD4GTJnedF2jQSAUfNqzfgMFFnAnxqOi9CvNc5UwzG1CWaQede03f1Bl6MhZqxz5l0Jot97BKBRH5nc3hLCETyO52qr1LqL4wjxWm5Akd/UMaJfOzdjpUs8xvYyXp8k//RcjA7Mf01MMVdE3IjyxyfvZyMLIVEIuoarGcZJhqOgY14bJITqO8VSd/AqobZy6T2UPUbi5RSH0op9EeW5igiguVAWZ50YxKvhRoZJ4MC/maCr56iKN5GEgi139EYHVailDpqYHMgKYpir5S6a5FIvQGYIuL9B3jjXapFYnUpOgiCIAC2mpcT872+lJ4Ab1hkqfQRuHslIB9wNHa+BYHrHAToOprKJuacJSgPLH+M1HmRtLkDdkqp95aU+tqb09tthcC5No/moeLcybKpMO5KmZbPydLON3HwzagSflQD9BIid/BI4gD2OpaA2DIbBan+8qC9sD5cOxD4FADZWAJir72kkAjE8sxN4FEGF0WRT4xAVtl1/X6sCQCZlpH6wDtHYHbpIFDVUskA+HUSUEqd9eKrB/xqCVQkNmb+X4SAy8fhmEYnEbDGJanKavDCBPoPWJSnsIvk2BvlAbr3RAaEssZPYx6blN2BK2obGFGX/bBf/EsLrm7SlL3J5k73ZMGmVS9MT5Qt8T0rulGhLHViyso3sZ20uvbif1kiKl5tuFSqI/WH+Gq78HUR4dytc7CRS86fLwo078YQQ5HFXKtLEOq3NMP53lVaNpPIcs4Fy0YB9S70LNdXpgGqjW5g3AvNlvgd+DUwb6vZmHT72aY8rtY+WgN4YI5+fh3cFPUNynqz8inUt//V7OpWAnwHNuZvH/IPPeDD9c6V9FUAAAAASUVORK5CYII=);
1139
+ background-repeat: no-repeat;
1140
  background-position: center center;
1141
  }
1142
 
1143
  .cn-checkbox-image-wrapper .ccpa {
1144
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACcAAAAwCAYAAACScGMWAAACPElEQVRYheXYvXHbMBTAcY7AEbSA79Smskp30QiqkyLaQPQE8Qb2BtEG4QZil3Ry5ZZaAO/vAqANIwSJD1LmXXD3ToVE8sf3hEcQRVEUBXADfE+Mu2LOAVSkj/q/xj0sGVcvEgeUGTAvDlgBP4CD+Vyl4HaZuNa9WRH5JSK4oZT6CZQxuN+ZOBzYqQ9mxSkYmAuzcUqpyoE0InIUkWcng1UoLresWFlrOwCwczLa2EAispczWzvcxs5YzzXWDm4bistpwk1RfCypr2yppc3BVUvDXYAtsO7OsSRcbY5bAbfArYicrYu36Ob7Fj297wx8Ncf7JwewScGJSD3S00LjOJa9p0/E1SHlDQWm4rqmHI+LAKbgGsx/y23IMbiQVUos7g2G04yjcOYEObga2InIxQNrc3FjK2MvDtP7DOQYAIvGlcBzYub+WRKNwOJw5oRDvW8Ih4icImDxOHNiX3nHcF0GDwGwZJyvvCG4aZuwB9i31lsMbu/DAXsD9IZS6kEpVQ0FoQvPHlxfaU/jR15peGbuGf3mlhqHKYF95c0dj1MCY5ZV1wUy/uT4dOB2BtykwDmyNw0QOM6EyweS9547L/AKOID7VNwcLcUdf1Jxa3T27MjaDOoZL0m4AXRJ3uZ3Pg69p9fy/pxssVYW6GdxbrvJwjXoUnZh40oTFXrT53q4EXiNtYltkCkTaDoc71v734B9z/ex7WdSXHfxzcBvYsbfKXHlECwAd0H/JZ7MjX6ZDBcy0DPYBmyHbugVe8KbbhsHbZ0AAAAASUVORK5CYII=);
1145
+ background-repeat: no-repeat;
1146
  background-position: center center;
1147
  }
1148
 
1149
  .cn-welcome-wrap form .cn-plan-wrapper {
1150
+ margin-bottom: 1em;
1151
  }
1152
 
1153
  .cn-welcome-wrap form .cn-plan-wrapper label > span {
1154
+ margin-left: 2em;
1155
  }
1156
 
1157
  .cn-welcome-wrap form .cn-plan-wrapper label {
1158
+ position: relative;
1159
+ display: block;
1160
+ padding: 1.25em 1em;
1161
+ box-sizing: content-box;
1162
  }
1163
 
1164
  .cn-welcome-wrap form .cn-plan-overlay {
1165
+ border: 1px solid #86868F;
1166
+ width: 100%;
1167
+ height: 100%;
1168
+ border-radius: 3px;
1169
+ position: absolute;
1170
+ left: 0;
1171
+ top: 0;
1172
+ transition: border-color 0.2s;
1173
+ z-index: 0;
1174
+ background-color: rgba(32,193,158,0);
1175
  }
1176
 
1177
  /*
1178
  .cn-welcome-wrap form .cn-plan-wrapper label input {
1179
+ top: 50%;
1180
+ margin: -8px 0 0;
1181
+ width: 20px;
1182
+ height: 20px;
1183
  }
1184
 
1185
  .cn-welcome-wrap form .cn-plan-wrapper label input:checked::before {
1186
+ width: 20px;
1187
+ height: 20px;
1188
+ line-height: 20px;
1189
  }
1190
  */
1191
 
1192
  .cn-welcome-wrap form .cn-plan-wrapper input:checked + span .cn-plan-overlay {
1193
+ border-color: #20C19E;
1194
+ background-color: rgba(32,193,158,.1);
1195
  }
1196
 
1197
  .cn-welcome-wrap form .cn-plan-wrapper span .cn-plan-description {
1198
+ font-weight: normal;
1199
  }
1200
 
1201
  .cn-welcome-wrap form .cn-plan-wrapper span .cn-plan-description b {
1202
+ font-weight: bold;
1203
  }
1204
 
1205
  .cn-welcome-wrap form .cn-plan-wrapper input:checked + span {
1206
+ color: #fff;
1207
  }
1208
 
1209
  .cn-welcome-wrap form .cn-plan-name {
1210
+ display: block;
1211
+ font-size: 1.1em;
1212
+ font-weight: bold;
1213
+ color: #fff;
1214
  }
1215
 
1216
  .cn-welcome-wrap form .cn-plan-pricing {
1217
+ display: inline-block;
1218
+ font-size: 1.1em;
1219
+ float: right;
1220
  }
1221
 
1222
  .cn-welcome-wrap form .cn-price-off {
1223
+ font-weight: bold;
1224
+ color: #20C19E;
1225
  }
1226
 
1227
  .cn-welcome-wrap form .cn-plan-price {
1228
+ font-weight: bold;
1229
  }
1230
 
1231
  .cn-welcome-wrap form input::placeholder,
1232
  .cn-welcome-wrap form select::placeholder {
1233
+ color: #86868F;
1234
  }
1235
 
1236
  .cn-welcome-wrap form input:focus,
1237
  .cn-welcome-wrap form select:focus {
1238
+ border-color: #20C19E;
1239
+ box-shadow: none;
1240
  }
1241
 
1242
  .cn-welcome-wrap form select:focus {
1243
+ color: #fff;
1244
  }
1245
 
1246
  .cn-welcome-wrap form select:hover {
1247
+ color: #fff;
1248
  }
1249
 
1250
  .cn-welcome-wrap .cn-nav {
1251
+ margin-top: 3em;
1252
  }
1253
 
1254
  .cn-welcome-wrap form .cn-nav {
1255
+ margin-top: 2.5em;
1256
  }
1257
 
1258
  .cn-welcome-wrap .cn-nav .cn-btn {
1259
+ margin: 0 0.25em;
1260
  }
1261
 
1262
  .cn-welcome-wrap .cn-nav .cn-btn:first-child {
1263
+ margin-left: 0;
1264
  }
1265
 
1266
  .cn-welcome-wrap .cn-nav .cn-btn:last-child {
1267
+ margin-right: 0;
1268
  }
1269
 
1270
  .cn-welcome-wrap #cn_preview_frame {
1271
+ width: 100%;
1272
+ height: 200px;
1273
+ border: 1px solid #86868F;
1274
+ margin-top: 2.5em;
1275
+ box-shadow: 0 0 10px 0 rgba(0,0,0,.3);
1276
+ position: relative;
1277
+ overflow: hidden;
1278
  }
1279
 
1280
  .cn-welcome-wrap #cn_preview_frame img {
1281
+ width: 100%;
1282
+ height: auto;
1283
+ display: block;
1284
+ filter: blur(3px) grayscale(100%);
1285
  }
1286
 
1287
  .cn-welcome-wrap #cn_preview_frame_wrapper {
1288
+ width: 400%;
1289
+ height: 400%;
1290
+ transform: scale(0.25) translate(-150%,-150%);
1291
+ pointer-events: none;
1292
  }
1293
 
1294
  .cn-welcome-wrap #cn_preview_frame_wrapper::after {
1295
+ content: '';
1296
+ display: block;
1297
+ width: 100%;
1298
+ height: 100%;
1299
+ background-color: rgba(0, 0, 0, 0);
1300
+ position: absolute;
1301
+ top: 0;
1302
+ left: 0;
1303
  }
1304
 
1305
  .cn-welcome-wrap #cn_preview_frame_wrapper iframe {
1306
+ width: 100%;
1307
+ height: 100%;
1308
+ filter: grayscale(100%);
1309
  }
1310
 
1311
  .cn-welcome-wrap #cn_preview_about {
1312
+ margin-bottom: 1.5em;
1313
  }
1314
 
1315
  .cn-welcome-wrap #cn_preview_about p {
1316
+ margin: 0;
1317
  }
1318
 
1319
  .cn-welcome-wrap #cn_preview_about p b {
1320
+ color: #fff;
1321
  }
1322
 
1323
  .cn-comparison {
1324
+ width: 100%;
1325
  }
1326
 
1327
  .cn-comparison tr:not(:last-child) {
1328
+ box-shadow: 0px 1px 1px rgba(255,255,255,.5);
1329
  }
1330
+
1331
  .cn-comparison th,
1332
  .cn-comparison td {
1333
+ padding: 1em;
1334
  }
1335
 
1336
  .cn-comparison th {
1337
+ font-weight: bold;
1338
+ text-transform: uppercase;
1339
+ letter-spacing: 0.05em;
1340
  }
1341
 
1342
  .cn-spinner {
1343
+ display: inline-block;
1344
+ width: 14px;
1345
+ height: 14px;
1346
+ max-width: 0;
1347
+ opacity: 0;
1348
+ transition: opacity 0.2s, max-width 0.3s;
1349
  }
1350
  .cn-spinner.spin {
1351
+ max-width: 14px;
1352
+ opacity: 1;
1353
+ margin-right: 10px;
1354
  }
1355
  .cn-spinner:after {
1356
+ content: '';
1357
+ display: block;
1358
+ width: 12px;
1359
+ height: 12px;
1360
+ border-radius: 50%;
1361
+ border: 2px solid #fff;
1362
+ border-color: #fff transparent #fff transparent;
1363
+ animation: cn-spin 0.8s linear infinite;
1364
  }
1365
 
1366
  @keyframes cn-spin {
1367
+ 0% {
1368
+ transform: rotate(0deg);
1369
+ }
1370
+ 100% {
1371
+ transform: rotate(360deg);
1372
+ }
1373
  }
1374
 
1375
  @keyframes cn-fadeIn {
1376
+ from {
1377
+ opacity: 0;
1378
+ }
1379
 
1380
+ to {
1381
+ opacity: 1;
1382
+ }
1383
  }
1384
 
1385
  @keyframes cn-fadeOut {
1386
+ from {
1387
+ opacity: 1;
1388
+ }
1389
 
1390
+ to {
1391
+ opacity: 0;
1392
+ }
1393
  }
1394
 
1395
  @keyframes cn-slideIn {
1396
+ from {
1397
+ transform: translate3d(0, -100%, 0);
1398
+ visibility: visible;
1399
+ }
1400
 
1401
+ to {
1402
+ transform: translate3d(0, 0, 0);
1403
+ }
1404
  }
1405
 
1406
  @keyframes slideOut {
1407
+ from {
1408
+ transform: translate3d(0, 0, 0);
1409
+ }
1410
 
1411
+ to {
1412
+ visibility: hidden;
1413
+ transform: translate3d(0, -100%, 0);
1414
+ }
1415
  }
1416
 
1417
  .cn-sidebar.cn-theme-light {
1418
+ background: linear-gradient(-45deg, rgba(4,134,138,1), rgba(32,193,158,1));
1419
+ color: #fff;
1420
  }
1421
 
1422
+ .cn-sidebar.cn-theme-light a,
1423
  .cn-sidebar.cn-theme-light em {
1424
+ color: #fff;
1425
+ text-decoration: underline;
1426
  }
1427
 
1428
+ .cn-sidebar.cn-theme-light a:hover,
1429
  .cn-sidebar.cn-theme-light em:hover {
1430
+ text-decoration: none;
1431
  }
1432
 
1433
  .cn-sidebar.cn-theme-light .cn-btn:not(.cn-skip-button) {
1434
+ border-color: #fff;
1435
+ background-color: #fff;
1436
+ color: #191e23;
1437
  }
1438
 
1439
  .cn-sidebar.cn-theme-light .cn-btn:not(.cn-skip-button) .cn-spinner::after {
1440
+ border-color: #191e23 transparent #191e23 transparent;
1441
  }
1442
 
1443
  .cn-sidebar.cn-theme-light .cn-btn.cn-skip-button {
1444
+ color: rgba(255,255,255,0.5);
1445
  }
1446
 
1447
  .cn-sidebar.cn-theme-light .cn-btn.cn-skip-button:hover {
1448
+ color: rgba(255,255,255,1);
1449
  }
1450
 
1451
  .cn-sidebar.cn-theme-light #cn_iframe_preview {
1452
+ border-color: #fff;
1453
+ box-shadow: 0 0 10px 0 rgba(255,255,255,.3);
1454
  }
1455
 
1456
  .cn-sidebar.cn-theme-light form input[type="text"],
1458
  .cn-sidebar.cn-theme-light form input[type="checkbox"],
1459
  .cn-sidebar.cn-theme-light form input[type="radio"],
1460
  .cn-sidebar.cn-theme-light form select {
1461
+ border-color: #fff;
1462
  }
1463
 
1464
  .cn-sidebar.cn-theme-light form .cn-checkbox-wrapper label,
1465
  .cn-sidebar.cn-theme-light form .cn-radio-wrapper label {
1466
+ color: #fff;
1467
  }
1468
 
1469
  .cn-sidebar.cn-theme-light .cn-checkbox-image-wrapper input:checked + img,
1470
  .cn-sidebar.cn-theme-light .cn-radio-image-wrapper input:checked + img {
1471
+ border-color: #fff;
1472
  }
1473
 
1474
  .cn-sidebar.cn-theme-light form .cn-checkbox-image-wrapper img,
1475
  .cn-sidebar.cn-theme-light form .cn-radio-image-wrapper img {
1476
+ border-color: rgba(255,255,255,0.2);
1477
  }
1478
 
1479
  .cn-sidebar.cn-theme-light form .cn-radio-wrapper label input:checked::before {
1480
+ background-color: #fff;
1481
  }
1482
 
1483
  .cn-sidebar.cn-theme-light form input::placeholder,
1484
  .cn-sidebar.cn-theme-light form select::placeholder {
1485
+ color: rgba(255,255,255,0.7);
1486
  }
1487
 
1488
  .cn-sidebar.cn-theme-light form input:focus,
1489
  .cn-sidebar.cn-theme-light form select:focus {
1490
+ border-color: #fff;
1491
  }
1492
 
1493
  .cn-sidebar.cn-theme-light form .cn-plan-overlay {
1494
+ border-color: rgba(255,255,255,0.5);
1495
  }
1496
 
1497
  .cn-sidebar.cn-theme-light form .cn-plan-wrapper input:checked + span .cn-plan-overlay {
1498
+ border-color: rgba(255,255,255,1);
1499
+ background-color: rgba(255,255,255,.2);
1500
  }
1501
 
1502
  .cn-sidebar.cn-theme-light .cn-form-container {
1503
  background: rgba(0,0,0,0.1);
1504
+ border: 1px solid rgba(255,255,255,.3);
1505
+ transition: all 0.2s;
1506
  }
1507
 
1508
  .cn-sidebar.cn-theme-light .cn-form-container.cn-collapsed {
1509
+ border-color: rgba(255,255,255,0);
1510
  }
1511
 
1512
  .cn-accordion .cn-accordion-item {
1513
+ overflow: hidden;
1514
+ border: 1px solid rgba(255,255,255,0.05);
1515
+ transition: border-color 0.2s;
1516
  }
1517
 
1518
  .cn-accordion .cn-accordion-item:focus {
1519
+ border-color: #20C19E;
1520
  }
1521
 
1522
  .cn-accordion .cn-accordion-item:not(:last-child) {
1523
+ margin-bottom: 0.5em;
1524
  }
1525
 
1526
  .cn-accordion .cn-accordion-item.cn-disabled {
1527
+ pointer-events: none;
1528
  }
1529
 
1530
  .cn-accordion .cn-accordion-item.cn-hidden {
1531
+ visibility: hidden;
1532
  }
1533
 
1534
  .cn-accordion .cn-accordion-item.cn-collapsed .cn-accordion-button {
1535
+ color: rgba(255,255,255,.7);
1536
  }
1537
 
1538
  .cn-accordion .cn-accordion-item.cn-collapsed .cn-accordion-button:hover {
1539
+ color: #fff;
1540
  }
1541
 
1542
  .cn-accordion .cn-accordion-button {
1543
+ text-align: left;
1544
+ font-size: 15px;
1545
+ font-style: normal;
1546
+ font-weight: bold;
1547
+ color: #fff;
1548
+ width: 100%;
1549
+ position: relative;
1550
+ border: none;
1551
+ outline: none;
1552
+ background: none;
1553
+ padding: 0;
1554
+ margin: 0;
1555
+ cursor: pointer;
1556
  }
1557
 
1558
  .cn-accordion .cn-accordion-button:hover {
1559
+ color: #fff;
1560
  }
1561
 
1562
  /*
1563
  .cn-accordion .cn-accordion-button:after {
1564
+ font-family: dashicons;
1565
+ line-height: 1;
1566
+ font-weight: 400;
1567
+ font-style: normal;
1568
+ text-transform: none;
1569
+ text-rendering: auto;
1570
+ font-size: 18px;
1571
+ text-align: center;
1572
+ display: block;
1573
+ content: "\f347";
1574
+ position: absolute;
1575
+ top: 50%;
1576
+ margin-top: -9px;
1577
+ right: 0;
1578
+ line-height: 1;
1579
+ pointer-events: none;
1580
+ color: #fff;
1581
+ transform: rotate(180deg);
1582
+ transition: all 0.3s ease-in-out;
1583
  }
1584
 
1585
  .cn-accordion .cn-collapsed .cn-accordion-button:after {
1586
+ transform: rotate(0);
1587
  }*/
1588
 
1589
  .cn-accordion .cn-accordion-collapse {
1590
  overflow-y: hidden;
1591
+ max-height: 1000px; /* approximate max height */
1592
 
1593
+ transition-property: all;
1594
+ transition-duration: .3s;
1595
+ transition-timing-function: ease-in-out;
1596
  }
1597
 
1598
  .cn-accordion .cn-accordion-collapse.cn-form {
1599
+ margin-bottom: 1.5em;
1600
  }
1601
 
1602
  .cn-accordion .cn-collapsed .cn-accordion-collapse {
1603
+ max-height: 0;
1604
+ margin-bottom: 0;
1605
  }
1606
 
1607
  #cn_card_number, #cn_expiration_date, #cn_cvv {
1608
+ background: transparent;
1609
+ border: 1px solid #86868F;
1610
+ border-radius: 3px;
1611
+ margin: 0;
1612
+ padding: 0 15px;
1613
+ color: #fff;
1614
+ transition: border-color 0.2s;
1615
+ height: 3em;
1616
+ box-shadow: none;
1617
  }
1618
 
1619
  #cn_card_number.braintree-hosted-fields-focused, #cn_expiration_date.braintree-hosted-fields-focused, #cn_cvv.braintree-hosted-fields-focused {
1620
+ border-color: #20C19E;
1621
+ background-color: transparent;
1622
+ box-shadow: none;
1623
  }
1624
 
1625
  #cn_card_number.braintree-hosted-fields-invalid, #cn_expiration_date.braintree-hosted-fields-invalid, #cn_cvv.braintree-hosted-fields-invalid {
1626
+ border-color: #DA2439;
1627
+ background-color: transparent;
1628
+ box-shadow: none;
1629
  }
1630
 
1631
  #cn_card_number.braintree-hosted-fields-valid {
1632
+ color: #fff;
1633
  }
1634
 
1635
  /* Loader */
1636
 
1637
  .cn-welcome-wrap .has-loader:before {
1638
+ display: block;
1639
+ content: '';
1640
+ background: rgba(255,255,255,0);
1641
+ transition: all 0.2s;
1642
+ position: absolute;
1643
+ width: 100%;
1644
+ height: 100%;
1645
+ z-index: -1;
1646
  }
1647
  .cn-welcome-wrap .has-loader.cn-loading:before {
1648
+ /* background: rgba(32,193,158,.2); */
1649
+ background: rgba(255,255,255,.2);
1650
+ z-index: 99;
1651
  }
1652
 
1653
  .cn-welcome-wrap .has-loader > .cn-spinner {
1654
+ position: absolute;
1655
+ top: 50%;
1656
+ left: 50%;
1657
+ width: 21px;
1658
+ height: 21px;
1659
+ z-index: 100;
1660
  }
1661
 
1662
  .cn-welcome-wrap .has-loader > .cn-spinner:after {
1663
+ border: 3px solid #20C19E;
1664
+ border-color: #20C19E transparent #20C19E transparent;
1665
+ width: 21px;
1666
+ height: 21px;
1667
+ border-radius: 50%;
1668
+ opacity: 0;
1669
+ transition: all 0.3s;
1670
  }
1671
 
1672
  .cn-welcome-wrap .has-loader.cn-loading > .cn-spinner {
1673
+ max-width: 21px;
1674
+ opacity: 1;
1675
  }
1676
 
1677
  .cn-welcome-wrap .has-loader.cn-loading > .cn-spinner:after {
1678
+ opacity: 1;
1679
  }
1680
 
1681
  /* Progressbar */
1682
 
1683
  .cn-welcome-wrap .cn-compliance-check {
1684
+ width: 100%;
1685
+ margin: 0 0 10px 0;
1686
  }
1687
 
1688
  .cn-welcome-wrap .cn-compliance-feedback {
1689
+ position: relative;
1690
+ margin-bottom: 1.5em;
1691
+ color: #fff;
1692
+ overflow-y: hidden;
1693
+ max-height: 500px; /* approximate max height */
1694
+ transition: all .3s cubic-bezier(0, 1, 0.5, 1);
1695
+ transition-delay: 0.3s;
1696
+ opacity: 1;
1697
  }
1698
 
1699
  .cn-welcome-wrap .cn-compliance-feedback p {
1700
+ padding: 15px;
1701
+ margin: 0;
1702
  }
1703
 
1704
  .cn-welcome-wrap .cn-compliance-feedback p.cn-error {
1705
+ border: 1px solid #da2439;
1706
+ border-radius: 3px;
1707
+ background: rgba( 218,36,57, 0.5);
1708
  }
1709
 
1710
  .cn-welcome-wrap .cn-compliance-feedback p.cn-error a {
1711
+ color: inherit;
1712
+ text-decoration: underline;
1713
  }
1714
 
1715
  .cn-welcome-wrap .cn-compliance-feedback p.cn-warning {
1716
+ border: 1px solid #e78d26;
1717
+ border-radius: 3px;
1718
+ background: rgba( 231,141,38, 0.5);
1719
  }
1720
 
1721
  .cn-welcome-wrap .cn-compliance-feedback p.cn-message {
1722
+ border: 1px solid #008000;
1723
+ border-radius: 3px;
1724
+ background: rgba( 0,128,0, 0.5);
1725
  }
1726
 
1727
  .cn-welcome-wrap .cn-compliance-feedback.cn-hidden {
1728
+ max-height: 0;
1729
+ margin-bottom: 0;
1730
+ opacity: 0;
1731
  }
1732
 
1733
  .cn-welcome-wrap .cn-compliance-feedback em {
1734
+ font-size: 15px;
1735
+ font-weight: bold;
1736
+ display: block;
1737
+ margin-bottom: 10px;
1738
+ color: inherit;
1739
  }
1740
 
1741
  .cn-welcome-wrap .cn-progressbar {
1742
+ height: 26px;
1743
+ margin: 0 0 20px;
1744
+ width: 100%;
1745
+ position: relative;
1746
  }
1747
 
1748
  .cn-welcome-wrap .cn-compliance-results .cn-compliance-item:not(:first-child) {
1749
+ margin-top: 10px;
1750
  }
1751
 
1752
  .cn-welcome-wrap .cn-compliance-results .cn-compliance-item p {
1753
+ display: flex;
1754
+ justify-content: space-between;
1755
+ margin: 0;
1756
  }
1757
 
1758
  .cn-welcome-wrap .cn-compliance-results .cn-compliance-item p:first-child {
1759
+ font-size: 15px;
1760
+ color: #fff;
1761
  }
1762
 
1763
+ .cn-welcome-wrap .cn-compliance-results .cn-compliance-item p:last-child {
1764
  }
1765
 
1766
  .cn-welcome-wrap .cn-compliance-results .cn-compliance-label {
1767
  }
1768
 
1769
  .cn-welcome-wrap .cn-compliance-info {
1770
+ font-size: 15px;
1771
+ line-height: inherit;
1772
+ opacity: 0.5;
1773
+ cursor: pointer;
1774
  }
1775
 
1776
  .cn-welcome-wrap .cn-compliance-results .cn-compliance-status.cn-failed {
1777
+ color: red;
1778
  }
1779
 
1780
  .cn-welcome-wrap .cn-compliance-results .cn-compliance-status.cn-passed {
1781
+ color: #20C19E;
1782
  }
1783
 
1784
  .cn-welcome-wrap .cn-progress-label {
1785
  position: absolute;
1786
  left: 50%;
1787
+ transform: translateX(-50%);
1788
+ font-size: 14px;
1789
+ font-weight: bold;
1790
  top: 3px;
1791
  color: #fff;
1792
  }
1793
 
1794
  .cn-welcome-wrap .ui-progressbar {
1795
+ background: rgba(255,255,255,0.1);
1796
+ border-radius: 3px;
1797
  }
1798
 
1799
  .cn-welcome-wrap .ui-progressbar .ui-progressbar-value {
1800
+ background: #20C19E;
1801
+ height: 100%;
1802
+ border: 0 none;
1803
+ border-radius: 3px;
1804
+ margin: 3px 0;
1805
+ color: #fff;
1806
+ text-align: center;
1807
+ float: left;
1808
+ height: 20px;
1809
+ line-height: 20px;
1810
+ font-size: 20px;
1811
+ width: 0;
1812
+ min-width: 0;
1813
+ -webkit-transition: width .5s ease;
1814
+ -o-transition: width .5s ease;
1815
+ transition: width .5s ease;
1816
  }
1817
 
1818
  /* Modaal */
1819
 
1820
  .cn-modal .modaal-content-container {
1821
+ padding: 0;
1822
  }
1823
 
1824
  .cn-modal .modaal-inner-wrapper {
1825
+ padding: 30px 30px 0;
1826
  }
1827
 
1828
  .modaal-overlay {
1829
+ z-index: 9998 !important;
1830
  }
1831
 
1832
  .cn-included,
1833
  .cn-excluded {
1834
+ position: relative;
1835
  }
1836
 
1837
  .cn-included .cn-icon,
1838
  .cn-excluded .cn-icon {
1839
+ box-sizing: border-box;
1840
  position: absolute;
1841
+ left: 0;
1842
  display: block;
1843
  transform: scale(1);
1844
  width: 22px;
1845
  height: 22px;
1846
  border: 2px solid;
1847
  }
1848
+
1849
  .cn-included .cn-icon {
1850
  border-radius: 100px;
1851
+ color: #20C19E;
1852
  }
1853
 
1854
  .cn-included b {
1855
+ color: #20C19E;
1856
  }
1857
 
1858
  .cn-included .cn-icon::after {
1873
 
1874
  .cn-excluded .cn-icon {
1875
  border-radius: 40px;
1876
+ color: #FF0000;
1877
  }
1878
 
1879
  .cn-excluded b {
1880
+ color: #FF0000;
1881
  }
1882
 
1883
  .cn-excluded .cn-icon::after,
css/admin.css CHANGED
@@ -1,63 +1,63 @@
1
  /* Cookie Notice settings */
2
- .cookie-notice-credits {
3
  float: right;
4
  width: 280px;
5
- background: #fff;
6
  margin: 20px -300px 20px 20px;
7
  position: relative;
8
- box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.05);
9
  }
10
 
11
- .cookie-notice-credits .inner {
12
  padding: 1.33em;
13
  }
14
 
15
- .cookie-notice-credits .inner img {
16
- max-width: 80%;
17
- height: auto;
18
- display: block;
19
- margin: 20px auto;
20
  }
21
 
22
- .cookie-notice-settings .cookie-notice-credits h2 {
23
- border: none;
24
- padding-bottom: 0;
 
 
 
 
 
 
 
25
  }
26
 
27
  .cookie-notice-credits .inner {
28
- text-align: center;
29
- margin-bottom: 10px;
30
- }
31
-
32
- .cookie-notice-credits .cn-btn {
33
- border-radius: 3em;
34
- padding: 0.75em 2.5em;
35
- box-shadow: none;
36
- border: 2px solid #20C19E;
37
- outline: none;
38
- background: #20C19E;
39
- font-size: 15px;
40
- font-weight: bold;
41
- color: #fff;
42
- cursor: pointer;
43
- display: inline-block;
44
- text-decoration: none;
45
- }
46
-
47
- .cookie-notice-credits .cn-btn:hover,
48
- .cookie-notice-credits .cn-btn:focus {
49
- box-shadow: none;
50
- border: 2px solid #20C19E;
51
- background: #20C19E;
52
- color: #fff;
53
- text-decoration: none !important;
54
  }
55
 
56
  .cookie-notice-credits h3 {
57
  font-size: 14px;
58
  line-height: 1.4;
59
  margin: 0;
60
- padding: 0.66em 1.33em;;
 
61
  border-bottom: 1px solid #eee;
62
  }
63
 
@@ -82,18 +82,18 @@
82
  height: 0;
83
  }
84
 
85
- .cookie-notice-settings h2 {
86
- margin: 1.5em 0;
87
- padding-bottom: 1em;
88
- border-bottom: 1px solid #ccc;
89
- }
90
-
91
  .cookie-notice-settings form {
92
  float: left;
93
  min-width: 463px;
94
  width: 100%;
95
  }
96
 
 
 
 
 
 
 
97
  .cookie-notice-settings .ui-button {
98
  margin-bottom: 5px;
99
  }
@@ -104,7 +104,7 @@
104
  }
105
 
106
  .cookie-notice-settings .description strong {
107
- color: #444;
108
  }
109
 
110
  #cn_colors label {
@@ -117,81 +117,81 @@
117
  }
118
 
119
  #cn_refuse_code .nav-tab-wrapper {
120
- padding-top: 0;
121
  }
122
 
123
  #cn_refuse_code .refuse-code-tab {
124
- display: none;
125
  }
126
 
127
  #cn_refuse_code .refuse-code-tab.active {
128
- display: block;
129
  }
130
 
131
  #cn_refuse_code .refuse-code-tab .description {
132
- margin-top: 10px;
133
  }
134
 
135
  .cn_compliance_status {
136
- margin-right: 15px;
137
  }
138
 
139
  #cn_app_status .cn_compliance_status label {
140
- margin-left: 5px !important;
141
  }
142
 
143
  #cn_app_status {
144
- margin-bottom: 30px;
145
  }
146
 
147
  #cn_app_status label {
148
- text-transform: uppercase;
149
- font-weight: bold;
150
- position: relative;
151
- color: #999;
152
  }
153
 
154
  #cn_app_status label.cn-active {
155
- color: green;
156
  }
157
 
158
  #cn_app_status label.cn-active:before {
159
- background-color: green;
160
- box-shadow: 0 0 0 2px green;
161
  }
162
 
163
  #cn_app_status label.cn-inactive {
164
- color: red;
165
  }
166
 
167
  #cn_app_status label.cn-inactive:before {
168
- background-color: red;
169
- box-shadow: 0 0 0 2px red;
170
  }
171
 
172
  #cn_app_status label:before{
173
- background-color: #999;
174
- width: 10px;
175
- height: 10px;
176
- border-radius: 10px;
177
- content: '';
178
- display: inline-block;
179
- vertical-align: middle;
180
- margin-right: 10px;
181
- box-shadow: 0 0 0 2px #999;
182
- border: 2px solid #fff;
183
- position: relative;
184
- top: -2px;
185
  }
186
 
187
  #cn_colors_bar_opacity_range {
188
- vertical-align: middle;
189
- margin-right: 10px;
190
  }
191
 
192
  /* All Mobile Sizes (devices and browser) */
193
  @media only screen and (max-width: 959px) {
194
- .cookie-notice-credits {
195
  width: 100%;
196
  float: none;
197
  margin: 20px 0;
1
  /* Cookie Notice settings */
2
+ .cookie-notice-sidebar {
3
  float: right;
4
  width: 280px;
 
5
  margin: 20px -300px 20px 20px;
6
  position: relative;
 
7
  }
8
 
9
+ .cookie-notice-sidebar .inner {
10
  padding: 1.33em;
11
  }
12
 
13
+ .cookie-notice-sidebar > div:not(:last-child) {
14
+ margin-bottom: 3em;
 
 
 
15
  }
16
 
17
+ .cookie-notice-sidebar .inner img {
18
+ max-width: 80%;
19
+ height: auto;
20
+ display: block;
21
+ margin: 20px auto;
22
+ }
23
+
24
+ .cookie-notice-credits {
25
+ background: #fff;
26
+ box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.05);
27
  }
28
 
29
  .cookie-notice-credits .inner {
30
+ text-align: center;
31
+ margin: 0;
32
+ }
33
+
34
+ .button.cn-button {
35
+ background-color: #20c19e;
36
+ border-color: #20c19e;
37
+ }
38
+
39
+ .button.cn-button:hover,
40
+ .button.cn-button:active,
41
+ .button.cn-button:focus {
42
+ background-color: #1ca98a;
43
+ border-color: #1ca98a;
44
+ }
45
+
46
+ .button.cn-button:focus {
47
+ box-shadow: 0 0 0 1px #fff, 0 0 0 3px #20c19e;
48
+ }
49
+
50
+ .cookie-notice-settings .cookie-notice-credits h2 {
51
+ border: none;
52
+ padding-bottom: 0;
 
 
 
53
  }
54
 
55
  .cookie-notice-credits h3 {
56
  font-size: 14px;
57
  line-height: 1.4;
58
  margin: 0;
59
+ padding: 0.66em 1.33em;
60
+ ;
61
  border-bottom: 1px solid #eee;
62
  }
63
 
82
  height: 0;
83
  }
84
 
 
 
 
 
 
 
85
  .cookie-notice-settings form {
86
  float: left;
87
  min-width: 463px;
88
  width: 100%;
89
  }
90
 
91
+ .cookie-notice-settings form h2 {
92
+ margin: 1.5em 0;
93
+ padding-bottom: 1em;
94
+ border-bottom: 1px solid #ccc;
95
+ }
96
+
97
  .cookie-notice-settings .ui-button {
98
  margin-bottom: 5px;
99
  }
104
  }
105
 
106
  .cookie-notice-settings .description strong {
107
+ color: #444;
108
  }
109
 
110
  #cn_colors label {
117
  }
118
 
119
  #cn_refuse_code .nav-tab-wrapper {
120
+ padding-top: 0;
121
  }
122
 
123
  #cn_refuse_code .refuse-code-tab {
124
+ display: none;
125
  }
126
 
127
  #cn_refuse_code .refuse-code-tab.active {
128
+ display: block;
129
  }
130
 
131
  #cn_refuse_code .refuse-code-tab .description {
132
+ margin-top: 10px;
133
  }
134
 
135
  .cn_compliance_status {
136
+ margin-right: 15px;
137
  }
138
 
139
  #cn_app_status .cn_compliance_status label {
140
+ margin-left: 5px !important;
141
  }
142
 
143
  #cn_app_status {
144
+ margin-bottom: 30px;
145
  }
146
 
147
  #cn_app_status label {
148
+ text-transform: uppercase;
149
+ font-weight: bold;
150
+ position: relative;
151
+ color: #999;
152
  }
153
 
154
  #cn_app_status label.cn-active {
155
+ color: #1ca98a;
156
  }
157
 
158
  #cn_app_status label.cn-active:before {
159
+ background-color: #1ca98a;
160
+ box-shadow: 0 0 0 2px #1ca98a;
161
  }
162
 
163
  #cn_app_status label.cn-inactive {
164
+ color: red;
165
  }
166
 
167
  #cn_app_status label.cn-inactive:before {
168
+ background-color: red;
169
+ box-shadow: 0 0 0 2px red;
170
  }
171
 
172
  #cn_app_status label:before{
173
+ background-color: #999;
174
+ width: 10px;
175
+ height: 10px;
176
+ border-radius: 10px;
177
+ content: '';
178
+ display: inline-block;
179
+ vertical-align: middle;
180
+ margin-right: 10px;
181
+ box-shadow: 0 0 0 2px #999;
182
+ border: 2px solid #fff;
183
+ position: relative;
184
+ top: -2px;
185
  }
186
 
187
  #cn_colors_bar_opacity_range {
188
+ vertical-align: middle;
189
+ margin-right: 10px;
190
  }
191
 
192
  /* All Mobile Sizes (devices and browser) */
193
  @media only screen and (max-width: 959px) {
194
+ .cookie-notice-sidebar {
195
  width: 100%;
196
  float: none;
197
  margin: 20px 0;
css/admin.min.css CHANGED
@@ -1 +1 @@
1
- .cookie-notice-credits{float:right;width:280px;background:#fff;margin:20px -300px 20px 20px;position:relative;box-shadow:0 0 0 1px rgba(0,0,0,.05)}.cookie-notice-credits .inner{padding:1.33em}.cookie-notice-credits .inner img{max-width:80%;height:auto;display:block;margin:20px auto}.cookie-notice-settings .cookie-notice-credits h2{border:none;padding-bottom:0}.cookie-notice-credits .inner{text-align:center;margin-bottom:10px}.cookie-notice-credits .cn-btn{border-radius:3em;padding:.75em 2.5em;box-shadow:none;border:2px solid #20C19E;outline:none;background:#20C19E;font-size:15px;font-weight:700;color:#fff;cursor:pointer;display:inline-block;text-decoration:none}.cookie-notice-credits .cn-btn:hover,.cookie-notice-credits .cn-btn:focus{box-shadow:none;border:2px solid #20C19E;background:#20C19E;color:#fff;text-decoration:none!important}.cookie-notice-credits h3{font-size:14px;line-height:1.4;margin:0;padding:.66em 1.33em;;border-bottom:1px solid #eee}.cookie-notice-settings .df-credits form{min-width:260px;margin-bottom:1em}.cookie-notice-settings .df-credits form input{margin:0;padding:0}.cookie-notice-settings{margin-right:300px}.cookie-notice-settings hr,.df-credits hr{border:solid #eee;border-width:1px 0 0;clear:both;height:0}.cookie-notice-settings h2{margin:1.5em 0;padding-bottom:1em;border-bottom:1px solid #ccc}.cookie-notice-settings form{float:left;min-width:463px;width:100%}.cookie-notice-settings .ui-button{margin-bottom:5px}.cookie-notice-settings .description{font-size:13px;margin-bottom:8px}.cookie-notice-settings .description strong{color:#444}#cn_colors label{min-width:10em;display:inline-block}#cn_colors div{vertical-align:middle}#cn_refuse_code .nav-tab-wrapper{padding-top:0}#cn_refuse_code .refuse-code-tab{display:none}#cn_refuse_code .refuse-code-tab.active{display:block}#cn_refuse_code .refuse-code-tab .description{margin-top:10px}.cn_compliance_status{margin-right:15px}#cn_app_status .cn_compliance_status label{margin-left:5px!important}#cn_app_status{margin-bottom:30px}#cn_app_status label{text-transform:uppercase;font-weight:700;position:relative;color:#999}#cn_app_status label.cn-active{color:green}#cn_app_status label.cn-active:before{background-color:green;box-shadow:0 0 0 2px green}#cn_app_status label.cn-inactive{color:red}#cn_app_status label.cn-inactive:before{background-color:red;box-shadow:0 0 0 2px red}#cn_app_status label:before{background-color:#999;width:10px;height:10px;border-radius:10px;content:'';display:inline-block;vertical-align:middle;margin-right:10px;box-shadow:0 0 0 2px #999;border:2px solid #fff;position:relative;top:-2px}#cn_colors_bar_opacity_range{vertical-align:middle;margin-right:10px}@media only screen and (max-width:959px){.cookie-notice-credits{width:100%;float:none;margin:20px 0}.cookie-notice-settings{margin-right:0}}
1
+ .cookie-notice-sidebar{float:right;width:280px;margin:20px -300px 20px 20px;position:relative}.cookie-notice-sidebar .inner{padding:1.33em}.cookie-notice-sidebar>div:not(:last-child){margin-bottom:3em}.cookie-notice-sidebar .inner img{max-width:80%;height:auto;display:block;margin:20px auto}.cookie-notice-credits{background:#fff;box-shadow:0 0 0 1px rgba(0,0,0,.05)}.cookie-notice-credits .inner{text-align:center;margin:0}.button.cn-button{background-color:#20c19e;border-color:#20c19e}.button.cn-button:active,.button.cn-button:focus,.button.cn-button:hover{background-color:#1ca98a;border-color:#1ca98a}.button.cn-button:focus{box-shadow:0 0 0 1px #fff,0 0 0 3px #20c19e}.cookie-notice-settings .cookie-notice-credits h2{border:none;padding-bottom:0}.cookie-notice-credits h3{font-size:14px;line-height:1.4;margin:0;padding:.66em 1.33em;border-bottom:1px solid #eee}.cookie-notice-settings .df-credits form{min-width:260px;margin-bottom:1em}.cookie-notice-settings .df-credits form input{margin:0;padding:0}.cookie-notice-settings{margin-right:300px}.cookie-notice-settings hr,.df-credits hr{border:solid #eee;border-width:1px 0 0;clear:both;height:0}.cookie-notice-settings form{float:left;min-width:463px;width:100%}.cookie-notice-settings form h2{margin:1.5em 0;padding-bottom:1em;border-bottom:1px solid #ccc}.cookie-notice-settings .ui-button{margin-bottom:5px}.cookie-notice-settings .description{font-size:13px;margin-bottom:8px}.cookie-notice-settings .description strong{color:#444}#cn_colors label{min-width:10em;display:inline-block}#cn_colors div{vertical-align:middle}#cn_refuse_code .nav-tab-wrapper{padding-top:0}#cn_refuse_code .refuse-code-tab{display:none}#cn_refuse_code .refuse-code-tab.active{display:block}#cn_refuse_code .refuse-code-tab .description{margin-top:10px}.cn_compliance_status{margin-right:15px}#cn_app_status .cn_compliance_status label{margin-left:5px!important}#cn_app_status{margin-bottom:30px}#cn_app_status label{text-transform:uppercase;font-weight:700;position:relative;color:#999}#cn_app_status label.cn-active{color:#1ca98a}#cn_app_status label.cn-active:before{background-color:#1ca98a;box-shadow:0 0 0 2px #1ca98a}#cn_app_status label.cn-inactive{color:red}#cn_app_status label.cn-inactive:before{background-color:red;box-shadow:0 0 0 2px red}#cn_app_status label:before{background-color:#999;width:10px;height:10px;border-radius:10px;content:'';display:inline-block;vertical-align:middle;margin-right:10px;box-shadow:0 0 0 2px #999;border:2px solid #fff;position:relative;top:-2px}#cn_colors_bar_opacity_range{vertical-align:middle;margin-right:10px}.cn-toggle-container .cn-toggle-item{font-size:14px;display:block;margin-bottom:20px;cursor:default}.cn-toggle-container .cn-toggle-item input{display:none}.cn-toggle-container .cn-toggle-item span{display:block}.cn-toggle-container .cn-toggle-item .cn-toggle-heading{color:#2271b1;transition-property:border,background,color;transition-duration:.05s;transition-timing-function:ease-in-out;text-decoration:underline;font-weight:600;cursor:pointer}.cn-toggle-container .cn-toggle-item .cn-toggle-body{overflow:hidden;transition:max-height .3s;max-height:0;margin-top:10px;cursor:default;pointer-events:none}.cn-toggle-container .cn-toggle-item input:checked~.cn-toggle-body{max-height:100vh}@media only screen and (max-width:959px){.cookie-notice-sidebar{width:100%;float:none;margin:20px 0}.cookie-notice-settings{margin-right:0}}
css/front.css CHANGED
@@ -79,6 +79,7 @@
79
  opacity: 0.5;
80
  padding: 10px;
81
  outline: none;
 
82
  }
83
 
84
  .cn-close-icon:hover {
79
  opacity: 0.5;
80
  padding: 10px;
81
  outline: none;
82
+ cursor: pointer;
83
  }
84
 
85
  .cn-close-icon:hover {
css/front.min.css CHANGED
@@ -1 +1 @@
1
- #cookie-notice{position:fixed;min-width:100%;height:auto;z-index:100000;font-size:13px;letter-spacing:0;line-height:20px;left:0;text-align:center;font-weight:400;font-family:-apple-system,BlinkMacSystemFont,Arial,Roboto,"Helvetica Neue",sans-serif}#cookie-notice,#cookie-notice *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#cookie-notice.cn-animated{-webkit-animation-duration:.5s!important;animation-duration:.5s!important;-webkit-animation-fill-mode:both;animation-fill-mode:both}#cookie-notice.cn-animated.cn-effect-none{-webkit-animation-duration:1ms!important;animation-duration:1ms!important}#cookie-notice .cookie-notice-container{display:block}#cookie-notice.cookie-notice-hidden .cookie-notice-container{display:none}#cookie-notice .cookie-revoke-container{display:block}#cookie-notice.cookie-revoke-hidden .cookie-revoke-container{display:none}.cn-position-top{top:0}.cn-position-bottom{bottom:0}.cookie-notice-container{padding:15px 30px;text-align:center;width:100%;z-index:2}.cookie-revoke-container{padding:15px 30px;width:100%;z-index:1}.cn-close-icon{position:absolute;right:15px;top:50%;margin-top:-10px;width:15px;height:15px;opacity:.5;padding:10px;outline:0}.cn-close-icon:hover{opacity:1}.cn-close-icon:after,.cn-close-icon:before{position:absolute;content:' ';height:15px;width:2px;top:3px;background-color:grey}.cn-close-icon:before{transform:rotate(45deg)}.cn-close-icon:after{transform:rotate(-45deg)}#cookie-notice .cn-revoke-cookie{margin:0}#cookie-notice .cn-button{margin:0 0 0 10px}#cookie-notice .cn-button:not(.cn-button-custom){font-family:-apple-system,BlinkMacSystemFont,Arial,Roboto,"Helvetica Neue",sans-serif;font-weight:400;font-size:13px;letter-spacing:.25px;line-height:20px;margin:0 0 0 10px;text-align:center;text-transform:none;display:inline-block;cursor:pointer;touch-action:manipulation;white-space:nowrap;outline:0;box-shadow:none;text-shadow:none;border:none;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;text-decoration:none;padding:8.5px 10px;line-height:1;color:inherit}.cn-text-container{margin:0 0 6px 0}.cn-buttons-container,.cn-text-container{display:inline-block}#cookie-notice.cookie-notice-visible.cn-effect-none,#cookie-notice.cookie-revoke-visible.cn-effect-none{-webkit-animation-name:fadeIn;animation-name:fadeIn}#cookie-notice.cn-effect-none{-webkit-animation-name:fadeOut;animation-name:fadeOut}#cookie-notice.cookie-notice-visible.cn-effect-fade,#cookie-notice.cookie-revoke-visible.cn-effect-fade{-webkit-animation-name:fadeIn;animation-name:fadeIn}#cookie-notice.cn-effect-fade{-webkit-animation-name:fadeOut;animation-name:fadeOut}#cookie-notice.cookie-notice-visible.cn-effect-slide,#cookie-notice.cookie-revoke-visible.cn-effect-slide{-webkit-animation-name:slideInUp;animation-name:slideInUp}#cookie-notice.cn-effect-slide{-webkit-animation-name:slideOutDown;animation-name:slideOutDown}#cookie-notice.cookie-notice-visible.cn-position-top.cn-effect-slide,#cookie-notice.cookie-revoke-visible.cn-position-top.cn-effect-slide{-webkit-animation-name:slideInDown;animation-name:slideInDown}#cookie-notice.cn-position-top.cn-effect-slide{-webkit-animation-name:slideOutUp;animation-name:slideOutUp}@-webkit-keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}@-webkit-keyframes fadeOut{from{opacity:1}to{opacity:0}}@keyframes fadeOut{from{opacity:1}to{opacity:0}}@-webkit-keyframes slideInUp{from{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInUp{from{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@-webkit-keyframes slideOutDown{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes slideOutDown{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@-webkit-keyframes slideInDown{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInDown{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@-webkit-keyframes slideOutUp{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes slideOutUp{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@media all and (max-width:900px){.cookie-notice-container #cn-notice-text{display:block}.cookie-notice-container #cn-notice-buttons{display:block}#cookie-notice .cn-button{margin:0 5px 5px 5px}}@media all and (max-width:480px){.cookie-notice-container,.cookie-revoke-container{padding:15px 25px}}
1
+ #cookie-notice{position:fixed;min-width:100%;height:auto;z-index:100000;font-size:13px;letter-spacing:0;line-height:20px;left:0;text-align:center;font-weight:400;font-family:-apple-system,BlinkMacSystemFont,Arial,Roboto,"Helvetica Neue",sans-serif}#cookie-notice,#cookie-notice *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#cookie-notice.cn-animated{-webkit-animation-duration:0.5s!important;animation-duration:0.5s!important;-webkit-animation-fill-mode:both;animation-fill-mode:both}#cookie-notice.cn-animated.cn-effect-none{-webkit-animation-duration:0.001s!important;animation-duration:0.001s!important}#cookie-notice .cookie-notice-container{display:block}#cookie-notice.cookie-notice-hidden .cookie-notice-container{display:none}#cookie-notice .cookie-revoke-container{display:block}#cookie-notice.cookie-revoke-hidden .cookie-revoke-container{display:none}.cn-position-top{top:0}.cn-position-bottom{bottom:0}.cookie-notice-container{padding:15px 30px;text-align:center;width:100%;z-index:2}.cookie-revoke-container{padding:15px 30px;width:100%;z-index:1}.cn-close-icon{position:absolute;right:15px;top:50%;margin-top:-10px;width:15px;height:15px;opacity:.5;padding:10px;outline:none;cursor:pointer}.cn-close-icon:hover{opacity:1}.cn-close-icon:before,.cn-close-icon:after{position:absolute;content:' ';height:15px;width:2px;top:3px;background-color:rgba(128,128,128,1)}.cn-close-icon:before{transform:rotate(45deg)}.cn-close-icon:after{transform:rotate(-45deg)}#cookie-notice .cn-revoke-cookie{margin:0}#cookie-notice .cn-button{margin:0 0 0 10px}#cookie-notice .cn-button:not(.cn-button-custom){font-family:-apple-system,BlinkMacSystemFont,Arial,Roboto,"Helvetica Neue",sans-serif;font-weight:400;font-size:13px;letter-spacing:.25px;line-height:20px;margin:0 0 0 10px;text-align:center;text-transform:none;display:inline-block;cursor:pointer;touch-action:manipulation;white-space:nowrap;outline:none;box-shadow:none;text-shadow:none;border:none;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;text-decoration:none;padding:8.5px 10px;line-height:1;color:inherit}.cn-text-container{margin:0 0 6px 0}.cn-text-container,.cn-buttons-container{display:inline-block}#cookie-notice.cookie-notice-visible.cn-effect-none,#cookie-notice.cookie-revoke-visible.cn-effect-none{-webkit-animation-name:fadeIn;animation-name:fadeIn}#cookie-notice.cn-effect-none{-webkit-animation-name:fadeOut;animation-name:fadeOut}#cookie-notice.cookie-notice-visible.cn-effect-fade,#cookie-notice.cookie-revoke-visible.cn-effect-fade{-webkit-animation-name:fadeIn;animation-name:fadeIn}#cookie-notice.cn-effect-fade{-webkit-animation-name:fadeOut;animation-name:fadeOut}#cookie-notice.cookie-notice-visible.cn-effect-slide,#cookie-notice.cookie-revoke-visible.cn-effect-slide{-webkit-animation-name:slideInUp;animation-name:slideInUp}#cookie-notice.cn-effect-slide{-webkit-animation-name:slideOutDown;animation-name:slideOutDown}#cookie-notice.cookie-notice-visible.cn-position-top.cn-effect-slide,#cookie-notice.cookie-revoke-visible.cn-position-top.cn-effect-slide{-webkit-animation-name:slideInDown;animation-name:slideInDown}#cookie-notice.cn-position-top.cn-effect-slide{-webkit-animation-name:slideOutUp;animation-name:slideOutUp}@-webkit-keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}@-webkit-keyframes fadeOut{from{opacity:1}to{opacity:0}}@keyframes fadeOut{from{opacity:1}to{opacity:0}}@-webkit-keyframes slideInUp{from{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInUp{from{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@-webkit-keyframes slideOutDown{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes slideOutDown{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@-webkit-keyframes slideInDown{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInDown{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@-webkit-keyframes slideOutUp{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes slideOutUp{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@media all and (max-width:900px){.cookie-notice-container #cn-notice-text{display:block}.cookie-notice-container #cn-notice-buttons{display:block}#cookie-notice .cn-button{margin:0 5px 5px 5px}}@media all and (max-width:480px){.cookie-notice-container,.cookie-revoke-container{padding:15px 25px}}
img/cookie-compliance-widget.png ADDED
Binary file
includes/dashboard.php ADDED
@@ -0,0 +1,439 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // exit if accessed directly
4
+ if ( ! defined( 'ABSPATH' ) )
5
+ exit;
6
+
7
+ /**
8
+ * Cookie_Notice_Dashboard class.
9
+ *
10
+ * @class Cookie_Notice_Dashboard
11
+ */
12
+ class Cookie_Notice_Dashboard {
13
+
14
+ /**
15
+ * Class constructor.
16
+ *
17
+ * @return void
18
+ */
19
+ public function __construct() {
20
+ // actions
21
+ add_action( 'wp_dashboard_setup', [ $this, 'wp_dashboard_setup' ], 11 );
22
+ add_action( 'admin_enqueue_scripts', [ $this, 'admin_scripts_styles' ] );
23
+ }
24
+
25
+ /**
26
+ * Initialize widget.
27
+ *
28
+ * @return void
29
+ */
30
+ public function wp_dashboard_setup() {
31
+ // filter user_can_see_stats
32
+ if ( ! current_user_can( apply_filters( 'cn_manage_cookie_notice_cap', 'manage_options' ) ) )
33
+ return;
34
+
35
+ global $wp_meta_boxes;
36
+
37
+ $widget_key = 'cn_dashboard_stats';
38
+
39
+ // add dashboard chart widget
40
+ wp_add_dashboard_widget( $widget_key, __( 'Cookie Compliance', 'cookie-notice' ), [ $this, 'dashboard_widget' ] );
41
+
42
+ // attempt to place the widget at the top
43
+ $normal_dashboard = $wp_meta_boxes['dashboard']['normal']['core'];
44
+
45
+ $widget_instance = array( $widget_key => $normal_dashboard[ $widget_key ] );
46
+ unset( $normal_dashboard[ $widget_key ] );
47
+ $sorted_dashboard = array_merge( $widget_instance, $normal_dashboard );
48
+
49
+ $wp_meta_boxes['dashboard']['normal']['core'] = $sorted_dashboard;
50
+ }
51
+
52
+ /**
53
+ * Enqueue admin scripts and styles.
54
+ *
55
+ * @param string $pagenow
56
+ * @return void
57
+ */
58
+ public function admin_scripts_styles( $pagenow ) {
59
+ if ( $pagenow !== 'index.php' )
60
+ return;
61
+
62
+ // filter user_can_see_stats
63
+ if ( ! current_user_can( apply_filters( 'cn_manage_cookie_notice_cap', 'manage_options' ) ) )
64
+ return;
65
+
66
+ $analytics = get_option( 'cookie_notice_app_analytics' );
67
+ $date_format = get_option( 'date_format' );
68
+
69
+ // styles
70
+ wp_enqueue_style( 'cn-admin-dashboard', plugins_url( '../css/admin-dashboard.css', __FILE__ ), [], Cookie_Notice()->defaults['version'] );
71
+ wp_enqueue_style( 'cn-microtip', plugins_url( '../assets/microtip/microtip.min.css', __FILE__ ), [], Cookie_Notice()->defaults['version'] );
72
+
73
+ // scripts
74
+ wp_enqueue_script( 'cn-admin-chartjs', plugins_url( '../assets/chartjs/chart.min.js', __FILE__ ), [ 'jquery' ], Cookie_Notice()->defaults['version'], true );
75
+ wp_enqueue_script( 'cn-admin-dashboard', plugins_url( '../js/admin-dashboard.js', __FILE__ ), [ 'jquery', 'cn-admin-chartjs' ], Cookie_Notice()->defaults['version'], true );
76
+
77
+ // cycle usage data
78
+ $cycle_usage = array(
79
+ 'threshold' => ! empty( $analytics['cycleUsage']->threshold ) ? (int) $analytics['cycleUsage']->threshold : 0,
80
+ 'visits' => ! empty( $analytics['cycleUsage']->visits ) ? (int) $analytics['cycleUsage']->visits : 0,
81
+ 'days_to_go' => ! empty( $analytics['cycleUsage']->daysToGo ) ? (int) $analytics['cycleUsage']->daysToGo : 0,
82
+ 'start_date' => ! empty( $analytics['cycleUsage']->startDate ) ? date_i18n( $date_format, strtotime( $analytics['cycleUsage']->startDate ) ) : '',
83
+ 'end_date' => ! empty( $analytics['cycleUsage']->endDate ) ? date_i18n( $date_format, strtotime( $analytics['cycleUsage']->endDate ) ) : ''
84
+ );
85
+
86
+ // available visits, -1 for no pro plans
87
+ $cycle_usage['visits_available'] = $cycle_usage['threshold'] ? $cycle_usage['threshold'] - $cycle_usage['visits'] : -1;
88
+ $cycle_usage['threshold_used'] = $cycle_usage['threshold'] ? ( $cycle_usage['visits'] / $cycle_usage['threshold'] ) * 100 : 0;
89
+ $cycle_usage['threshold_used'] = $cycle_usage['threshold_used'] > 100 ? 100 : $cycle_usage['threshold_used'];
90
+
91
+ $chartdata = [
92
+ 'usage' => array(
93
+ 'type' => 'doughnut',
94
+ 'data' => array(
95
+ 'labels' => array(
96
+ __( 'Used', 'cookie-notice' ),
97
+ __( 'Free', 'cookie-notice' ),
98
+ ),
99
+ 'datasets' => array(
100
+ array(
101
+ 'data' => array( $cycle_usage['visits'], $cycle_usage['visits_available'] ),
102
+ // 'borderColor' => 'rgb(255, 255, 255)',
103
+ 'backgroundColor' => array(
104
+ 'rgb(32, 193, 158)',
105
+ 'rgb(235, 233, 235)'
106
+ )
107
+ )
108
+ )
109
+ )
110
+ ),
111
+ 'consent-activity' => array(
112
+ 'type' => 'line'
113
+ )
114
+ ];
115
+
116
+ // warning usage color
117
+ if ( $cycle_usage['threshold_used'] > 80 && $cycle_usage['threshold_used'] < 100 ) {
118
+ $chartdata['usage']['data']['datasets'][0]['backgroundColor'][0] = 'rgb(255, 193, 7)';
119
+ // danger usage color
120
+ } elseif ( $cycle_usage['threshold_used'] == 100 ) {
121
+ $chartdata['usage']['data']['datasets'][0]['backgroundColor'][0] = 'rgb(220, 53, 69)';
122
+ }
123
+
124
+ // echo '<pre>'; print_r( $analytics ); echo '</pre>'; exit;
125
+
126
+ if ( $analytics['consentActivities'] && is_array( $analytics['consentActivities'] ) ) {
127
+
128
+ $data = array(
129
+ );
130
+
131
+ // set default color;
132
+ $color = [
133
+ 'r' => 32,
134
+ 'g' => 193,
135
+ 'b' => 158
136
+ ];
137
+
138
+ $data = [
139
+ 'labels' => [],
140
+ 'datasets' => [
141
+ 0 => array(
142
+ 'label' => sprintf( __( 'Level %s', 'cookie-notice' ), 1 ),
143
+ 'data' => array(),
144
+ 'fill' => true,
145
+ 'backgroundColor' => 'rgba(196, 196, 196, 0.3)',
146
+ 'borderColor' => 'rgba(196, 196, 196, 1)',
147
+ 'borderWidth' => 1.2,
148
+ 'borderDash' => [],
149
+ 'pointBorderColor' => 'rgba(196, 196, 196, 1)',
150
+ 'pointBackgroundColor' => 'rgba(255, 255, 255, 1)',
151
+ 'pointBorderWidth' => 1.2
152
+ ),
153
+ 1 => array(
154
+ 'label' => sprintf( __( 'Level %s', 'cookie-notice' ), 2 ),
155
+ 'data' => array(),
156
+ 'fill' => true,
157
+ 'backgroundColor' => 'rgba(213, 181, 101, 0.3)',
158
+ 'borderColor' => 'rgba(213, 181, 101, 1)',
159
+ 'borderWidth' => 1.2,
160
+ 'borderDash' => [],
161
+ 'pointBorderColor' => 'rgba(213, 181, 101, 1)',
162
+ 'pointBackgroundColor' => 'rgba(255, 255, 255, 1)',
163
+ 'pointBorderWidth' => 1.2
164
+ ),
165
+ 2 => array(
166
+ 'label' => sprintf( __( 'Level %s', 'cookie-notice' ), 3 ),
167
+ 'data' => array(),
168
+ 'fill' => true,
169
+ 'backgroundColor' => 'rgba(152, 145, 177, 0.3)',
170
+ 'borderColor' => 'rgba(152, 145, 177, 1)',
171
+ 'borderWidth' => 1.2,
172
+ 'borderDash' => [],
173
+ 'pointBorderColor' => 'rgba(152, 145, 177, 1)',
174
+ 'pointBackgroundColor' => 'rgba(255, 255, 255, 1)',
175
+ 'pointBorderWidth' => 1.2
176
+ ),
177
+ ]
178
+ ];
179
+
180
+ // generate chart days
181
+ $chart_date_format = 'j/m';
182
+
183
+ for( $i = 30; $i > 0; $i-- ) {
184
+ $data['labels'][] = date( $chart_date_format , strtotime( '-'. $i .' days' ) );
185
+
186
+ $data['datasets'][0]['data'][] = 0;
187
+ $data['datasets'][1]['data'][] = 0;
188
+ $data['datasets'][2]['data'][] = 0;
189
+ }
190
+
191
+ // set consent records in charts days
192
+ foreach ( $analytics['consentActivities'] as $index => $entry ) {
193
+ $time = date_i18n( $chart_date_format, strtotime( $entry->eventdt ) );
194
+ $records = $entry->totalrecd;
195
+ $level = $entry->consentlevel;
196
+
197
+ $i = array_search( $time, $data['labels'] );
198
+
199
+ if ( $i )
200
+ $data['datasets'][$level - 1]['data'][$i] = $records;
201
+ }
202
+
203
+ $chartdata['consent-activity']['data'] = $data;
204
+ }
205
+
206
+ // echo '<pre>'; print_r( $chartdata ); echo '</pre>'; exit;
207
+
208
+ wp_localize_script(
209
+ 'cn-admin-dashboard',
210
+ 'cnDashboardArgs',
211
+ [
212
+ 'ajaxURL' => admin_url( 'admin-ajax.php' ),
213
+ 'nonce' => wp_create_nonce( 'cn-dashboard-widget' ),
214
+ 'nonceUser' => wp_create_nonce( 'cn-dashboard-user-options' ),
215
+ 'charts' => $chartdata
216
+ ]
217
+ );
218
+ }
219
+
220
+ /**
221
+ * Render dashboard widget.
222
+ *
223
+ * @return void
224
+ */
225
+ public function dashboard_widget() {
226
+ $html = '';
227
+
228
+ // Compliance active, display chart
229
+ if ( Cookie_Notice()->get_status() == 'active' ) {
230
+ // get user options
231
+ $user_options = get_user_meta( get_current_user_id(), 'pvc_dashboard', true );
232
+
233
+ // empty options?
234
+ if ( empty( $user_options ) || ! is_array( $user_options ) )
235
+ $user_options = [];
236
+
237
+ // sanitize options
238
+ $user_options = map_deep( $user_options, 'sanitize_text_field' );
239
+
240
+ // get menu items
241
+ $menu_items = ! empty( $user_options['menu_items'] ) ? $user_options['menu_items'] : [];
242
+
243
+ $items = [
244
+ [
245
+ 'id' => 'visits',
246
+ 'title' => __( 'Traffic Overview', 'cookie-notice' ),
247
+ 'description' => __( 'Displays the general visits information for your domain.', 'cookie-notice' )
248
+ ],
249
+ [
250
+ 'id' => 'consent-activity',
251
+ 'title' => __( 'Consent Activity', 'cookie-notice' ),
252
+ 'description' => __( 'Displays the chart of the domain consent activity in the last 30 days.', 'cookie-notice' )
253
+ ],
254
+ ];
255
+
256
+ $html = '
257
+ <div id="cn-dashboard-accordion" class="cn-accordion">';
258
+
259
+ foreach ( $items as $item ) {
260
+ $html .= $this->widget_item( $item, $menu_items );
261
+ }
262
+
263
+ $html .= '
264
+ </div>';
265
+ // Compliance inactive, display image
266
+ } else {
267
+ $html = '
268
+ <div id="cn-dashboard-accordion" class="cn-accordion cn-widget-block">
269
+ <img src="' . plugins_url( '../img/cookie-compliance-widget.png', __FILE__ ) . '" alt="Cookie Compliance widget" />
270
+ <div id="cn-dashboard-upgrade">
271
+ <div id="cn-dashboard-modal">
272
+ <h2>' . __( 'View consent activity inside WordPress Dashboard', 'cookie-notice' ) . '</h2>
273
+ <p>' . __( 'Display information about the visits.', 'cookie-notice' ) . '</p>
274
+ <p>' . __( 'Get Consent logs data for the last 30 days.', 'cookie-notice' ) . '</p>
275
+ <p>' . __( 'Enable consent purpose categories, automatic cookie blocking and more.', 'cookie-notice' ) . '</p>
276
+ <p><a href="' . admin_url( 'admin.php' ) . '?page=cookie-notice&welcome=1' . '" class="button button-primary button-hero cn-button">' . __( 'Upgrade to Cookie Compliance', 'cookie-notice' ) . '</a></p>
277
+ </div>
278
+ </div>
279
+ </div>';
280
+ }
281
+
282
+
283
+ echo $html;
284
+ }
285
+
286
+ /**
287
+ * Generate dashboard widget item HTML.
288
+ *
289
+ * @param array $item
290
+ * @param array $menu_items
291
+ * @return string
292
+ */
293
+ public function widget_item( $item, $menu_items ) {
294
+ // allows a list of HTML Entities such as
295
+ $allowed_html = wp_kses_allowed_html( 'post' );
296
+ $allowed_html['canvas'] = [
297
+ 'id' => [],
298
+ 'height' => []
299
+ ];
300
+
301
+ $html = '
302
+ <div id="cn-' . esc_attr( $item['id'] ) . '" class="cn-accordion-item' . ( in_array( $item['id'], $menu_items, true ) ? ' cn-collapsed' : '' ) . '">
303
+ <div class="cn-accordion-header">
304
+ <div class="cn-accordion-toggle"><span class="cn-accordion-title">' . esc_html( $item['title'] ) . '</span><span class="cn-tooltip" aria-label="' . esc_html( $item['description'] ) . '" data-microtip-position="top" data-microtip-size="large" role="tooltip"><span class="cn-tooltip-icon"></span></span></div>
305
+ </div>
306
+ <div class="cn-accordion-content">
307
+ <div class="cn-dashboard-container">
308
+ <div class="cn-data-container">
309
+ ' . wp_kses( $this->widget_item_content( $item['id'] ), $allowed_html ) . '
310
+ <span class="spinner"></span>
311
+ </div>
312
+ </div>
313
+ </div>
314
+ </div>';
315
+
316
+ return $html;
317
+ }
318
+
319
+ /**
320
+ * Generate dashboard widget item HTML.
321
+ *
322
+ * @param array $item
323
+ * @param array $menu_items
324
+ * @return string
325
+ */
326
+ public function widget_item_content( $item ) {
327
+ $html = '';
328
+
329
+ // get analytics data options
330
+ $analytics = get_option( 'cookie_notice_app_analytics' );
331
+
332
+ $date_format = get_option( 'date_format' );
333
+
334
+ // thirty days data
335
+ $thirty_days_usage = array(
336
+ 'visits' => ! empty( $analytics['thirtyDaysUsage']->visits ) ? (int) $analytics['thirtyDaysUsage']->visits : 0,
337
+ 'visits_updated' => ! empty( $analytics['thirtyDaysUsage']->fetchTime ) ? date_i18n( $date_format, strtotime( $analytics['thirtyDaysUsage']->fetchTime ) ) : date_i18n( $date_format, strtotime( current_time( 'mysql' ) ) ),
338
+ 'consents' => 0,
339
+ 'consents_updated' => ! empty( $analytics['lastUpdated'] ) ? date_i18n( $date_format, strtotime( $analytics['lastUpdated'] ) ) : date_i18n( $date_format, strtotime( current_time( 'mysql' ) ) )
340
+ );
341
+
342
+ if ( ! empty( $analytics['consentActivities'] ) ) {
343
+ foreach ( $analytics['consentActivities'] as $index => $entry ) {
344
+ $thirty_days_usage['consents'] += (int) $entry->totalrecd;
345
+ }
346
+ }
347
+
348
+ // cycle usage data
349
+ $cycle_usage = array(
350
+ 'threshold' => ! empty( $analytics['cycleUsage']->threshold ) ? (int) $analytics['cycleUsage']->threshold : 0,
351
+ 'visits' => ! empty( $analytics['cycleUsage']->visits ) ? (int) $analytics['cycleUsage']->visits : 0,
352
+ 'days_to_go' => ! empty( $analytics['cycleUsage']->daysToGo ) ? (int) $analytics['cycleUsage']->daysToGo : 0,
353
+ 'start_date' => ! empty( $analytics['cycleUsage']->startDate ) ? date_i18n( $date_format, strtotime( $analytics['cycleUsage']->startDate ) ) : '',
354
+ 'end_date' => ! empty( $analytics['cycleUsage']->endDate ) ? date_i18n( $date_format, strtotime( $analytics['cycleUsage']->endDate ) ) : ''
355
+ );
356
+
357
+ // available visits, -1 for no pro plans
358
+ $cycle_usage['visits_available'] = $cycle_usage['threshold'] ? $cycle_usage['threshold'] - $cycle_usage['visits'] : -1;
359
+ $cycle_usage['threshold_used'] = $cycle_usage['threshold'] ? ( $cycle_usage['visits'] / $cycle_usage['threshold'] ) * 100 : 0;
360
+ $cycle_usage['threshold_used'] = $cycle_usage['threshold_used'] > 100 ? 100 : $cycle_usage['threshold_used'];
361
+
362
+ switch ($item) {
363
+ case 'visits' :
364
+ $html .= '
365
+ <div id="cn-dashboard-' . $item . '">
366
+ <div id="cn-' . $item . '-infobox-traffic-overview" class="cn-infobox-container">
367
+ <div id="cn-' . $item . '-infobox-visits" class="cn-infobox">
368
+ <div class="cn-infobox-title">' . __( 'Total Visits', 'cookie-notice' ) . '</div>
369
+ <div class="cn-infobox-number">' . number_format_i18n( $thirty_days_usage['visits'], 0 ) . '</div>
370
+ <div class="cn-infobox-subtitle">' . __( 'Last 30 days', 'cookie-notice' ) . '</div>
371
+ </div>
372
+ <div id="cn-' . $item . '-infobox-consents" class="cn-infobox">
373
+ <div class="cn-infobox-title">' . __( 'Consent Logs', 'cookie-notice' ) . '</div>
374
+ <div class="cn-infobox-number">' . number_format_i18n( $thirty_days_usage['consents'], 0 ) . '</div>
375
+ <div class="cn-infobox-subtitle">' . sprintf( __( 'Updated %s', 'cookie-notice' ), $thirty_days_usage['consents_updated'] ) . '</div>
376
+ </div>
377
+ </div>';
378
+
379
+ if ( $cycle_usage['threshold'] ) {
380
+ $usage_class = 'success';
381
+
382
+ // warning usage color
383
+ if ( $cycle_usage['threshold_used'] > 80 && $cycle_usage['threshold_used'] < 100 ) {
384
+ $usage_class = 'warning';
385
+ // danger usage color
386
+ } elseif ( $cycle_usage['threshold_used'] == 100 ) {
387
+ $usage_class = 'danger';
388
+ }
389
+
390
+ $html .= '
391
+ <div id="cn-' . $item . '-infobox-traffic-usage" class="cn-infobox-container">
392
+ <div id="cn-' . $item . '-infobox-limits" class="cn-infobox">
393
+ <div class="cn-infobox-title">' . __( 'Traffic Usage', 'cookie-notice' ) . '</div>
394
+ <div class="cn-infobox-number cn-text-' . $usage_class . '">' . number_format_i18n( $cycle_usage['threshold_used'], 1 ) . ' %</div>
395
+ <div class="cn-infobox-subtitle">
396
+ <p>' . sprintf( __( 'Visits usage: %1$s / %2$s', 'cookie-notice' ), $cycle_usage['visits'], $cycle_usage['threshold'] ) . '</p>
397
+ <p>' . sprintf( __( 'Cycle started: %s', 'cookie-notice' ), date( $date_format, strtotime( $cycle_usage['start_date'] ) ) ) . '</p>
398
+ <p>' . sprintf( __( 'Days to go: %s', 'cookie-notice' ), $cycle_usage['days_to_go'] ) . '</p>
399
+ </div>
400
+ </div>
401
+ <div id="cn-' . $item . '-chart-limits" class="cn-infobox cn-chart-container">
402
+ <canvas id="cn-usage-chart" style="height: 100px;"></canvas>
403
+ </div>';
404
+
405
+ /*
406
+ <div id="cn-' . $item . '-traffic-notice" class="cn-infobox-notice cn-traffic-' . $usage_class . '">
407
+ <p><b>' . __( 'Your domain has exceeded 90% of the usage limit.', 'cookie-notice' ) . '</b></p>
408
+ <p>' . sprintf(__( 'The banner will still display properly and consent record will be set in the browser. However the Autoblocking will be disabled and Consent Records will not be stored in the application until the current visits cycle resets (in %s days).', 'cookie-notice' ), $cycle_usage['days_to_go'] ) . '</p>
409
+ </div>
410
+ *
411
+ */
412
+
413
+ $html .= '
414
+ </div>';
415
+ }
416
+
417
+ $html .= '
418
+ </div>
419
+ ';
420
+
421
+ break;
422
+
423
+ case 'consent-activity' :
424
+ $html .= '
425
+ <div id="cn-dashboard-' . $item . '">
426
+ <div id="cn-' . $item . '-chart-container cn-chart-container">
427
+ <canvas id="cn-' . $item . '-chart" style="height: 300px;"></canvas>
428
+ </div>
429
+ </div>';
430
+ break;
431
+
432
+ default :
433
+ break;
434
+ }
435
+
436
+ return $html;
437
+ }
438
+
439
+ }
includes/frontend.php CHANGED
@@ -172,7 +172,7 @@ class Cookie_Notice_Frontend {
172
  . '<span id="cn-notice-buttons" class="cn-buttons-container"><a href="#" id="cn-accept-cookie" data-cookie-set="accept" class="cn-set-cookie ' . $options['button_class'] . ( $options['css_class'] !== '' ? ' cn-button-custom ' . $options['css_class'] : '' ) . '" aria-label="' . esc_attr( $options['accept_text'] ) . '"' . ( $options['css_class'] == '' ? ' style="background-color: ' . esc_attr( $options['colors']['button'] ) . '"' : '' ) . '>' . esc_html( $options['accept_text'] ) . '</a>'
173
  . ( $options['refuse_opt'] === true ? '<a href="#" id="cn-refuse-cookie" data-cookie-set="refuse" class="cn-set-cookie ' . $options['button_class'] . ( $options['css_class'] !== '' ? ' cn-button-custom ' . $options['css_class'] : '' ) . '" aria-label="' . esc_attr( $options['refuse_text'] ) . '"' . ( $options['css_class'] == '' ? ' style="background-color: ' . esc_attr( $options['colors']['button'] ) . '"' : '' ) . '>' . esc_html( $options['refuse_text'] ) . '</a>' : '' )
174
  . ( $options['see_more'] === true && $options['link_position'] === 'banner' ? '<a href="' . ( $options['see_more_opt']['link_type'] === 'custom' ? esc_url( $options['see_more_opt']['link'] ) : get_permalink( $options['see_more_opt']['id'] ) ) . '" target="' . esc_attr( $options['link_target'] ) . '" id="cn-more-info" class="cn-more-info ' . $options['button_class'] . ( $options['css_class'] !== '' ? ' cn-button-custom ' . $options['css_class'] : '' ) . '" aria-label="' . esc_attr( $options['see_more_opt']['text'] ) . '"' . ( $options['css_class'] == '' ? ' style="background-color: ' . esc_attr( $options['colors']['button'] ) . '"' : '' ) . '>' . esc_html( $options['see_more_opt']['text'] ) . '</a>' : '' )
175
- . '</span><a href="javascript:void(0);" id="cn-close-notice" data-cookie-set="accept" class="cn-close-icon" aria-label="' . esc_attr( $options['accept_text'] ) . '"></a>'
176
  . '</div>
177
  ' . ( $options['refuse_opt'] === true && $options['revoke_cookies'] == true ?
178
  '<div class="cookie-revoke-container" style="color: ' . esc_attr( $options['colors']['text'] ) . ';">'
172
  . '<span id="cn-notice-buttons" class="cn-buttons-container"><a href="#" id="cn-accept-cookie" data-cookie-set="accept" class="cn-set-cookie ' . $options['button_class'] . ( $options['css_class'] !== '' ? ' cn-button-custom ' . $options['css_class'] : '' ) . '" aria-label="' . esc_attr( $options['accept_text'] ) . '"' . ( $options['css_class'] == '' ? ' style="background-color: ' . esc_attr( $options['colors']['button'] ) . '"' : '' ) . '>' . esc_html( $options['accept_text'] ) . '</a>'
173
  . ( $options['refuse_opt'] === true ? '<a href="#" id="cn-refuse-cookie" data-cookie-set="refuse" class="cn-set-cookie ' . $options['button_class'] . ( $options['css_class'] !== '' ? ' cn-button-custom ' . $options['css_class'] : '' ) . '" aria-label="' . esc_attr( $options['refuse_text'] ) . '"' . ( $options['css_class'] == '' ? ' style="background-color: ' . esc_attr( $options['colors']['button'] ) . '"' : '' ) . '>' . esc_html( $options['refuse_text'] ) . '</a>' : '' )
174
  . ( $options['see_more'] === true && $options['link_position'] === 'banner' ? '<a href="' . ( $options['see_more_opt']['link_type'] === 'custom' ? esc_url( $options['see_more_opt']['link'] ) : get_permalink( $options['see_more_opt']['id'] ) ) . '" target="' . esc_attr( $options['link_target'] ) . '" id="cn-more-info" class="cn-more-info ' . $options['button_class'] . ( $options['css_class'] !== '' ? ' cn-button-custom ' . $options['css_class'] : '' ) . '" aria-label="' . esc_attr( $options['see_more_opt']['text'] ) . '"' . ( $options['css_class'] == '' ? ' style="background-color: ' . esc_attr( $options['colors']['button'] ) . '"' : '' ) . '>' . esc_html( $options['see_more_opt']['text'] ) . '</a>' : '' )
175
+ . '</span><span id="cn-close-notice" data-cookie-set="accept" class="cn-close-icon" aria-label="' . esc_attr( $options['accept_text'] ) . '"></span>'
176
  . '</div>
177
  ' . ( $options['refuse_opt'] === true && $options['revoke_cookies'] == true ?
178
  '<div class="cookie-revoke-container" style="color: ' . esc_attr( $options['colors']['text'] ) . ';">'
includes/settings.php CHANGED
@@ -198,27 +198,55 @@ class Cookie_Notice_Settings {
198
  <div class="wrap">
199
  <h2>' . __( 'Cookie Notice & Compliance for GDPR/CCPA', 'cookie-notice' ) . '</h2>
200
  <div class="cookie-notice-settings">
201
- <div class="cookie-notice-credits">
202
- <div class="inside">
203
- <div class="inner">';
204
-
205
- // compliance enabled
206
- if ( Cookie_Notice()->get_status() === 'active' ) {
207
- echo ' <h2>We\'re Promoting Privacy&trade;</h2>
208
- <p>' . __( 'Promote the privacy of your website visitors without affecting how you do your business.', 'cookie-notice' ) . '</p>';
209
- } else {
210
- echo ' <h1><b>Cookie Compliance&trade;</b></h1>
211
- <h2>' . __( 'The next generation of Cookie Notice', 'cookie-notice' ) . '</h2>
212
- <div class="cn-lead">
213
- <p>' . __( 'A free web application to help you deliver better consent experiences and comply with GDPR, CCPA and other data privacy laws more effectively.', 'cookie-notice' ) . '</p>
 
 
 
 
 
 
 
214
  </div>
215
- <img src="//cns2-53eb.kxcdn.com/screen-dashboard-small.png">
216
- <a href="' . esc_url( admin_url( 'index.php?page=cookie-notice' ) ) . '" class="cn-btn cn-run-upgrade">' . __( 'Free Upgrade', 'cookie-notice' ) . '</a>';
217
- }
218
-
219
- echo '
220
  </div>
221
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
222
  </div>
223
  <form action="options.php" method="post">';
224
 
@@ -314,7 +342,7 @@ class Cookie_Notice_Settings {
314
  <span class="cn_compliance_status">' . __( 'Proof-of-Consent', 'cookie-notice' ) . ': <label class="cn-active">' . __( 'Active', 'cookie-notice' ) . '</label></span>
315
  </div>
316
  <div id="cn_app_actions">
317
- <a href="' . $this->app_login_url . '" class="button button-primary button-hero" target="_blank">' . __( 'Log in & Configure', 'cookie-notice' ) . '</a>
318
  <p class="description">' . __( 'Log into the Cookie Compliance&trade; web application and configure your Privacy Experience.', 'cookie-notice' ) . '</p>
319
  </div>
320
  </fieldset>';
@@ -329,7 +357,7 @@ class Cookie_Notice_Settings {
329
  <span class="cn_compliance_status">' . __( 'Proof-of-Consent', 'cookie-notice' ) . ': <label class="cn-pending">' . __( 'Pending', 'cookie-notice' ) . '</label></span>
330
  </div>
331
  <div id="cn_app_actions">
332
- <a href="' . $this->app_login_url . '" class="button button-primary button-hero" target="_blank">' . __( 'Log in & configure', 'cookie-notice' ) . '</a>
333
  <p class="description">' . __( 'Log into the Cookie Compliance&trade; web application and complete the setup process.', 'cookie-notice' ) . '</p>
334
  </div>
335
  </fieldset>';
@@ -344,7 +372,7 @@ class Cookie_Notice_Settings {
344
  <span class="cn_compliance_status">' . __( 'Proof-of-Consent', 'cookie-notice' ) . ': <label class="cn-inactive">' . __( 'Inactive', 'cookie-notice' ) . '</label></span>
345
  </div>
346
  <div id="cn_app_actions">
347
- <a href="' . admin_url( 'index.php?page=cookie-notice' ) . '" class="button button-primary button-hero cn-run-welcome">' . __( 'Add Compliance features', 'cookie-notice' ) . '</a>
348
  <p class="description">' . __( 'Sign up to Cookie Compliance&trade; and add GDPR, CCPA and other international data privacy laws compliance features.', 'cookie-notice' ) . '</p>
349
  </div>
350
  </fieldset>';
198
  <div class="wrap">
199
  <h2>' . __( 'Cookie Notice & Compliance for GDPR/CCPA', 'cookie-notice' ) . '</h2>
200
  <div class="cookie-notice-settings">
201
+ <div class="cookie-notice-sidebar">
202
+ <div class="cookie-notice-credits">
203
+ <div class="inside">
204
+ <div class="inner">';
205
+
206
+ // compliance enabled
207
+ if ( Cookie_Notice()->get_status() === 'active' ) {
208
+ echo ' <h2>We\'re Promoting Privacy&trade;</h2>
209
+ <p>' . __( 'Promote the privacy of your website visitors without affecting how you do your business.', 'cookie-notice' ) . '</p>';
210
+ } else {
211
+ echo ' <h1><b>Cookie Compliance&trade;</b></h1>
212
+ <h2>' . __( 'The next generation of Cookie Notice', 'cookie-notice' ) . '</h2>
213
+ <div class="cn-lead">
214
+ <p>' . __( 'A free web application to help you deliver better consent experiences and comply with GDPR, CCPA and other data privacy laws more effectively.', 'cookie-notice' ) . '</p>
215
+ </div>
216
+ <img src="//cns2-53eb.kxcdn.com/screen-dashboard-small.png">
217
+ <a href="' . esc_url( admin_url( 'index.php?page=cookie-notice' ) ) . '" class="button button-primary button-hero cn-button cn-run-upgrade">' . __( 'Free Upgrade', 'cookie-notice' ) . '</a>';
218
+ }
219
+
220
+ echo '
221
  </div>
 
 
 
 
 
222
  </div>
223
+ </div>';
224
+
225
+ if ( Cookie_Notice()->get_status() !== 'active' ) {
226
+ echo '
227
+ <div class="cookie-notice-faq">
228
+ <h2>' . __( 'F.A.Q.', 'cookie-notice' ) . '</h2>
229
+ <div class="cn-toggle-container">
230
+ <label for="cn-faq-1" class="cn-toggle-item">
231
+ <input id="cn-faq-1" type="checkbox" checked />
232
+ <span class="cn-toggle-heading">' . __( 'Does the Cookie Notice make my site fully compliant with GDPR?', 'cookie-notice' ) . '</span>
233
+ <span class="cn-toggle-body">' . __( 'It is not possible to provide the required technical compliance features using only a WordPress plugin. Features like consent record storage, purpose categories and script blocking that bring your site into full compliance with GDPR are only available through the Cookie Compliance integration.', 'cookie-notice' ) . '
234
+ </label>
235
+ <label for="cn-faq-2" class="cn-toggle-item">
236
+ <input id="cn-faq-2" type="checkbox" />
237
+ <span class="cn-toggle-heading">' . __( 'Does the Cookie Compiance integration make my site fully compliant with GDPR?', 'cookie-notice' ) . '</span>
238
+ <span class="cn-toggle-body">' . __( 'Yes! The plugin + web application version includes technical compliance features to meet requirements for over 100 countries and legal jurisdictions.', 'cookie-notice' ) . '</span>
239
+ </label>
240
+ <label for="cn-faq-3" class="cn-toggle-item">
241
+ <input id="cn-faq-3" type="checkbox" />
242
+ <span class="cn-toggle-heading">' . __( 'Is Cookie Compliance free?', 'cookie-notice' ) . '</span>
243
+ <span class="cn-toggle-body">' . __( 'Yes, but with limits. Cookie Compliance includes both free and paid plans to choose from depending on your needs and your website monthly traffic.', 'cookie-notice' ) . '</span>
244
+ </label>
245
+ </div>
246
+ </div>';
247
+ }
248
+
249
+ echo '
250
  </div>
251
  <form action="options.php" method="post">';
252
 
342
  <span class="cn_compliance_status">' . __( 'Proof-of-Consent', 'cookie-notice' ) . ': <label class="cn-active">' . __( 'Active', 'cookie-notice' ) . '</label></span>
343
  </div>
344
  <div id="cn_app_actions">
345
+ <a href="' . $this->app_login_url . '" class="button button-primary button-hero cn-button" target="_blank">' . __( 'Log in & Configure', 'cookie-notice' ) . '</a>
346
  <p class="description">' . __( 'Log into the Cookie Compliance&trade; web application and configure your Privacy Experience.', 'cookie-notice' ) . '</p>
347
  </div>
348
  </fieldset>';
357
  <span class="cn_compliance_status">' . __( 'Proof-of-Consent', 'cookie-notice' ) . ': <label class="cn-pending">' . __( 'Pending', 'cookie-notice' ) . '</label></span>
358
  </div>
359
  <div id="cn_app_actions">
360
+ <a href="' . $this->app_login_url . '" class="button button-primary button-hero cn-button" target="_blank">' . __( 'Log in & configure', 'cookie-notice' ) . '</a>
361
  <p class="description">' . __( 'Log into the Cookie Compliance&trade; web application and complete the setup process.', 'cookie-notice' ) . '</p>
362
  </div>
363
  </fieldset>';
372
  <span class="cn_compliance_status">' . __( 'Proof-of-Consent', 'cookie-notice' ) . ': <label class="cn-inactive">' . __( 'Inactive', 'cookie-notice' ) . '</label></span>
373
  </div>
374
  <div id="cn_app_actions">
375
+ <a href="' . admin_url( 'index.php?page=cookie-notice' ) . '" class="button button-primary button-hero cn-button cn-run-welcome">' . __( 'Add Compliance features', 'cookie-notice' ) . '</a>
376
  <p class="description">' . __( 'Sign up to Cookie Compliance&trade; and add GDPR, CCPA and other international data privacy laws compliance features.', 'cookie-notice' ) . '</p>
377
  </div>
378
  </fieldset>';
includes/welcome-api.php CHANGED
@@ -1,4 +1,5 @@
1
  <?php
 
2
  // exit if accessed directly
3
  if ( ! defined( 'ABSPATH' ) )
4
  exit;
@@ -9,11 +10,13 @@ if ( ! defined( 'ABSPATH' ) )
9
  * @class Cookie_Notice_Welcome_API
10
  */
11
  class Cookie_Notice_Welcome_API {
 
12
  // api urls
13
- private $account_api_url = '';
14
- private $designer_api_url = '';
15
- private $x_api_key = '';
16
-
 
17
  /**
18
  * Constructor.
19
  *
@@ -21,10 +24,9 @@ class Cookie_Notice_Welcome_API {
21
  */
22
  public function __construct() {
23
  add_action( 'wp_ajax_cn_api_request', array( $this, 'api_request' ) );
24
-
25
- $this->account_api_url = 'https://account-api.hu-manity.co';
26
- $this->designer_api_url = 'https://designer-api.hu-manity.co';
27
- $this->x_api_key = 'hudft60djisdusdjwek';
28
  }
29
 
30
  /**
@@ -49,7 +51,7 @@ class Cookie_Notice_Welcome_API {
49
 
50
  if ( ! $request )
51
  return false;
52
-
53
  // get site language
54
  $locale = get_locale();
55
  $locale_code = explode( '_', $locale );
@@ -62,7 +64,7 @@ class Cookie_Notice_Welcome_API {
62
 
63
  $params = array();
64
 
65
- switch ( $request ) {
66
  case 'get_bt_init_token':
67
  $result = $this->request( 'get_token' );
68
 
@@ -83,7 +85,7 @@ class Cookie_Notice_Welcome_API {
83
  // validate plan and payment method
84
  $plan = in_array( $_POST['plan'], array( 'monthly', 'yearly' ), true ) ? $_POST['plan'] : false;
85
  $plan = ! empty( $plan ) ? 'compliance_' . $plan . '_notrial' : false;
86
-
87
  $method = in_array( $_POST['method'], array( 'credit_card', 'paypal' ), true ) ? $_POST['method'] : false;
88
 
89
  // valid plan and payment method?
@@ -97,17 +99,17 @@ class Cookie_Notice_Welcome_API {
97
  // user found?
98
  if ( ! empty( $result->id ) ) {
99
  $customer = $result;
100
- // create user
101
  } else {
102
  $result = $this->request(
103
- 'create_customer',
104
- array(
105
- 'AppID' => $app_id,
106
- 'AdminID' => $admin_id, // remove later - AdminID from API response
107
- 'paymentMethodNonce' => sanitize_text_field( $_POST['payment_nonce'] )
108
- )
109
  );
110
-
111
  if ( ! empty( $result->success ) ) {
112
  $customer = $result->customer;
113
  } else {
@@ -120,15 +122,15 @@ class Cookie_Notice_Welcome_API {
120
  $response = array( 'error' => __( 'Unable to create customer data.', 'cookie-notice' ) );
121
  break;
122
  }
123
-
124
  // @todo: check if subscribtion exists
125
  $subscription = $this->request(
126
- 'create_subscription',
127
- array(
128
- 'AppID' => $app_id,
129
- 'PlanId' => $plan,
130
- 'paymentMethodToken' => $customer->paymentMethods[0]->token
131
- )
132
  );
133
 
134
  // subscription assigned?
@@ -145,7 +147,7 @@ class Cookie_Notice_Welcome_API {
145
  $pass2 = ! empty( $_POST['pass2'] ) ? $_POST['pass2'] : '';
146
  $terms = isset( $_POST['terms'] );
147
  $language = ! empty( $_POST['language'] ) ? sanitize_text_field( $_POST['language'] ) : 'en';
148
-
149
  if ( ! $terms ) {
150
  $response = array( 'error' => __( "Please accept the Terms of Service to proceed.", 'cookie-notice' ) );
151
  break;
@@ -155,12 +157,12 @@ class Cookie_Notice_Welcome_API {
155
  $response = array( 'error' => __( 'Email is not allowed to be empty.', 'cookie-notice' ) );
156
  break;
157
  }
158
-
159
  if ( ! $pass || ! is_string( $pass ) ) {
160
  $response = array( 'error' => __( 'Password is not allowed to be empty.', 'cookie-notice' ) );
161
  break;
162
  }
163
-
164
  if ( $pass !== $pass2 ) {
165
  $response = array( 'error' => __( "Passwords do not match.", 'cookie-notice' ) );
166
  break;
@@ -171,28 +173,28 @@ class Cookie_Notice_Welcome_API {
171
  'Password' => $pass,
172
  'Language' => $language
173
  );
174
-
175
  $response = $this->request( $request, $params );
176
 
177
  // errors?
178
  if ( ! empty( $response->error ) ) {
179
  break;
180
  }
181
-
182
  // errors?
183
  if ( ! empty( $response->message ) ) {
184
  $response->error = $response->message;
185
  break;
186
  }
187
-
188
  // ok, so log in now
189
  $params = array(
190
  'AdminID' => $email,
191
  'Password' => $pass
192
  );
193
-
194
  $response = $this->request( 'login', $params );
195
-
196
  // errors?
197
  if ( ! empty( $response->error ) ) {
198
  break;
@@ -208,10 +210,10 @@ class Cookie_Notice_Welcome_API {
208
  $response = array( 'error' => __( 'Unexpected error occurred. Please try again later.', 'cookie-notice' ) );
209
  break;
210
  }
211
-
212
  // set token
213
  set_transient( 'cookie_notice_app_token', $response->data, 24 * HOUR_IN_SECONDS );
214
-
215
  // multisite?
216
  if ( is_multisite() ) {
217
  switch_to_blog( 1 );
@@ -224,24 +226,24 @@ class Cookie_Notice_Welcome_API {
224
  $site_url = get_home_url();
225
  $site_description = get_bloginfo( 'description' );
226
  }
227
-
228
  // create new app, no need to check existing
229
  $params = array(
230
  'DomainName' => $site_title,
231
  'DomainUrl' => $site_url,
232
  );
233
-
234
  if ( ! empty( $site_description ) )
235
  $params['DomainDescription'] = $site_description;
236
-
237
  $response = $this->request( 'app_create', $params );
238
-
239
  // errors?
240
  if ( ! empty( $response->message ) ) {
241
  $response->error = $response->message;
242
  break;
243
  }
244
-
245
  // data in response?
246
  if ( empty( $response->data->AppID ) || empty( $response->data->SecretKey ) ) {
247
  $response = array( 'error' => __( 'Unexpected error occurred. Please try again later.', 'cookie-notice' ) );
@@ -250,15 +252,15 @@ class Cookie_Notice_Welcome_API {
250
  $app_id = $response->data->AppID;
251
  $secret_key = $response->data->SecretKey;
252
  }
253
-
254
  // update options: app ID and secret key
255
  Cookie_Notice()->options['general'] = wp_parse_args( array( 'app_id' => $app_id, 'app_key' => $secret_key ), Cookie_Notice()->options['general'] );
256
 
257
  update_option( 'cookie_notice_options', Cookie_Notice()->options['general'] );
258
-
259
  // purge cache
260
  delete_transient( 'cookie_notice_compliance_cache' );
261
-
262
  // get options
263
  $app_config = get_transient( 'cookie_notice_app_config' );
264
 
@@ -272,37 +274,40 @@ class Cookie_Notice_Welcome_API {
272
 
273
  foreach ( $array as $subkey => $value ) {
274
  $new_params[$key] = $object;
275
- $new_params[$key]->{$subkey} = $value;
276
  }
277
  }
278
-
279
  $params = $new_params;
280
  }
281
 
282
  $params['AppID'] = $app_id;
283
  // @todo When mutliple default languages are supported
284
  $params['DefaultLanguage'] = 'en';
285
- // $params['CurrentLanguage'] = $locale_code[0];
 
 
 
286
 
287
  $response = $this->request( 'quick_config', $params );
288
 
289
  if ( $response->status === 200 ) {
290
  // notify publish app
291
- $params = array(
292
- 'AppID' => $app_id
293
  );
294
 
295
  $response = $this->request( 'notify_app', $params );
296
 
297
  if ( $response->status === 200 ) {
298
  $response = true;
299
-
300
  // update app status
301
  update_option( 'cookie_notice_status', 'active' );
302
  } else {
303
  // update app status
304
  update_option( 'cookie_notice_status', 'pending' );
305
-
306
  // errors?
307
  if ( ! empty( $response->error ) ) {
308
  break;
@@ -317,7 +322,7 @@ class Cookie_Notice_Welcome_API {
317
  } else {
318
  // update app status
319
  update_option( 'cookie_notice_status', 'pending' );
320
-
321
  // errors?
322
  if ( ! empty( $response->error ) ) {
323
  $response->error = $response->error;
@@ -330,41 +335,41 @@ class Cookie_Notice_Welcome_API {
330
  break;
331
  }
332
  }
333
-
334
  break;
335
 
336
  case 'login':
337
  $email = is_email( $_POST['email'] );
338
  $pass = ! empty( $_POST['pass'] ) ? $_POST['pass'] : '';
339
-
340
  if ( ! $email ) {
341
  $response = array( 'error' => __( 'Email is not allowed to be empty.', 'cookie-notice' ) );
342
  break;
343
  }
344
-
345
  if ( ! $pass ) {
346
  $response = array( 'error' => __( 'Password is not allowed to be empty.', 'cookie-notice' ) );
347
  break;
348
  }
349
-
350
  $params = array(
351
  'AdminID' => $email,
352
  'Password' => $pass
353
  );
354
-
355
  $response = $this->request( $request, $params );
356
 
357
  // errors?
358
  if ( ! empty( $response->error ) ) {
359
  break;
360
  }
361
-
362
  // errors?
363
  if ( ! empty( $response->message ) ) {
364
  $response->error = $response->message;
365
  break;
366
  }
367
-
368
  // token in response?
369
  if ( empty( $response->data->token ) ) {
370
  $response = array( 'error' => __( 'Unexpected error occurred. Please try again later.', 'cookie-notice' ) );
@@ -373,12 +378,11 @@ class Cookie_Notice_Welcome_API {
373
 
374
  // set token
375
  set_transient( 'cookie_notice_app_token', $response->data, 24 * HOUR_IN_SECONDS );
376
-
377
  // get apps and check if one for the current domain already exists
378
  $response = $this->request( 'list_apps', array() );
379
-
380
  // echo '<pre>'; print_r( $response ); echo '</pre>'; exit;
381
-
382
  // errors?
383
  if ( ! empty( $response->message ) ) {
384
  $response->error = $response->message;
@@ -387,7 +391,7 @@ class Cookie_Notice_Welcome_API {
387
 
388
  $apps_list = array();
389
  $app_exists = false;
390
-
391
  // multisite?
392
  if ( is_multisite() ) {
393
  switch_to_blog( 1 );
@@ -400,17 +404,17 @@ class Cookie_Notice_Welcome_API {
400
  $site_url = get_home_url();
401
  $site_description = get_bloginfo( 'description' );
402
  }
403
-
404
  // apps added, check if current one exists
405
  if ( ! empty( $response->data ) ) {
406
  $apps_list = (array) $response->data;
407
-
408
  foreach ( $apps_list as $index => $app ) {
409
  $site_without_http = trim( str_replace( array( 'http://', 'https://' ), '', $site_url ), '/' );
410
-
411
  if ( $app->DomainUrl === $site_without_http ) {
412
  $app_exists = $app;
413
-
414
  continue;
415
  }
416
  }
@@ -418,7 +422,7 @@ class Cookie_Notice_Welcome_API {
418
 
419
  // if no app, create one
420
  if ( ! $app_exists ) {
421
-
422
  // create new app
423
  $params = array(
424
  'DomainName' => $site_title,
@@ -429,22 +433,22 @@ class Cookie_Notice_Welcome_API {
429
  $params['DomainDescription'] = $site_description;
430
 
431
  $response = $this->request( 'app_create', $params );
432
-
433
  // errors?
434
  if ( ! empty( $response->message ) ) {
435
  $response->error = $response->message;
436
  break;
437
  }
438
-
439
  $app_exists = $response->data;
440
  }
441
-
442
  // check if we have the valid app data
443
  if ( empty( $app_exists->AppID ) || empty( $app_exists->SecretKey ) ) {
444
  $response = array( 'error' => __( 'Unexpected error occurred. Please try again later.', 'cookie-notice' ) );
445
  break;
446
  }
447
-
448
  // update options: app ID and secret key
449
  Cookie_Notice()->options['general'] = wp_parse_args( array( 'app_id' => $app_exists->AppID, 'app_key' => $app_exists->SecretKey ), Cookie_Notice()->options['general'] );
450
 
@@ -457,14 +461,17 @@ class Cookie_Notice_Welcome_API {
457
  $params = array(
458
  'AppID' => $app_exists->AppID,
459
  'DefaultLanguage' => 'en',
460
- // 'CurrentLanguage' => $locale_code[0]
461
  );
 
 
 
 
462
 
463
  $response = $this->request( 'quick_config', $params );
464
 
465
  if ( $response->status === 200 ) {
466
  // @todo notify publish app
467
- $params = array(
468
  'AppID' => $app_exists->AppID
469
  );
470
 
@@ -472,13 +479,13 @@ class Cookie_Notice_Welcome_API {
472
 
473
  if ( $response->status === 200 ) {
474
  $response = true;
475
-
476
  // update app status
477
  update_option( 'cookie_notice_status', 'active' );
478
  } else {
479
  // update app status
480
  update_option( 'cookie_notice_status', 'pending' );
481
-
482
  // errors?
483
  if ( ! empty( $response->error ) ) {
484
  break;
@@ -493,7 +500,7 @@ class Cookie_Notice_Welcome_API {
493
  } else {
494
  // update app status
495
  update_option( 'cookie_notice_status', 'pending' );
496
-
497
  // errors?
498
  if ( ! empty( $response->error ) ) {
499
  $response->error = $response->error;
@@ -506,7 +513,7 @@ class Cookie_Notice_Welcome_API {
506
  break;
507
  }
508
  }
509
-
510
  break;
511
 
512
  case 'configure':
@@ -523,12 +530,12 @@ class Cookie_Notice_Welcome_API {
523
  'cn_privacy_paper',
524
  'cn_privacy_contact',
525
  );
526
-
527
  $options = array();
528
-
529
  // loop through potential config form fields
530
  foreach ( $fields as $field ) {
531
- switch ( $field ) {
532
  case 'cn_position':
533
  // sanitize position
534
  $position = isset( $_POST[$field] ) ? sanitize_key( $_POST[$field] ) : '';
@@ -656,14 +663,14 @@ class Cookie_Notice_Welcome_API {
656
  break;
657
 
658
  case 'cn_privacy_contact':
659
- $options['config']['privacyContact'] = false;// isset( $_POST[$field] );
660
  break;
661
  }
662
  }
663
-
664
  // set options
665
  set_transient( 'cookie_notice_app_config', $options, 24 * HOUR_IN_SECONDS );
666
-
667
  break;
668
 
669
  case 'select_plan':
@@ -673,7 +680,7 @@ class Cookie_Notice_Welcome_API {
673
  echo json_encode( $response );
674
  exit;
675
  }
676
-
677
  /**
678
  * API request.
679
  *
@@ -682,9 +689,9 @@ class Cookie_Notice_Welcome_API {
682
  * @return false|object
683
  */
684
  private function request( $request = '', $params = '' ) {
685
- $api_args = array(
686
- 'timeout' => 60,
687
- 'sslverify' => false,
688
  'headers' => array( 'x-api-key' => $this->x_api_key )
689
  );
690
  $api_params = array();
@@ -695,7 +702,7 @@ class Cookie_Notice_Welcome_API {
695
  $api_token = ! empty( $data_token->token ) ? $data_token->token : '';
696
  $admin_id = ! empty( $data_token->email ) ? $data_token->email : '';
697
 
698
- switch ( $request ) {
699
  case 'register':
700
  $api_url = $this->account_api_url . '/api/account/account/registration';
701
  $api_args['method'] = 'POST';
@@ -710,10 +717,10 @@ class Cookie_Notice_Welcome_API {
710
  $api_url = $this->account_api_url . '/api/account/app/list';
711
  $api_args['method'] = 'GET';
712
  $api_args['headers'] = array_merge(
713
- $api_args['headers'],
714
- array(
715
- 'Authorization' => 'Bearer ' . $api_token
716
- )
717
  );
718
  break;
719
 
@@ -721,41 +728,53 @@ class Cookie_Notice_Welcome_API {
721
  $api_url = $this->account_api_url . '/api/account/app/add';
722
  $api_args['method'] = 'POST';
723
  $api_args['headers'] = array_merge(
724
- $api_args['headers'],
725
- array(
726
- 'Authorization' => 'Bearer ' . $api_token
727
- )
728
  );
729
  break;
730
-
 
 
 
 
 
 
 
 
 
 
 
 
731
  case 'get_config':
732
  $api_url = $this->designer_api_url . '/api/designer/user-design-live';
733
  $api_args['method'] = 'GET';
734
  break;
735
-
736
  case 'quick_config':
737
  $json = true;
738
  $api_url = $this->designer_api_url . '/api/designer/user-design/quick';
739
  $api_args['method'] = 'POST';
740
  $api_args['headers'] = array_merge(
741
- $api_args['headers'],
742
- array(
743
- 'Authorization' => 'Bearer ' . $api_token,
744
- 'Content-Type' => 'application/json; charset=utf-8'
745
- )
746
  );
747
  break;
748
-
749
  case 'notify_app':
750
  $json = true;
751
  $api_url = $this->account_api_url . '/api/account/app/notifyAppPublished';
752
  $api_args['method'] = 'POST';
753
  $api_args['headers'] = array_merge(
754
- $api_args['headers'],
755
- array(
756
- 'Authorization' => 'Bearer ' . $api_token,
757
- 'Content-Type' => 'application/json; charset=utf-8'
758
- )
759
  );
760
  break;
761
 
@@ -764,10 +783,10 @@ class Cookie_Notice_Welcome_API {
764
  $api_url = $this->account_api_url . '/api/account/braintree';
765
  $api_args['method'] = 'GET';
766
  $api_args['headers'] = array_merge(
767
- $api_args['headers'],
768
- array(
769
- 'Authorization' => 'Bearer ' . $api_token
770
- )
771
  );
772
  break;
773
 
@@ -778,11 +797,11 @@ class Cookie_Notice_Welcome_API {
778
  $api_args['method'] = 'POST';
779
  $api_args['data_format'] = 'body';
780
  $api_args['headers'] = array_merge(
781
- $api_args['headers'],
782
- array(
783
- 'Authorization' => 'Bearer ' . $api_token,
784
- 'Content-Type' => 'application/json; charset=utf-8'
785
- )
786
  );
787
  break;
788
 
@@ -792,11 +811,11 @@ class Cookie_Notice_Welcome_API {
792
  $api_url = $this->account_api_url . '/api/account/braintree/createcustomer';
793
  $api_args['method'] = 'POST';
794
  $api_args['headers'] = array_merge(
795
- $api_args['headers'],
796
- array(
797
- 'Authorization' => 'Bearer ' . $api_token,
798
- 'Content-Type' => 'application/json; charset=utf-8'
799
- )
800
  );
801
  break;
802
 
@@ -806,11 +825,11 @@ class Cookie_Notice_Welcome_API {
806
  $api_url = $this->account_api_url . '/api/account/braintree/createsubscription';
807
  $api_args['method'] = 'POST';
808
  $api_args['headers'] = array_merge(
809
- $api_args['headers'],
810
- array(
811
- 'Authorization' => 'Bearer ' . $api_token,
812
- 'Content-Type' => 'application/json; charset=utf-8'
813
- )
814
  );
815
  break;
816
  }
@@ -828,7 +847,7 @@ class Cookie_Notice_Welcome_API {
828
  else
829
  $api_args['body'] = $api_params;
830
  }
831
-
832
  $response = wp_remote_request( $api_url, $api_args );
833
 
834
  if ( is_wp_error( $response ) )
@@ -848,22 +867,69 @@ class Cookie_Notice_Welcome_API {
848
 
849
  return $result;
850
  }
851
-
852
  /**
853
- * Ajax API request
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
854
  */
855
  public function get_app_status( $app_id ) {
856
  $result = '';
857
-
858
  if ( ! current_user_can( apply_filters( 'cn_manage_cookie_notice_cap', 'manage_options' ) ) )
859
  return false;
860
 
861
- $params = array(
862
- 'AppID' => $app_id
863
  );
864
-
865
  $response = $this->request( 'get_config', $params );
866
-
867
  if ( ! empty( $response->data ) ) {
868
  $result = 'active';
869
  } else {
@@ -874,7 +940,7 @@ class Cookie_Notice_Welcome_API {
874
  $result = '';
875
  }
876
  }
877
-
878
  return $result;
879
  }
880
 
@@ -907,9 +973,10 @@ class Cookie_Notice_Welcome_API {
907
 
908
  if ( 0 !== curl_errno( $curl ) || 200 !== curl_getinfo( $curl, CURLINFO_HTTP_CODE ) )
909
  $response = null;
910
-
911
  curl_close( $curl );
912
 
913
  return $response;
914
  }
915
- }
 
1
  <?php
2
+
3
  // exit if accessed directly
4
  if ( ! defined( 'ABSPATH' ) )
5
  exit;
10
  * @class Cookie_Notice_Welcome_API
11
  */
12
  class Cookie_Notice_Welcome_API {
13
+
14
  // api urls
15
+ private $account_api_url = 'https://account-api.hu-manity.co';
16
+ private $designer_api_url = 'https://designer-api.hu-manity.co';
17
+ private $transactional_api_url = 'https://transactional-api.hu-manity.co';
18
+ private $x_api_key = 'hudft60djisdusdjwek';
19
+
20
  /**
21
  * Constructor.
22
  *
24
  */
25
  public function __construct() {
26
  add_action( 'wp_ajax_cn_api_request', array( $this, 'api_request' ) );
27
+ // cron job
28
+ add_action( 'init', [ $this, 'check_cron' ] );
29
+ add_action( 'cookie_notice_get_app_analytics', [ $this, 'get_app_analytics' ] );
 
30
  }
31
 
32
  /**
51
 
52
  if ( ! $request )
53
  return false;
54
+
55
  // get site language
56
  $locale = get_locale();
57
  $locale_code = explode( '_', $locale );
64
 
65
  $params = array();
66
 
67
+ switch ($request) {
68
  case 'get_bt_init_token':
69
  $result = $this->request( 'get_token' );
70
 
85
  // validate plan and payment method
86
  $plan = in_array( $_POST['plan'], array( 'monthly', 'yearly' ), true ) ? $_POST['plan'] : false;
87
  $plan = ! empty( $plan ) ? 'compliance_' . $plan . '_notrial' : false;
88
+
89
  $method = in_array( $_POST['method'], array( 'credit_card', 'paypal' ), true ) ? $_POST['method'] : false;
90
 
91
  // valid plan and payment method?
99
  // user found?
100
  if ( ! empty( $result->id ) ) {
101
  $customer = $result;
102
+ // create user
103
  } else {
104
  $result = $this->request(
105
+ 'create_customer',
106
+ array(
107
+ 'AppID' => $app_id,
108
+ 'AdminID' => $admin_id, // remove later - AdminID from API response
109
+ 'paymentMethodNonce' => sanitize_text_field( $_POST['payment_nonce'] )
110
+ )
111
  );
112
+
113
  if ( ! empty( $result->success ) ) {
114
  $customer = $result->customer;
115
  } else {
122
  $response = array( 'error' => __( 'Unable to create customer data.', 'cookie-notice' ) );
123
  break;
124
  }
125
+
126
  // @todo: check if subscribtion exists
127
  $subscription = $this->request(
128
+ 'create_subscription',
129
+ array(
130
+ 'AppID' => $app_id,
131
+ 'PlanId' => $plan,
132
+ 'paymentMethodToken' => $customer->paymentMethods[0]->token
133
+ )
134
  );
135
 
136
  // subscription assigned?
147
  $pass2 = ! empty( $_POST['pass2'] ) ? $_POST['pass2'] : '';
148
  $terms = isset( $_POST['terms'] );
149
  $language = ! empty( $_POST['language'] ) ? sanitize_text_field( $_POST['language'] ) : 'en';
150
+
151
  if ( ! $terms ) {
152
  $response = array( 'error' => __( "Please accept the Terms of Service to proceed.", 'cookie-notice' ) );
153
  break;
157
  $response = array( 'error' => __( 'Email is not allowed to be empty.', 'cookie-notice' ) );
158
  break;
159
  }
160
+
161
  if ( ! $pass || ! is_string( $pass ) ) {
162
  $response = array( 'error' => __( 'Password is not allowed to be empty.', 'cookie-notice' ) );
163
  break;
164
  }
165
+
166
  if ( $pass !== $pass2 ) {
167
  $response = array( 'error' => __( "Passwords do not match.", 'cookie-notice' ) );
168
  break;
173
  'Password' => $pass,
174
  'Language' => $language
175
  );
176
+
177
  $response = $this->request( $request, $params );
178
 
179
  // errors?
180
  if ( ! empty( $response->error ) ) {
181
  break;
182
  }
183
+
184
  // errors?
185
  if ( ! empty( $response->message ) ) {
186
  $response->error = $response->message;
187
  break;
188
  }
189
+
190
  // ok, so log in now
191
  $params = array(
192
  'AdminID' => $email,
193
  'Password' => $pass
194
  );
195
+
196
  $response = $this->request( 'login', $params );
197
+
198
  // errors?
199
  if ( ! empty( $response->error ) ) {
200
  break;
210
  $response = array( 'error' => __( 'Unexpected error occurred. Please try again later.', 'cookie-notice' ) );
211
  break;
212
  }
213
+
214
  // set token
215
  set_transient( 'cookie_notice_app_token', $response->data, 24 * HOUR_IN_SECONDS );
216
+
217
  // multisite?
218
  if ( is_multisite() ) {
219
  switch_to_blog( 1 );
226
  $site_url = get_home_url();
227
  $site_description = get_bloginfo( 'description' );
228
  }
229
+
230
  // create new app, no need to check existing
231
  $params = array(
232
  'DomainName' => $site_title,
233
  'DomainUrl' => $site_url,
234
  );
235
+
236
  if ( ! empty( $site_description ) )
237
  $params['DomainDescription'] = $site_description;
238
+
239
  $response = $this->request( 'app_create', $params );
240
+
241
  // errors?
242
  if ( ! empty( $response->message ) ) {
243
  $response->error = $response->message;
244
  break;
245
  }
246
+
247
  // data in response?
248
  if ( empty( $response->data->AppID ) || empty( $response->data->SecretKey ) ) {
249
  $response = array( 'error' => __( 'Unexpected error occurred. Please try again later.', 'cookie-notice' ) );
252
  $app_id = $response->data->AppID;
253
  $secret_key = $response->data->SecretKey;
254
  }
255
+
256
  // update options: app ID and secret key
257
  Cookie_Notice()->options['general'] = wp_parse_args( array( 'app_id' => $app_id, 'app_key' => $secret_key ), Cookie_Notice()->options['general'] );
258
 
259
  update_option( 'cookie_notice_options', Cookie_Notice()->options['general'] );
260
+
261
  // purge cache
262
  delete_transient( 'cookie_notice_compliance_cache' );
263
+
264
  // get options
265
  $app_config = get_transient( 'cookie_notice_app_config' );
266
 
274
 
275
  foreach ( $array as $subkey => $value ) {
276
  $new_params[$key] = $object;
277
+ $new_params[$key]->{$subkey} = $value;
278
  }
279
  }
280
+
281
  $params = $new_params;
282
  }
283
 
284
  $params['AppID'] = $app_id;
285
  // @todo When mutliple default languages are supported
286
  $params['DefaultLanguage'] = 'en';
287
+
288
+ // add translations if needed
289
+ if ( $locale_code[0] !== 'en' )
290
+ $params['Languages'] = array( $locale_code[0] );
291
 
292
  $response = $this->request( 'quick_config', $params );
293
 
294
  if ( $response->status === 200 ) {
295
  // notify publish app
296
+ $params = array(
297
+ 'AppID' => $app_id
298
  );
299
 
300
  $response = $this->request( 'notify_app', $params );
301
 
302
  if ( $response->status === 200 ) {
303
  $response = true;
304
+
305
  // update app status
306
  update_option( 'cookie_notice_status', 'active' );
307
  } else {
308
  // update app status
309
  update_option( 'cookie_notice_status', 'pending' );
310
+
311
  // errors?
312
  if ( ! empty( $response->error ) ) {
313
  break;
322
  } else {
323
  // update app status
324
  update_option( 'cookie_notice_status', 'pending' );
325
+
326
  // errors?
327
  if ( ! empty( $response->error ) ) {
328
  $response->error = $response->error;
335
  break;
336
  }
337
  }
338
+
339
  break;
340
 
341
  case 'login':
342
  $email = is_email( $_POST['email'] );
343
  $pass = ! empty( $_POST['pass'] ) ? $_POST['pass'] : '';
344
+
345
  if ( ! $email ) {
346
  $response = array( 'error' => __( 'Email is not allowed to be empty.', 'cookie-notice' ) );
347
  break;
348
  }
349
+
350
  if ( ! $pass ) {
351
  $response = array( 'error' => __( 'Password is not allowed to be empty.', 'cookie-notice' ) );
352
  break;
353
  }
354
+
355
  $params = array(
356
  'AdminID' => $email,
357
  'Password' => $pass
358
  );
359
+
360
  $response = $this->request( $request, $params );
361
 
362
  // errors?
363
  if ( ! empty( $response->error ) ) {
364
  break;
365
  }
366
+
367
  // errors?
368
  if ( ! empty( $response->message ) ) {
369
  $response->error = $response->message;
370
  break;
371
  }
372
+
373
  // token in response?
374
  if ( empty( $response->data->token ) ) {
375
  $response = array( 'error' => __( 'Unexpected error occurred. Please try again later.', 'cookie-notice' ) );
378
 
379
  // set token
380
  set_transient( 'cookie_notice_app_token', $response->data, 24 * HOUR_IN_SECONDS );
381
+
382
  // get apps and check if one for the current domain already exists
383
  $response = $this->request( 'list_apps', array() );
384
+
385
  // echo '<pre>'; print_r( $response ); echo '</pre>'; exit;
 
386
  // errors?
387
  if ( ! empty( $response->message ) ) {
388
  $response->error = $response->message;
391
 
392
  $apps_list = array();
393
  $app_exists = false;
394
+
395
  // multisite?
396
  if ( is_multisite() ) {
397
  switch_to_blog( 1 );
404
  $site_url = get_home_url();
405
  $site_description = get_bloginfo( 'description' );
406
  }
407
+
408
  // apps added, check if current one exists
409
  if ( ! empty( $response->data ) ) {
410
  $apps_list = (array) $response->data;
411
+
412
  foreach ( $apps_list as $index => $app ) {
413
  $site_without_http = trim( str_replace( array( 'http://', 'https://' ), '', $site_url ), '/' );
414
+
415
  if ( $app->DomainUrl === $site_without_http ) {
416
  $app_exists = $app;
417
+
418
  continue;
419
  }
420
  }
422
 
423
  // if no app, create one
424
  if ( ! $app_exists ) {
425
+
426
  // create new app
427
  $params = array(
428
  'DomainName' => $site_title,
433
  $params['DomainDescription'] = $site_description;
434
 
435
  $response = $this->request( 'app_create', $params );
436
+
437
  // errors?
438
  if ( ! empty( $response->message ) ) {
439
  $response->error = $response->message;
440
  break;
441
  }
442
+
443
  $app_exists = $response->data;
444
  }
445
+
446
  // check if we have the valid app data
447
  if ( empty( $app_exists->AppID ) || empty( $app_exists->SecretKey ) ) {
448
  $response = array( 'error' => __( 'Unexpected error occurred. Please try again later.', 'cookie-notice' ) );
449
  break;
450
  }
451
+
452
  // update options: app ID and secret key
453
  Cookie_Notice()->options['general'] = wp_parse_args( array( 'app_id' => $app_exists->AppID, 'app_key' => $app_exists->SecretKey ), Cookie_Notice()->options['general'] );
454
 
461
  $params = array(
462
  'AppID' => $app_exists->AppID,
463
  'DefaultLanguage' => 'en',
 
464
  );
465
+
466
+ // add translations if needed
467
+ if ( $locale_code[0] !== 'en' )
468
+ $params['Languages'] = array( $locale_code[0] );
469
 
470
  $response = $this->request( 'quick_config', $params );
471
 
472
  if ( $response->status === 200 ) {
473
  // @todo notify publish app
474
+ $params = array(
475
  'AppID' => $app_exists->AppID
476
  );
477
 
479
 
480
  if ( $response->status === 200 ) {
481
  $response = true;
482
+
483
  // update app status
484
  update_option( 'cookie_notice_status', 'active' );
485
  } else {
486
  // update app status
487
  update_option( 'cookie_notice_status', 'pending' );
488
+
489
  // errors?
490
  if ( ! empty( $response->error ) ) {
491
  break;
500
  } else {
501
  // update app status
502
  update_option( 'cookie_notice_status', 'pending' );
503
+
504
  // errors?
505
  if ( ! empty( $response->error ) ) {
506
  $response->error = $response->error;
513
  break;
514
  }
515
  }
516
+
517
  break;
518
 
519
  case 'configure':
530
  'cn_privacy_paper',
531
  'cn_privacy_contact',
532
  );
533
+
534
  $options = array();
535
+
536
  // loop through potential config form fields
537
  foreach ( $fields as $field ) {
538
+ switch ($field) {
539
  case 'cn_position':
540
  // sanitize position
541
  $position = isset( $_POST[$field] ) ? sanitize_key( $_POST[$field] ) : '';
663
  break;
664
 
665
  case 'cn_privacy_contact':
666
+ $options['config']['privacyContact'] = false; // isset( $_POST[$field] );
667
  break;
668
  }
669
  }
670
+
671
  // set options
672
  set_transient( 'cookie_notice_app_config', $options, 24 * HOUR_IN_SECONDS );
673
+
674
  break;
675
 
676
  case 'select_plan':
680
  echo json_encode( $response );
681
  exit;
682
  }
683
+
684
  /**
685
  * API request.
686
  *
689
  * @return false|object
690
  */
691
  private function request( $request = '', $params = '' ) {
692
+ $api_args = array(
693
+ 'timeout' => 60,
694
+ 'sslverify' => false,
695
  'headers' => array( 'x-api-key' => $this->x_api_key )
696
  );
697
  $api_params = array();
702
  $api_token = ! empty( $data_token->token ) ? $data_token->token : '';
703
  $admin_id = ! empty( $data_token->email ) ? $data_token->email : '';
704
 
705
+ switch ($request) {
706
  case 'register':
707
  $api_url = $this->account_api_url . '/api/account/account/registration';
708
  $api_args['method'] = 'POST';
717
  $api_url = $this->account_api_url . '/api/account/app/list';
718
  $api_args['method'] = 'GET';
719
  $api_args['headers'] = array_merge(
720
+ $api_args['headers'],
721
+ array(
722
+ 'Authorization' => 'Bearer ' . $api_token
723
+ )
724
  );
725
  break;
726
 
728
  $api_url = $this->account_api_url . '/api/account/app/add';
729
  $api_args['method'] = 'POST';
730
  $api_args['headers'] = array_merge(
731
+ $api_args['headers'],
732
+ array(
733
+ 'Authorization' => 'Bearer ' . $api_token
734
+ )
735
  );
736
  break;
737
+
738
+ case 'get_analytics':
739
+ $api_url = $this->transactional_api_url . '/api/transactional/analytics/analytics-data';
740
+ $api_args['method'] = 'GET';
741
+ $api_args['headers'] = array_merge(
742
+ $api_args['headers'],
743
+ array(
744
+ 'app-id' => Cookie_Notice()->options['general']['app_id'],
745
+ 'app-secret-key' => Cookie_Notice()->options['general']['app_key'],
746
+ )
747
+ );
748
+ break;
749
+
750
  case 'get_config':
751
  $api_url = $this->designer_api_url . '/api/designer/user-design-live';
752
  $api_args['method'] = 'GET';
753
  break;
754
+
755
  case 'quick_config':
756
  $json = true;
757
  $api_url = $this->designer_api_url . '/api/designer/user-design/quick';
758
  $api_args['method'] = 'POST';
759
  $api_args['headers'] = array_merge(
760
+ $api_args['headers'],
761
+ array(
762
+ 'Authorization' => 'Bearer ' . $api_token,
763
+ 'Content-Type' => 'application/json; charset=utf-8'
764
+ )
765
  );
766
  break;
767
+
768
  case 'notify_app':
769
  $json = true;
770
  $api_url = $this->account_api_url . '/api/account/app/notifyAppPublished';
771
  $api_args['method'] = 'POST';
772
  $api_args['headers'] = array_merge(
773
+ $api_args['headers'],
774
+ array(
775
+ 'Authorization' => 'Bearer ' . $api_token,
776
+ 'Content-Type' => 'application/json; charset=utf-8'
777
+ )
778
  );
779
  break;
780
 
783
  $api_url = $this->account_api_url . '/api/account/braintree';
784
  $api_args['method'] = 'GET';
785
  $api_args['headers'] = array_merge(
786
+ $api_args['headers'],
787
+ array(
788
+ 'Authorization' => 'Bearer ' . $api_token
789
+ )
790
  );
791
  break;
792
 
797
  $api_args['method'] = 'POST';
798
  $api_args['data_format'] = 'body';
799
  $api_args['headers'] = array_merge(
800
+ $api_args['headers'],
801
+ array(
802
+ 'Authorization' => 'Bearer ' . $api_token,
803
+ 'Content-Type' => 'application/json; charset=utf-8'
804
+ )
805
  );
806
  break;
807
 
811
  $api_url = $this->account_api_url . '/api/account/braintree/createcustomer';
812
  $api_args['method'] = 'POST';
813
  $api_args['headers'] = array_merge(
814
+ $api_args['headers'],
815
+ array(
816
+ 'Authorization' => 'Bearer ' . $api_token,
817
+ 'Content-Type' => 'application/json; charset=utf-8'
818
+ )
819
  );
820
  break;
821
 
825
  $api_url = $this->account_api_url . '/api/account/braintree/createsubscription';
826
  $api_args['method'] = 'POST';
827
  $api_args['headers'] = array_merge(
828
+ $api_args['headers'],
829
+ array(
830
+ 'Authorization' => 'Bearer ' . $api_token,
831
+ 'Content-Type' => 'application/json; charset=utf-8'
832
+ )
833
  );
834
  break;
835
  }
847
  else
848
  $api_args['body'] = $api_params;
849
  }
850
+
851
  $response = wp_remote_request( $api_url, $api_args );
852
 
853
  if ( is_wp_error( $response ) )
867
 
868
  return $result;
869
  }
870
+
871
  /**
872
+ * Check whether WP Cron needs to add new task.
873
+ *
874
+ * @return void
875
+ */
876
+ public function check_cron() {
877
+ // compliance acitve only
878
+ if ( Cookie_Notice()->get_status() == 'active' ) {
879
+ if ( ! wp_next_scheduled( 'cookie_notice_get_app_analytics' ) ) {
880
+ // set schedule
881
+ wp_schedule_event( time(), 'hourly', 'cookie_notice_get_app_analytics' ); // hourly
882
+ }
883
+ } elseif ( wp_next_scheduled( 'cookie_notice_get_app_analytics' ) ) {
884
+ wp_clear_scheduled_hook( 'cookie_notice_get_app_analytics' );
885
+ }
886
+ }
887
+
888
+ /**
889
+ * Get app config
890
+ */
891
+ public function get_app_analytics() {
892
+ $result = array();
893
+
894
+ $params = array(
895
+ 'AppID' => Cookie_Notice()->options['general']['app_id']
896
+ );
897
+
898
+ $response = $this->request( 'get_analytics', $params );
899
+
900
+ // echo '<pre>'; print_r( $response ); echo '</pre>'; exit;
901
+
902
+ // get analytics
903
+ if ( ! empty( $response->data ) ) {
904
+ $result = ! empty( $response->data ) ? map_deep( (array) $response->data, 'sanitize_text_field' ) : array();
905
+
906
+ // update app status
907
+ if ( ! empty( $result ) ) {
908
+ // add time updated
909
+ $result['lastUpdated'] = date( 'Y-m-d H:i:s', current_time( 'timestamp', true ) );
910
+
911
+ update_option( 'cookie_notice_app_analytics', $result, false );
912
+ }
913
+ }
914
+
915
+ return $result;
916
+ }
917
+
918
+ /**
919
+ * Get app status
920
  */
921
  public function get_app_status( $app_id ) {
922
  $result = '';
923
+
924
  if ( ! current_user_can( apply_filters( 'cn_manage_cookie_notice_cap', 'manage_options' ) ) )
925
  return false;
926
 
927
+ $params = array(
928
+ 'AppID' => $app_id
929
  );
930
+
931
  $response = $this->request( 'get_config', $params );
932
+
933
  if ( ! empty( $response->data ) ) {
934
  $result = 'active';
935
  } else {
940
  $result = '';
941
  }
942
  }
943
+
944
  return $result;
945
  }
946
 
973
 
974
  if ( 0 !== curl_errno( $curl ) || 200 !== curl_getinfo( $curl, CURLINFO_HTTP_CODE ) )
975
  $response = null;
976
+
977
  curl_close( $curl );
978
 
979
  return $response;
980
  }
981
+
982
+ }
includes/welcome.php CHANGED
@@ -74,8 +74,7 @@ class Cookie_Notice_Welcome {
74
  * @return string
75
  */
76
  public function admin_body_class( $classes ) {
77
- if ( isset( $_GET['page'] ) && $_GET['page'] === 'cookie-notice-welcome' )
78
- $classes .= ' folded';
79
 
80
  return $classes;
81
  }
@@ -104,7 +103,7 @@ class Cookie_Notice_Welcome {
104
  add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
105
  add_action( 'admin_footer', array( $this, 'admin_footer' ) );
106
 
107
- add_filter( 'admin_body_class', array( $this, 'admin_body_class' ) );
108
  }
109
 
110
  /**
74
  * @return string
75
  */
76
  public function admin_body_class( $classes ) {
77
+ $classes .= ' folded';
 
78
 
79
  return $classes;
80
  }
103
  add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
104
  add_action( 'admin_footer', array( $this, 'admin_footer' ) );
105
 
106
+ // add_filter( 'admin_body_class', array( $this, 'admin_body_class' ) );
107
  }
108
 
109
  /**
js/admin-dashboard.js ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function ($) {
2
+
3
+ // ready event
4
+ $(function () {
5
+
6
+ var charts = cnDashboardArgs.charts;
7
+ // console.log(charts);
8
+
9
+ if (Object.entries(charts).length > 0) {
10
+ for (const [key, config] of Object.entries(charts)) {
11
+
12
+ var canvas = document.getElementById('cn-' + key + '-chart');
13
+ // console.log(canvas);
14
+
15
+ // options per chart type
16
+ var options = {
17
+ doughnut: {
18
+ responsive: true,
19
+ plugins: {
20
+ legend: {
21
+ position: 'top',
22
+ },
23
+ },
24
+ hover: {
25
+ mode: 'label'
26
+ },
27
+ layout: {
28
+ padding: 0
29
+ }
30
+ },
31
+ line: {
32
+ scales: {
33
+ xAxes: [{
34
+ afterTickToLabelConversion: function (data) {
35
+
36
+
37
+ var xLabels = data.ticks;
38
+
39
+ xLabels.forEach(function (labels, i) {
40
+ if (i % 2 == 1) {
41
+ xLabels[i] = '';
42
+ }
43
+ });
44
+ }
45
+ }]
46
+ }
47
+ }
48
+ }
49
+
50
+ // console.log(config);
51
+
52
+ if (canvas) {
53
+ config.options = options.hasOwnProperty(config.type) ? options[config.type] : {};
54
+
55
+ var chart = new Chart(canvas, config);
56
+
57
+ // console.log(config);
58
+ // console.log(chart);
59
+
60
+ chart.update();
61
+ }
62
+
63
+ }
64
+ }
65
+ });
66
+
67
+ })(jQuery);
js/front.js CHANGED
@@ -356,10 +356,23 @@
356
 
357
  return null;
358
  };
 
 
 
 
 
 
 
 
 
359
 
360
  // initialize
361
  this.init = function () {
362
  var _this = this;
 
 
 
 
363
 
364
  this.cookiesAccepted = this.getStatus( true );
365
  this.noticeContainer = document.getElementById( 'cookie-notice' );
356
 
357
  return null;
358
  };
359
+
360
+ // check if displaye in an iframe
361
+ this.inIframe = function () {
362
+ try {
363
+ return window.self !== window.top;
364
+ } catch (e) {
365
+ return true;
366
+ }
367
+ }
368
 
369
  // initialize
370
  this.init = function () {
371
  var _this = this;
372
+
373
+ // bail if in iframe
374
+ if ( this.inIframe() === true )
375
+ return;
376
 
377
  this.cookiesAccepted = this.getStatus( true );
378
  this.noticeContainer = document.getElementById( 'cookie-notice' );
js/front.min.js CHANGED
@@ -1 +1 @@
1
- !function(){if("function"==typeof window.CustomEvent)return!1;function e(e,t){t=t||{bubbles:!1,cancelable:!1,detail:void 0};var n=document.createEvent("CustomEvent");return n.initCustomEvent(e,t.bubbles,t.cancelable,t.detail),n}e.prototype=window.Event.prototype,window.CustomEvent=e}(),function(){var e=function(e){return new RegExp("(^| )"+e+"( |$)")},t=function(e,t,n){for(var i=0;i<e.length;i++)t.call(n,e[i])};function n(e){this.element=e}n.prototype={add:function(){t(arguments,function(e){this.contains(e)||(this.element.className+=this.element.className.length>0?" "+e:e)},this)},remove:function(){t(arguments,function(t){this.element.className=this.element.className.replace(e(t),"")},this)},toggle:function(e){return this.contains(e)?(this.remove(e),!1):(this.add(e),!0)},contains:function(t){return e(t).test(this.element.className)},replace:function(e,t){this.remove(e),this.add(t)}},"classList"in Element.prototype||Object.defineProperty(Element.prototype,"classList",{get:function(){return new n(this)}}),window.DOMTokenList&&null==DOMTokenList.prototype.replace&&(DOMTokenList.prototype.replace=n.prototype.replace)}(),function(e,t,n){var i=new function(){this.cookiesAccepted=null,this.noticeContainer=null,this.setStatus=function(n){var i=this;"1"===cnArgs.onScroll&&e.removeEventListener("scroll",this.handleScroll);var o=new Date,s=new Date;"accept"===n?(n="true",s.setTime(parseInt(o.getTime())+1e3*parseInt(cnArgs.cookieTime))):(n="false",s.setTime(parseInt(o.getTime())+1e3*parseInt(cnArgs.cookieTimeRejected))),t.cookie=cnArgs.cookieName+"="+n+";expires="+s.toUTCString()+";"+(cnArgs.cookieDomain?"domain="+cnArgs.cookieDomain+";":"")+(cnArgs.cookiePath?"path="+cnArgs.cookiePath+";":"")+("1"===cnArgs.secure?"secure;":""),this.cookiesAccepted="true"===n;var c=new CustomEvent("setCookieNotice",{detail:{value:n,time:o,expires:s,data:cnArgs}});if(t.dispatchEvent(c),this.setBodyClass(["cookies-set","true"===n?"cookies-accepted":"cookies-refused"]),this.hideCookieNotice(),"automatic"===cnArgs.revokeCookiesOpt&&(this.noticeContainer.addEventListener("animationend",function e(){i.noticeContainer.removeEventListener("animationend",e),i.showRevokeNotice()}),this.noticeContainer.addEventListener("webkitAnimationEnd",function e(){i.noticeContainer.removeEventListener("webkitAnimationEnd",e),i.showRevokeNotice()})),"1"===cnArgs.redirection&&("true"===n&&null===this.cookiesAccepted||n!==this.cookiesAccepted&&null!==this.cookiesAccepted)){var a=e.location.protocol+"//",r=e.location.host+"/"+e.location.pathname;"1"===cnArgs.cache?(a=a+r.replace("//","/")+(""===e.location.search?"?":e.location.search+"&")+"cn-reloaded=1"+e.location.hash,e.location.href=a):(a=a+r.replace("//","/")+e.location.search+e.location.hash,e.location.reload(!0))}else;},this.getStatus=function(e){var n=("; "+t.cookie).split("; cookie_notice_accepted=");if(2===n.length){var i=n.pop().split(";").shift();return e?"true"===i:i}return null},this.showCookieNotice=function(){var e=this,n=new CustomEvent("showCookieNotice",{detail:{data:cnArgs}});t.dispatchEvent(n),this.noticeContainer.classList.remove("cookie-notice-hidden"),this.noticeContainer.classList.add("cn-animated"),this.noticeContainer.classList.add("cookie-notice-visible"),this.noticeContainer.addEventListener("animationend",function t(){e.noticeContainer.removeEventListener("animationend",t),e.noticeContainer.classList.remove("cn-animated")}),this.noticeContainer.addEventListener("webkitAnimationEnd",function t(){e.noticeContainer.removeEventListener("webkitAnimationEnd",t),e.noticeContainer.classList.remove("cn-animated")})},this.hideCookieNotice=function(){var e=this,n=new CustomEvent("hideCookieNotice",{detail:{data:cnArgs}});t.dispatchEvent(n),this.noticeContainer.classList.add("cn-animated"),this.noticeContainer.classList.remove("cookie-notice-visible"),this.noticeContainer.addEventListener("animationend",function t(){e.noticeContainer.removeEventListener("animationend",t),e.noticeContainer.classList.remove("cn-animated"),e.noticeContainer.classList.add("cookie-notice-hidden")}),this.noticeContainer.addEventListener("webkitAnimationEnd",function t(){e.noticeContainer.removeEventListener("webkitAnimationEnd",t),e.noticeContainer.classList.remove("cn-animated"),e.noticeContainer.classList.add("cookie-notice-hidden")})},this.showRevokeNotice=function(){var e=this,n=new CustomEvent("showRevokeNotice",{detail:{data:cnArgs}});t.dispatchEvent(n),this.noticeContainer.classList.remove("cookie-revoke-hidden"),this.noticeContainer.classList.add("cn-animated"),this.noticeContainer.classList.add("cookie-revoke-visible"),this.noticeContainer.addEventListener("animationend",function t(){e.noticeContainer.removeEventListener("animationend",t),e.noticeContainer.classList.remove("cn-animated")}),this.noticeContainer.addEventListener("webkitAnimationEnd",function t(){e.noticeContainer.removeEventListener("webkitAnimationEnd",t),e.noticeContainer.classList.remove("cn-animated")})},this.hideRevokeNotice=function(){var e=this,n=new CustomEvent("hideRevokeNotice",{detail:{data:cnArgs}});t.dispatchEvent(n),this.noticeContainer.classList.add("cn-animated"),this.noticeContainer.classList.remove("cookie-revoke-visible"),this.noticeContainer.addEventListener("animationend",function t(){e.noticeContainer.removeEventListener("animationend",t),e.noticeContainer.classList.remove("cn-animated"),e.noticeContainer.classList.add("cookie-revoke-hidden")}),this.noticeContainer.addEventListener("webkitAnimationEnd",function t(){e.noticeContainer.removeEventListener("webkitAnimationEnd",t),e.noticeContainer.classList.remove("cn-animated"),e.noticeContainer.classList.add("cookie-revoke-hidden")})},this.setBodyClass=function(e){t.body.classList.remove("cookies-revoke"),t.body.classList.remove("cookies-accepted"),t.body.classList.remove("cookies-refused"),t.body.classList.remove("cookies-set"),t.body.classList.remove("cookies-not-set");for(var n=0;n<e.length;n++)t.body.classList.add(e[n])},this.handleScroll=function(){(e.pageYOffset||(t.documentElement||t.body.parentNode||t.body).scrollTop)>parseInt(cnArgs.onScrollOffset)&&this.setStatus("accept")},this.getClosest=function(e,n){for(Element.prototype.matches||(Element.prototype.matches=Element.prototype.matchesSelector||Element.prototype.mozMatchesSelector||Element.prototype.msMatchesSelector||Element.prototype.oMatchesSelector||Element.prototype.webkitMatchesSelector||function(e){for(var t=(this.document||this.ownerDocument).querySelectorAll(e),n=t.length;--n>=0&&t.item(n)!==this;);return n>-1});e&&e!==t;e=e.parentNode)if(e.matches(n))return e;return null},this.init=function(){var n=this;this.cookiesAccepted=this.getStatus(!0),this.noticeContainer=t.getElementById("cookie-notice");var i=t.getElementsByClassName("cn-set-cookie"),o=t.getElementsByClassName("cn-revoke-cookie"),s=t.getElementById("cn-close-notice");this.noticeContainer.classList.add("cn-effect-"+cnArgs.hideEffect),null===this.cookiesAccepted?("1"===cnArgs.onScroll&&e.addEventListener("scroll",function(e){n.handleScroll()}),"1"===cnArgs.onClick&&e.addEventListener("click",function(e){null===n.getClosest(e.target,"#cookie-notice")&&n.setStatus("accept")},!0),this.setBodyClass(["cookies-not-set"]),this.showCookieNotice()):(this.setBodyClass(["cookies-set",!0===this.cookiesAccepted?"cookies-accepted":"cookies-refused"]),"1"===cnArgs.revokeCookies&&"automatic"===cnArgs.revokeCookiesOpt&&this.showRevokeNotice());for(var c=0;c<i.length;c++)i[c].addEventListener("click",function(e){e.preventDefault(),e.stopPropagation(),n.setStatus(this.dataset.cookieSet)});"null"!==s&&s.addEventListener("click",function(e){e.preventDefault(),e.stopPropagation(),n.setStatus("reject")});for(c=0;c<o.length;c++)o[c].addEventListener("click",function(e){e.preventDefault(),n.noticeContainer.classList.contains("cookie-revoke-visible")?(n.hideRevokeNotice(),n.noticeContainer.addEventListener("animationend",function e(){n.noticeContainer.removeEventListener("animationend",e),n.showCookieNotice()}),n.noticeContainer.addEventListener("webkitAnimationEnd",function e(){n.noticeContainer.removeEventListener("webkitAnimationEnd",e),n.showCookieNotice()})):n.noticeContainer.classList.contains("cookie-notice-hidden")&&n.noticeContainer.classList.contains("cookie-revoke-hidden")&&n.showCookieNotice()})}};e.addEventListener("load",function(){i.init()},!1)}(window,document);
1
+ !function(){function e(e,t){t=t||{bubbles:!1,cancelable:!1,detail:void 0};var n=document.createEvent("CustomEvent");return n.initCustomEvent(e,t.bubbles,t.cancelable,t.detail),n}"function"!=typeof window.CustomEvent&&(e.prototype=window.Event.prototype,window.CustomEvent=e)}(),function(){function t(e){return new RegExp("(^| )"+e+"( |$)")}function e(e,t,n){for(var i=0;i<e.length;i++)t.call(n,e[i])}function n(e){this.element=e}n.prototype={add:function(){e(arguments,function(e){this.contains(e)||(this.element.className+=0<this.element.className.length?" "+e:e)},this)},remove:function(){e(arguments,function(e){this.element.className=this.element.className.replace(t(e),"")},this)},toggle:function(e){return this.contains(e)?(this.remove(e),!1):(this.add(e),!0)},contains:function(e){return t(e).test(this.element.className)},replace:function(e,t){this.remove(e),this.add(t)}},"classList"in Element.prototype||Object.defineProperty(Element.prototype,"classList",{get:function(){return new n(this)}}),window.DOMTokenList&&null==DOMTokenList.prototype.replace&&(DOMTokenList.prototype.replace=n.prototype.replace)}(),function(s,c){var e=new function(){this.cookiesAccepted=null,this.noticeContainer=null,this.setStatus=function(e){var t=this;"1"===cnArgs.onScroll&&s.removeEventListener("scroll",this.handleScroll);var n=new Date,i=new Date;"accept"===e?(e="true",i.setTime(parseInt(n.getTime())+1e3*parseInt(cnArgs.cookieTime))):(e="false",i.setTime(parseInt(n.getTime())+1e3*parseInt(cnArgs.cookieTimeRejected))),c.cookie=cnArgs.cookieName+"="+e+";expires="+i.toUTCString()+";"+(cnArgs.cookieDomain?"domain="+cnArgs.cookieDomain+";":"")+(cnArgs.cookiePath?"path="+cnArgs.cookiePath+";":"")+("1"===cnArgs.secure?"secure;":""),this.cookiesAccepted="true"===e;i=new CustomEvent("setCookieNotice",{detail:{value:e,time:n,expires:i,data:cnArgs}});c.dispatchEvent(i),this.setBodyClass(["cookies-set","true"===e?"cookies-accepted":"cookies-refused"]),this.hideCookieNotice(),"automatic"===cnArgs.revokeCookiesOpt&&(this.noticeContainer.addEventListener("animationend",function e(){t.noticeContainer.removeEventListener("animationend",e),t.showRevokeNotice()}),this.noticeContainer.addEventListener("webkitAnimationEnd",function e(){t.noticeContainer.removeEventListener("webkitAnimationEnd",e),t.showRevokeNotice()})),"1"===cnArgs.redirection&&("true"===e&&null===this.cookiesAccepted||e!==this.cookiesAccepted&&null!==this.cookiesAccepted)&&(i=s.location.protocol+"//",e=s.location.host+"/"+s.location.pathname,"1"===cnArgs.cache?(i=i+e.replace("//","/")+(""===s.location.search?"?":s.location.search+"&")+"cn-reloaded=1"+s.location.hash,s.location.href=i):(i=i+e.replace("//","/")+s.location.search+s.location.hash,s.location.reload(!0)))},this.getStatus=function(e){var t=("; "+c.cookie).split("; cookie_notice_accepted=");if(2!==t.length)return null;t=t.pop().split(";").shift();return e?"true"===t:t},this.showCookieNotice=function(){var t=this,e=new CustomEvent("showCookieNotice",{detail:{data:cnArgs}});c.dispatchEvent(e),this.noticeContainer.classList.remove("cookie-notice-hidden"),this.noticeContainer.classList.add("cn-animated"),this.noticeContainer.classList.add("cookie-notice-visible"),this.noticeContainer.addEventListener("animationend",function e(){t.noticeContainer.removeEventListener("animationend",e),t.noticeContainer.classList.remove("cn-animated")}),this.noticeContainer.addEventListener("webkitAnimationEnd",function e(){t.noticeContainer.removeEventListener("webkitAnimationEnd",e),t.noticeContainer.classList.remove("cn-animated")})},this.hideCookieNotice=function(){var t=this,e=new CustomEvent("hideCookieNotice",{detail:{data:cnArgs}});c.dispatchEvent(e),this.noticeContainer.classList.add("cn-animated"),this.noticeContainer.classList.remove("cookie-notice-visible"),this.noticeContainer.addEventListener("animationend",function e(){t.noticeContainer.removeEventListener("animationend",e),t.noticeContainer.classList.remove("cn-animated"),t.noticeContainer.classList.add("cookie-notice-hidden")}),this.noticeContainer.addEventListener("webkitAnimationEnd",function e(){t.noticeContainer.removeEventListener("webkitAnimationEnd",e),t.noticeContainer.classList.remove("cn-animated"),t.noticeContainer.classList.add("cookie-notice-hidden")})},this.showRevokeNotice=function(){var t=this,e=new CustomEvent("showRevokeNotice",{detail:{data:cnArgs}});c.dispatchEvent(e),this.noticeContainer.classList.remove("cookie-revoke-hidden"),this.noticeContainer.classList.add("cn-animated"),this.noticeContainer.classList.add("cookie-revoke-visible"),this.noticeContainer.addEventListener("animationend",function e(){t.noticeContainer.removeEventListener("animationend",e),t.noticeContainer.classList.remove("cn-animated")}),this.noticeContainer.addEventListener("webkitAnimationEnd",function e(){t.noticeContainer.removeEventListener("webkitAnimationEnd",e),t.noticeContainer.classList.remove("cn-animated")})},this.hideRevokeNotice=function(){var t=this,e=new CustomEvent("hideRevokeNotice",{detail:{data:cnArgs}});c.dispatchEvent(e),this.noticeContainer.classList.add("cn-animated"),this.noticeContainer.classList.remove("cookie-revoke-visible"),this.noticeContainer.addEventListener("animationend",function e(){t.noticeContainer.removeEventListener("animationend",e),t.noticeContainer.classList.remove("cn-animated"),t.noticeContainer.classList.add("cookie-revoke-hidden")}),this.noticeContainer.addEventListener("webkitAnimationEnd",function e(){t.noticeContainer.removeEventListener("webkitAnimationEnd",e),t.noticeContainer.classList.remove("cn-animated"),t.noticeContainer.classList.add("cookie-revoke-hidden")})},this.setBodyClass=function(e){c.body.classList.remove("cookies-revoke"),c.body.classList.remove("cookies-accepted"),c.body.classList.remove("cookies-refused"),c.body.classList.remove("cookies-set"),c.body.classList.remove("cookies-not-set");for(var t=0;t<e.length;t++)c.body.classList.add(e[t])},this.handleScroll=function(){(s.pageYOffset||(c.documentElement||c.body.parentNode||c.body).scrollTop)>parseInt(cnArgs.onScrollOffset)&&this.setStatus("accept")},this.getClosest=function(e,t){for(Element.prototype.matches||(Element.prototype.matches=Element.prototype.matchesSelector||Element.prototype.mozMatchesSelector||Element.prototype.msMatchesSelector||Element.prototype.oMatchesSelector||Element.prototype.webkitMatchesSelector||function(e){for(var t=(this.document||this.ownerDocument).querySelectorAll(e),n=t.length;0<=--n&&t.item(n)!==this;);return-1<n});e&&e!==c;e=e.parentNode)if(e.matches(t))return e;return null},this.inIframe=function(){try{return s.self!==s.top}catch(e){return!0}},this.init=function(){var t=this;if(!0!==this.inIframe()){this.cookiesAccepted=this.getStatus(!0),this.noticeContainer=c.getElementById("cookie-notice");var e=c.getElementsByClassName("cn-set-cookie"),n=c.getElementsByClassName("cn-revoke-cookie"),i=c.getElementById("cn-close-notice");this.noticeContainer.classList.add("cn-effect-"+cnArgs.hideEffect),null===this.cookiesAccepted?("1"===cnArgs.onScroll&&s.addEventListener("scroll",function(e){t.handleScroll()}),"1"===cnArgs.onClick&&s.addEventListener("click",function(e){null===t.getClosest(e.target,"#cookie-notice")&&t.setStatus("accept")},!0),this.setBodyClass(["cookies-not-set"]),this.showCookieNotice()):(this.setBodyClass(["cookies-set",!0===this.cookiesAccepted?"cookies-accepted":"cookies-refused"]),"1"===cnArgs.revokeCookies&&"automatic"===cnArgs.revokeCookiesOpt&&this.showRevokeNotice());for(var o=0;o<e.length;o++)e[o].addEventListener("click",function(e){e.preventDefault(),e.stopPropagation(),t.setStatus(this.dataset.cookieSet)});"null"!==i&&i.addEventListener("click",function(e){e.preventDefault(),e.stopPropagation(),t.setStatus("reject")});for(o=0;o<n.length;o++)n[o].addEventListener("click",function(e){e.preventDefault(),t.noticeContainer.classList.contains("cookie-revoke-visible")?(t.hideRevokeNotice(),t.noticeContainer.addEventListener("animationend",function e(){t.noticeContainer.removeEventListener("animationend",e),t.showCookieNotice()}),t.noticeContainer.addEventListener("webkitAnimationEnd",function e(){t.noticeContainer.removeEventListener("webkitAnimationEnd",e),t.showCookieNotice()})):t.noticeContainer.classList.contains("cookie-notice-hidden")&&t.noticeContainer.classList.contains("cookie-revoke-hidden")&&t.showCookieNotice()})}}};s.addEventListener("load",function(){e.init()},!1)}(window,document);
languages/cookie-notice.pot CHANGED
@@ -2,7 +2,7 @@
2
  msgid ""
3
  msgstr ""
4
  "Project-Id-Version: Cookie Notice\n"
5
- "POT-Creation-Date: 2021-11-26 13:36+0100\n"
6
  "PO-Revision-Date: 2015-03-24 11:30+0100\n"
7
  "Last-Translator: Bartosz Arendt <info@dfactory.eu>\n"
8
  "Language-Team: dFactory <info@dfactory.eu>\n"
@@ -10,93 +10,183 @@ msgstr ""
10
  "MIME-Version: 1.0\n"
11
  "Content-Type: text/plain; charset=UTF-8\n"
12
  "Content-Transfer-Encoding: 8bit\n"
13
- "X-Generator: Poedit 2.4.2\n"
14
  "X-Poedit-KeywordsList: gettext;gettext_noop;__;_e;_n\n"
15
  "X-Poedit-Basepath: .\n"
16
  "X-Poedit-SourceCharset: UTF-8\n"
17
  "X-Poedit-SearchPath-0: ..\n"
18
 
19
- #: ../cookie-notice.php:255
20
- msgid "Make sure your website complies with the latest cookie consent laws"
21
  msgstr ""
22
 
23
- #: ../cookie-notice.php:255
24
- msgid "Run compliance check to learn if your website complies with the lastes consent record storage and cookie blocking requirements."
25
  msgstr ""
26
 
27
- #: ../cookie-notice.php:255
28
  msgid "Run Compliance Check"
29
  msgstr ""
30
 
31
- #: ../cookie-notice.php:255
32
  msgid "Dismiss Notice"
33
  msgstr ""
34
 
35
- #: ../cookie-notice.php:502
36
  msgid "Cookie Notice & Compliance - Deactivation survey"
37
  msgstr ""
38
 
39
- #: ../cookie-notice.php:558
40
  msgid "Settings"
41
  msgstr ""
42
 
43
- #: ../cookie-notice.php:562 ../includes/settings.php:216
44
  msgid "Free Upgrade"
45
  msgstr ""
46
 
47
- #: ../cookie-notice.php:585
48
  msgid "We're sorry to see you go. Could you please tell us what happened?"
49
  msgstr ""
50
 
51
- #: ../cookie-notice.php:589
52
  msgid "I couldn't figure out how to make it work."
53
  msgstr ""
54
 
55
- #: ../cookie-notice.php:590
56
  msgid "I found another plugin to use for the same task."
57
  msgstr ""
58
 
59
- #: ../cookie-notice.php:591
60
  msgid "The Cookie Compliance banner is too big."
61
  msgstr ""
62
 
63
- #: ../cookie-notice.php:592
64
  msgid "The Cookie Compliance consent choices (Silver, Gold, Platinum) are confusing."
65
  msgstr ""
66
 
67
- #: ../cookie-notice.php:593
68
  msgid "The Cookie Compliance default settings are too strict."
69
  msgstr ""
70
 
71
- #: ../cookie-notice.php:594
72
  msgid "The web application user interface is not clear to me."
73
  msgstr ""
74
 
75
- #: ../cookie-notice.php:595
76
  msgid "Support isn't timely."
77
  msgstr ""
78
 
79
- #: ../cookie-notice.php:596
80
  msgid "Other"
81
  msgstr ""
82
 
83
- #: ../cookie-notice.php:610
84
  msgid "Cancel"
85
  msgstr ""
86
 
87
- #: ../cookie-notice.php:611
88
  msgid "Deactivate"
89
  msgstr ""
90
 
91
- #: ../cookie-notice.php:612
92
  msgid "Deactivate & Submit"
93
  msgstr ""
94
 
95
- #: ../includes/settings.php:48 ../includes/welcome.php:457
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
96
  msgid "Top"
97
  msgstr ""
98
 
99
- #: ../includes/settings.php:49 ../includes/welcome.php:456
100
  msgid "Bottom"
101
  msgstr ""
102
 
@@ -132,7 +222,7 @@ msgstr ""
132
  msgid "Banner"
133
  msgstr ""
134
 
135
- #: ../includes/settings.php:75 ../includes/settings.php:270
136
  msgid "Message"
137
  msgstr ""
138
 
@@ -237,7 +327,7 @@ msgid "Save my preferences"
237
  msgstr ""
238
 
239
  #: ../includes/settings.php:132 ../includes/settings.php:153
240
- #: ../includes/settings.php:272
241
  msgid "Privacy policy"
242
  msgstr ""
243
 
@@ -269,7 +359,7 @@ msgstr ""
269
  msgid "Highest level of personalisation. Data accessed to make ads and media more relevant. Data shared with 3rd parties may be use to track you on this site and other sites you visit."
270
  msgstr ""
271
 
272
- #: ../includes/settings.php:143 ../includes/welcome.php:285
273
  msgid "month"
274
  msgstr ""
275
 
@@ -293,11 +383,11 @@ msgstr ""
293
  msgid "You can revoke your consent any time using the Revoke consent button."
294
  msgstr ""
295
 
296
- #: ../includes/settings.php:152 ../includes/settings.php:274
297
  msgid "Revoke consent"
298
  msgstr ""
299
 
300
- #: ../includes/settings.php:188 ../includes/welcome.php:380
301
  msgid "Cookie Notice"
302
  msgstr ""
303
 
@@ -309,383 +399,411 @@ msgstr ""
309
  msgid "Cookie Notice & Compliance for GDPR/CCPA"
310
  msgstr ""
311
 
312
- #: ../includes/settings.php:208
313
  msgid "Promote the privacy of your website visitors without affecting how you do your business."
314
  msgstr ""
315
 
316
- #: ../includes/settings.php:211 ../includes/welcome.php:171
317
- #: ../includes/welcome.php:212
318
  msgid "The next generation of Cookie Notice"
319
  msgstr ""
320
 
321
- #: ../includes/settings.php:213
322
  msgid "A free web application to help you deliver better consent experiences and comply with GDPR, CCPA and other data privacy laws more effectively."
323
  msgstr ""
324
 
 
 
 
 
325
  #: ../includes/settings.php:232
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
326
  msgid "Reset to defaults"
327
  msgstr ""
328
 
329
- #: ../includes/settings.php:250 ../includes/settings.php:264
330
  msgid "Compliance Settings"
331
  msgstr ""
332
 
333
- #: ../includes/settings.php:251 ../includes/settings.php:265
334
  msgid "Compliance status"
335
  msgstr ""
336
 
337
- #: ../includes/settings.php:252 ../includes/settings.php:266
338
  msgid "App ID"
339
  msgstr ""
340
 
341
- #: ../includes/settings.php:253 ../includes/settings.php:267
342
  msgid "App Key"
343
  msgstr ""
344
 
345
- #: ../includes/settings.php:255
346
  msgid "Miscellaneous Settings"
347
  msgstr ""
348
 
349
- #: ../includes/settings.php:256 ../includes/settings.php:312
350
- #: ../includes/settings.php:327 ../includes/settings.php:342
351
- #: ../includes/welcome.php:381
352
  msgid "Autoblocking"
353
  msgstr ""
354
 
355
- #: ../includes/settings.php:257
356
  msgid "Hide for logged in"
357
  msgstr ""
358
 
359
- #: ../includes/settings.php:258
360
  msgid "Cache"
361
  msgstr ""
362
 
363
- #: ../includes/settings.php:259 ../includes/settings.php:281
364
  msgid "Script placement"
365
  msgstr ""
366
 
367
- #: ../includes/settings.php:260 ../includes/settings.php:282
368
  msgid "Deactivation"
369
  msgstr ""
370
 
371
- #: ../includes/settings.php:269
372
  msgid "Notice Settings"
373
  msgstr ""
374
 
375
- #: ../includes/settings.php:271
376
  msgid "Button text"
377
  msgstr ""
378
 
379
- #: ../includes/settings.php:273
380
  msgid "Refuse consent"
381
  msgstr ""
382
 
383
- #: ../includes/settings.php:275
384
  msgid "Script blocking"
385
  msgstr ""
386
 
387
- #: ../includes/settings.php:276
388
  msgid "Reloading"
389
  msgstr ""
390
 
391
- #: ../includes/settings.php:277
392
  msgid "On scroll"
393
  msgstr ""
394
 
395
- #: ../includes/settings.php:278
396
  msgid "On click"
397
  msgstr ""
398
 
399
- #: ../includes/settings.php:279
400
  msgid "Accepted expiry"
401
  msgstr ""
402
 
403
- #: ../includes/settings.php:280
404
  msgid "Rejected expiry"
405
  msgstr ""
406
 
407
- #: ../includes/settings.php:285
408
  msgid "Notice Design"
409
  msgstr ""
410
 
411
- #: ../includes/settings.php:286
412
  msgid "Position"
413
  msgstr ""
414
 
415
- #: ../includes/settings.php:287
416
  msgid "Animation"
417
  msgstr ""
418
 
419
- #: ../includes/settings.php:288
420
  msgid "Colors"
421
  msgstr ""
422
 
423
- #: ../includes/settings.php:289
424
  msgid "Button class"
425
  msgstr ""
426
 
427
- #: ../includes/settings.php:311 ../includes/settings.php:326
428
- #: ../includes/settings.php:341
429
  msgid "Notice"
430
  msgstr ""
431
 
432
- #: ../includes/settings.php:311 ../includes/settings.php:312
433
- #: ../includes/settings.php:313 ../includes/settings.php:314
434
- #: ../includes/settings.php:326 ../includes/settings.php:341
435
  msgid "Active"
436
  msgstr ""
437
 
438
- #: ../includes/settings.php:313 ../includes/settings.php:328
439
- #: ../includes/settings.php:343 ../includes/welcome.php:382
440
  msgid "Cookie Categories"
441
  msgstr ""
442
 
443
- #: ../includes/settings.php:314 ../includes/settings.php:329
444
- #: ../includes/settings.php:344 ../includes/welcome.php:383
445
  msgid "Proof-of-Consent"
446
  msgstr ""
447
 
448
- #: ../includes/settings.php:317
449
  msgid "Log in & Configure"
450
  msgstr ""
451
 
452
- #: ../includes/settings.php:318
453
  msgid "Log into the Cookie Compliance&trade; web application and configure your Privacy Experience."
454
  msgstr ""
455
 
456
- #: ../includes/settings.php:327 ../includes/settings.php:328
457
- #: ../includes/settings.php:329
458
  msgid "Pending"
459
  msgstr ""
460
 
461
- #: ../includes/settings.php:332
462
  msgid "Log in & configure"
463
  msgstr ""
464
 
465
- #: ../includes/settings.php:333
466
  msgid "Log into the Cookie Compliance&trade; web application and complete the setup process."
467
  msgstr ""
468
 
469
- #: ../includes/settings.php:342 ../includes/settings.php:343
470
- #: ../includes/settings.php:344
471
  msgid "Inactive"
472
  msgstr ""
473
 
474
- #: ../includes/settings.php:347
475
  msgid "Add Compliance features"
476
  msgstr ""
477
 
478
- #: ../includes/settings.php:348
479
  msgid "Sign up to Cookie Compliance&trade; and add GDPR, CCPA and other international data privacy laws compliance features."
480
  msgstr ""
481
 
482
- #: ../includes/settings.php:363
483
  msgid "Enter your Cookie Compliance&trade; application ID."
484
  msgstr ""
485
 
486
- #: ../includes/settings.php:375
487
  msgid "Enter your Cookie Compliance&trade; application secret key."
488
  msgstr ""
489
 
490
- #: ../includes/settings.php:385
491
  msgid "Enable to automatically block 3rd party scripts before user consent."
492
  msgstr ""
493
 
494
- #: ../includes/settings.php:386
495
  msgid "In case you're experiencing issues with your site disable that feature temporarily."
496
  msgstr ""
497
 
498
- #: ../includes/settings.php:397
499
  msgid "Purge Cache"
500
  msgstr ""
501
 
502
- #: ../includes/settings.php:399
503
  msgid "Click the Purge Cache button to refresh the app configuration."
504
  msgstr ""
505
 
506
- #: ../includes/settings.php:409
507
  msgid "Enable to hide the consent banner for logged in users."
508
  msgstr ""
509
 
510
- #: ../includes/settings.php:420
511
  msgid "Enter the cookie notice message."
512
  msgstr ""
513
 
514
- #: ../includes/settings.php:431
515
  msgid "The text of the option to accept the notice and make it disappear."
516
  msgstr ""
517
 
518
- #: ../includes/settings.php:441
519
  msgid "Enable to give to the user the possibility to refuse third party non functional cookies."
520
  msgstr ""
521
 
522
- #: ../includes/settings.php:445
523
  msgid "The text of the button to refuse the consent."
524
  msgstr ""
525
 
526
- #: ../includes/settings.php:463
527
  msgid "Head"
528
  msgstr ""
529
 
530
- #: ../includes/settings.php:464
531
  msgid "Body"
532
  msgstr ""
533
 
534
- #: ../includes/settings.php:467
535
  msgid "The code to be used in your site header, before the closing head tag."
536
  msgstr ""
537
 
538
- #: ../includes/settings.php:471
539
  msgid "The code to be used in your site footer, before the closing body tag."
540
  msgstr ""
541
 
542
- #: ../includes/settings.php:475
543
  msgid "Enter non functional cookies Javascript code here (for e.g. Google Analitycs) to be used after the notice is accepted."
544
  msgstr ""
545
 
546
- #: ../includes/settings.php:475
547
  msgid "To get the user consent status use the <code>cn_cookies_accepted()</code> function."
548
  msgstr ""
549
 
550
- #: ../includes/settings.php:486
551
  msgid "Enable to give to the user the possibility to revoke their consent <i>(requires \"Refuse consent\" option enabled)</i>."
552
  msgstr ""
553
 
554
- #: ../includes/settings.php:489
555
  msgid "Enter the revoke message."
556
  msgstr ""
557
 
558
- #: ../includes/settings.php:491
559
  msgid "The text of the button to revoke the consent."
560
  msgstr ""
561
 
562
- #: ../includes/settings.php:499
563
  msgid "Select the method for displaying the revoke button - automatic (in the banner) or manual using <code>[cookies_revoke]</code> shortcode."
564
  msgstr ""
565
 
566
- #: ../includes/settings.php:510
567
  msgid "Enable to reload the page after the notice is accepted."
568
  msgstr ""
569
 
570
- #: ../includes/settings.php:533
571
  msgid "Enable privacy policy link."
572
  msgstr ""
573
 
574
- #: ../includes/settings.php:536
575
  msgid "The text of the privacy policy button."
576
  msgstr ""
577
 
578
- #: ../includes/settings.php:548
579
  msgid "Select where to redirect user for more information."
580
  msgstr ""
581
 
582
- #: ../includes/settings.php:551
583
  msgid "-- select page --"
584
  msgstr ""
585
 
586
- #: ../includes/settings.php:562
587
  msgid "Select from one of your site's pages."
588
  msgstr ""
589
 
590
- #: ../includes/settings.php:568
591
  msgid "Synchronize with WordPress Privacy Policy page."
592
  msgstr ""
593
 
594
- #: ../includes/settings.php:575
595
  msgid "Enter the full URL starting with http(s)://"
596
  msgstr ""
597
 
598
- #: ../includes/settings.php:618
599
  msgid "The amount of time that the cookie should be stored for when user accepts the notice."
600
  msgstr ""
601
 
602
- #: ../includes/settings.php:641
603
  msgid "The amount of time that the cookie should be stored for when the user doesn't accept the notice."
604
  msgstr ""
605
 
606
- #: ../includes/settings.php:659
607
  msgid "Select where all the plugin scripts should be placed."
608
  msgstr ""
609
 
610
- #: ../includes/settings.php:679
611
  msgid "Select location for the notice."
612
  msgstr ""
613
 
614
- #: ../includes/settings.php:700
615
  msgid "Select the animation style."
616
  msgstr ""
617
 
618
- #: ../includes/settings.php:711
619
  msgid "Enable to accept the notice when user scrolls."
620
  msgstr ""
621
 
622
- #: ../includes/settings.php:714
623
  msgid "Number of pixels user has to scroll to accept the notice and make it disappear."
624
  msgstr ""
625
 
626
- #: ../includes/settings.php:725
627
  msgid "Enable to accept the notice on any click on the page."
628
  msgstr ""
629
 
630
- #: ../includes/settings.php:735
631
  msgid "Enable if you want all plugin data to be deleted on deactivation."
632
  msgstr ""
633
 
634
- #: ../includes/settings.php:747
635
  msgid "Enter additional button CSS classes separated by spaces."
636
  msgstr ""
637
 
638
- #: ../includes/settings.php:771
639
  msgid "Bar opacity"
640
  msgstr ""
641
 
642
- #: ../includes/settings.php:913
643
  msgid "Settings saved."
644
  msgstr ""
645
 
646
- #: ../includes/settings.php:920
647
  msgid "Settings restored to defaults."
648
  msgstr ""
649
 
650
- #: ../includes/settings.php:945
651
  msgid "Are you sure you want to reset these settings to defaults?"
652
  msgstr ""
653
 
654
- #: ../includes/welcome-api.php:35 ../includes/welcome-api.php:38
655
- #: ../includes/welcome-api.php:41 ../includes/welcome-api.php:44
656
- #: ../includes/welcome.php:140 ../includes/welcome.php:150
657
- #: ../includes/welcome.php:153
658
  msgid "You do not have permission to access this page."
659
  msgstr ""
660
 
661
- #: ../includes/welcome-api.php:75 ../includes/welcome-api.php:208
662
- #: ../includes/welcome-api.php:247 ../includes/welcome-api.php:370
663
- #: ../includes/welcome-api.php:444 ../includes/welcome-api.php:841
664
  #: ../includes/welcome.php:49
665
  msgid "Unexpected error occurred. Please try again later."
666
  msgstr ""
667
 
668
- #: ../includes/welcome-api.php:91
669
  msgid "Empty plan or payment method data."
670
  msgstr ""
671
 
672
- #: ../includes/welcome-api.php:120
673
  msgid "Unable to create customer data."
674
  msgstr ""
675
 
676
- #: ../includes/welcome-api.php:150
677
  msgid "Please accept the Terms of Service to proceed."
678
  msgstr ""
679
 
680
- #: ../includes/welcome-api.php:155 ../includes/welcome-api.php:341
681
  msgid "Email is not allowed to be empty."
682
  msgstr ""
683
 
684
- #: ../includes/welcome-api.php:160 ../includes/welcome-api.php:346
685
  msgid "Password is not allowed to be empty."
686
  msgstr ""
687
 
688
- #: ../includes/welcome-api.php:165
689
  msgid "Passwords do not match."
690
  msgstr ""
691
 
@@ -709,393 +827,389 @@ msgstr ""
709
  msgid "Please fill all the required fields."
710
  msgstr ""
711
 
712
- #: ../includes/welcome.php:173
713
  msgid "Cookie Compliance is a free web application that enables websites to take a proactive approach to data protection and consent laws."
714
  msgstr ""
715
 
716
- #: ../includes/welcome.php:179
717
  msgid "It is the first solution to offer <b>intentional consent</b>, a new consent framework that incorporates the latest guidelines from over 100+ countries, and emerging standards from leading international organizations like the IEEE."
718
  msgstr ""
719
 
720
- #: ../includes/welcome.php:180
721
  msgid "Cookie Notice includes <b>seamless integration</b> with Cookie Compliance to help your site comply with the latest updates to existing consent laws and provide a beautiful, multi-level experience to engage visitors in data privacy decisions."
722
  msgstr ""
723
 
724
- #: ../includes/welcome.php:184
725
  msgid "Sign up to Cookie Compliance"
726
  msgstr ""
727
 
728
- #: ../includes/welcome.php:185
729
  msgid "Skip for now"
730
  msgstr ""
731
 
732
- #: ../includes/welcome.php:214
733
  msgid "Take a proactive approach to data protection and consent laws by signing up for Cookie Compliance account. Then select a limited Basic Plan for free or get one of the Professional Plans for unlimited visits, consent storage, languages and customizations."
734
  msgstr ""
735
 
736
- #: ../includes/welcome.php:258
737
  msgid "Compliance Plans"
738
  msgstr ""
739
 
740
- #: ../includes/welcome.php:264 ../includes/welcome.php:549
741
- #: ../includes/welcome.php:651
742
  msgid "Basic"
743
  msgstr ""
744
 
745
- #: ../includes/welcome.php:265
746
- msgid "Free"
 
747
  msgstr ""
748
 
749
  #: ../includes/welcome.php:268 ../includes/welcome.php:288
750
  #: ../includes/welcome.php:309
751
- msgid "GDPR, CCPA, ePrivacy, PECR compliance"
752
- msgstr ""
753
-
754
- #: ../includes/welcome.php:269 ../includes/welcome.php:289
755
- #: ../includes/welcome.php:310
756
  msgid "Consent Analytics Dashboard"
757
  msgstr ""
758
 
759
- #: ../includes/welcome.php:270
760
  msgid "<b>1,000</b> visits / month"
761
  msgstr ""
762
 
763
- #: ../includes/welcome.php:271
764
  msgid "<b>30 days</b> consent storage"
765
  msgstr ""
766
 
767
- #: ../includes/welcome.php:272
768
  msgid "<b>1 additional</b> language"
769
  msgstr ""
770
 
771
- #: ../includes/welcome.php:273
772
  msgid "<b>Basic</b> Support"
773
  msgstr ""
774
 
775
- #: ../includes/welcome.php:276 ../includes/welcome.php:296
776
- #: ../includes/welcome.php:317 ../includes/welcome.php:543
777
- #: ../includes/welcome.php:645
778
  msgid "Select Plan"
779
  msgstr ""
780
 
781
- #: ../includes/welcome.php:284
782
  msgid "Professional Monthly"
783
  msgstr ""
784
 
785
- #: ../includes/welcome.php:290 ../includes/welcome.php:311
786
  msgid "<b>Unlimited</b> visits"
787
  msgstr ""
788
 
789
- #: ../includes/welcome.php:291 ../includes/welcome.php:312
790
  msgid "<b>Lifetime</b> consent storage"
791
  msgstr ""
792
 
793
- #: ../includes/welcome.php:292 ../includes/welcome.php:313
794
  msgid "<b>Unlimited</b> languages"
795
  msgstr ""
796
 
797
- #: ../includes/welcome.php:293
798
  msgid "<b>Regular</b> Support"
799
  msgstr ""
800
 
801
- #: ../includes/welcome.php:304
802
  msgid "Professional Yearly"
803
  msgstr ""
804
 
805
- #: ../includes/welcome.php:305
806
  msgid "year"
807
  msgstr ""
808
 
809
- #: ../includes/welcome.php:306
810
  msgid "Best Value"
811
  msgstr ""
812
 
813
- #: ../includes/welcome.php:314
814
  msgid "<b>Premium</b> Support"
815
  msgstr ""
816
 
817
- #: ../includes/welcome.php:323
818
  msgid "I don’t want to create an account now"
819
  msgstr ""
820
 
821
- #: ../includes/welcome.php:339
822
  msgid "Congratulations"
823
  msgstr ""
824
 
825
- #: ../includes/welcome.php:340
826
  msgid "You are now promoting privacy with Hu-manity.co"
827
  msgstr ""
828
 
829
- #: ../includes/welcome.php:342
830
  msgid "Log in to your Cookie Compliance&trade; account and continue configuring your Privacy Experience."
831
  msgstr ""
832
 
833
- #: ../includes/welcome.php:345
834
  msgid "Go to Application"
835
  msgstr ""
836
 
837
- #: ../includes/welcome.php:370
838
  msgid "Compliance check"
839
  msgstr ""
840
 
841
- #: ../includes/welcome.php:371
842
  msgid "This is a Compliance Check to determine your site’s compliance with updated data processing and consent rules under GDPR, CCPA and other international data privacy laws."
843
  msgstr ""
844
 
845
- #: ../includes/welcome.php:373
846
  msgid "Site URL"
847
  msgstr ""
848
 
849
- #: ../includes/welcome.php:374
850
  msgid "Site Name"
851
  msgstr ""
852
 
853
- #: ../includes/welcome.php:377
854
  msgid "Checking..."
855
  msgstr ""
856
 
857
- #: ../includes/welcome.php:380
858
  msgid "Notifies visitors that site uses cookies."
859
  msgstr ""
860
 
861
- #: ../includes/welcome.php:381
862
  msgid "Non-essential cookies blocked until consent is registered."
863
  msgstr ""
864
 
865
- #: ../includes/welcome.php:382
866
  msgid "Separate consent requested per purpose of use."
867
  msgstr ""
868
 
869
- #: ../includes/welcome.php:383
870
  msgid "Proof-of-consent stored in secure audit format."
871
  msgstr ""
872
 
873
- #: ../includes/welcome.php:399
874
  msgid "Live Setup"
875
  msgstr ""
876
 
877
- #: ../includes/welcome.php:400
878
  msgid "Configure your Cookie Notice & Compliance design and compliance features through the options below. Click Apply Setup to save the configuration and go to selecting your preferred cookie solution."
879
  msgstr ""
880
 
881
- #: ../includes/welcome.php:404
882
  msgid "Banner Compliance"
883
  msgstr ""
884
 
885
- #: ../includes/welcome.php:425
886
  msgid "Select the laws that apply to your business"
887
  msgstr ""
888
 
889
- #: ../includes/welcome.php:427
890
  msgid "GDPR"
891
  msgstr ""
892
 
893
- #: ../includes/welcome.php:428
894
  msgid "CCPA"
895
  msgstr ""
896
 
897
- #: ../includes/welcome.php:432
898
  msgid "Select a naming style for the consent choices"
899
  msgstr ""
900
 
901
- #: ../includes/welcome.php:434
902
  msgid "Silver, Gold, Platinum (Default)​"
903
  msgstr ""
904
 
905
- #: ../includes/welcome.php:435
906
  msgid "Private, Balanced, Personalized"
907
  msgstr ""
908
 
909
- #: ../includes/welcome.php:436
910
  msgid "Reject All, Accept Some, Accept All​"
911
  msgstr ""
912
 
913
- #: ../includes/welcome.php:440
914
  msgid "Select additional information to include in the banner:"
915
  msgstr ""
916
 
917
- #: ../includes/welcome.php:442
918
  msgid "Display <b>Privacy Paper</b> to provide helpful data privacy and consent information to visitors."
919
  msgstr ""
920
 
921
- #: ../includes/welcome.php:443
922
  msgid "Display <b>Privacy Contact</b> to provide Data Controller contact information and links to external data privacy resources."
923
  msgstr ""
924
 
925
- #: ../includes/welcome.php:446 ../includes/welcome.php:474
926
  msgid "available for Cookie Compliance&trade; Pro plans only"
927
  msgstr ""
928
 
929
- #: ../includes/welcome.php:450
930
  msgid "Banner Design"
931
  msgstr ""
932
 
933
- #: ../includes/welcome.php:454
934
  msgid "Select your preferred display position"
935
  msgstr ""
936
 
937
- #: ../includes/welcome.php:458
938
  msgid "Left"
939
  msgstr ""
940
 
941
- #: ../includes/welcome.php:459
942
  msgid "Right"
943
  msgstr ""
944
 
945
- #: ../includes/welcome.php:460
946
  msgid "Center"
947
  msgstr ""
948
 
949
- #: ../includes/welcome.php:464
950
  msgid "Adjust the banner color scheme"
951
  msgstr ""
952
 
953
- #: ../includes/welcome.php:466
954
  msgid "Color of the buttons and interactive elements."
955
  msgstr ""
956
 
957
- #: ../includes/welcome.php:467
958
  msgid "Color of the banner background."
959
  msgstr ""
960
 
961
- #: ../includes/welcome.php:468
962
  msgid "Color of the body text."
963
  msgstr ""
964
 
965
- #: ../includes/welcome.php:469
966
  msgid "Color of the borders and inactive elements."
967
  msgstr ""
968
 
969
- #: ../includes/welcome.php:470
970
  msgid "Color of the heading text."
971
  msgstr ""
972
 
973
- #: ../includes/welcome.php:471
974
  msgid "Color of the button text."
975
  msgstr ""
976
 
977
- #: ../includes/welcome.php:479
978
  msgid "Apply Setup"
979
  msgstr ""
980
 
981
- #: ../includes/welcome.php:497
982
  msgid "Compliance account"
983
  msgstr ""
984
 
985
- #: ../includes/welcome.php:499
986
  msgid "Create a Cookie Compliance&trade; account and select your preferred plan."
987
  msgstr ""
988
 
989
- #: ../includes/welcome.php:503
990
  msgid "Create Account"
991
  msgstr ""
992
 
993
- #: ../includes/welcome.php:508 ../includes/welcome.php:618
994
  msgid "Email address"
995
  msgstr ""
996
 
997
- #: ../includes/welcome.php:511 ../includes/welcome.php:621
998
  msgid "Password"
999
  msgstr ""
1000
 
1001
- #: ../includes/welcome.php:514
1002
  msgid "Confirm Password"
1003
  msgstr ""
1004
 
1005
- #: ../includes/welcome.php:518
1006
  #, php-format
1007
  msgid "I have read and agree to the <a href=\"%s\" target=\"_blank\">Terms of Service"
1008
  msgstr ""
1009
 
1010
- #: ../includes/welcome.php:522
1011
  msgid "Sign Up"
1012
  msgstr ""
1013
 
1014
- #: ../includes/welcome.php:536
1015
  msgid "Already have an account?"
1016
  msgstr ""
1017
 
1018
- #: ../includes/welcome.php:536 ../includes/welcome.php:624
1019
  msgid "Sign in"
1020
  msgstr ""
1021
 
1022
- #: ../includes/welcome.php:550 ../includes/welcome.php:652
1023
  msgid "<b>Professional</b> Monthly"
1024
  msgstr ""
1025
 
1026
- #: ../includes/welcome.php:550 ../includes/welcome.php:652
1027
  msgid "/mo"
1028
  msgstr ""
1029
 
1030
- #: ../includes/welcome.php:551 ../includes/welcome.php:653
1031
  msgid "<b>Professional</b> Yearly"
1032
  msgstr ""
1033
 
1034
- #: ../includes/welcome.php:551 ../includes/welcome.php:653
1035
  msgid "/yr"
1036
  msgstr ""
1037
 
1038
- #: ../includes/welcome.php:555 ../includes/welcome.php:657
1039
  msgid "Confirm"
1040
  msgstr ""
1041
 
1042
- #: ../includes/welcome.php:559 ../includes/welcome.php:661
1043
  msgid "Payment Method"
1044
  msgstr ""
1045
 
1046
- #: ../includes/welcome.php:561 ../includes/welcome.php:663
1047
  msgid "Credit Card"
1048
  msgstr ""
1049
 
1050
- #: ../includes/welcome.php:562 ../includes/welcome.php:664
1051
  msgid "PayPal"
1052
  msgstr ""
1053
 
1054
- #: ../includes/welcome.php:568 ../includes/welcome.php:670
1055
  msgid "Card Number"
1056
  msgstr ""
1057
 
1058
- #: ../includes/welcome.php:572 ../includes/welcome.php:674
1059
  msgid "Expiration Date"
1060
  msgstr ""
1061
 
1062
- #: ../includes/welcome.php:576 ../includes/welcome.php:678
1063
  msgid "CVC/CVV"
1064
  msgstr ""
1065
 
1066
- #: ../includes/welcome.php:580 ../includes/welcome.php:682
1067
  msgid "Submit"
1068
  msgstr ""
1069
 
1070
- #: ../includes/welcome.php:607
1071
  msgid "Compliance Sign in"
1072
  msgstr ""
1073
 
1074
- #: ../includes/welcome.php:609
1075
  msgid "Sign in to your existing Cookie Compliance&trade; account and select your preferred plan."
1076
  msgstr ""
1077
 
1078
- #: ../includes/welcome.php:613
1079
  msgid "Account Login"
1080
  msgstr ""
1081
 
1082
- #: ../includes/welcome.php:638
1083
  msgid "Don't have an account yet?"
1084
  msgstr ""
1085
 
1086
- #: ../includes/welcome.php:638
1087
  msgid "Sign up"
1088
  msgstr ""
1089
 
1090
- #: ../includes/welcome.php:707
1091
  msgid "Success!"
1092
  msgstr ""
1093
 
1094
- #: ../includes/welcome.php:708
1095
  msgid "You have successfully upgraded your website to Cookie Compliance&trade;"
1096
  msgstr ""
1097
 
1098
- #: ../includes/welcome.php:708
1099
  #, php-format
1100
  msgid "Go to Cookie Compliance&trade; application now. Or access it anytime from your <a href=\"%s\">Cookie Notice settings page</a>."
1101
  msgstr ""
2
  msgid ""
3
  msgstr ""
4
  "Project-Id-Version: Cookie Notice\n"
5
+ "POT-Creation-Date: 2022-02-23 18:49+0100\n"
6
  "PO-Revision-Date: 2015-03-24 11:30+0100\n"
7
  "Last-Translator: Bartosz Arendt <info@dfactory.eu>\n"
8
  "Language-Team: dFactory <info@dfactory.eu>\n"
10
  "MIME-Version: 1.0\n"
11
  "Content-Type: text/plain; charset=UTF-8\n"
12
  "Content-Transfer-Encoding: 8bit\n"
13
+ "X-Generator: Poedit 3.0.1\n"
14
  "X-Poedit-KeywordsList: gettext;gettext_noop;__;_e;_n\n"
15
  "X-Poedit-Basepath: .\n"
16
  "X-Poedit-SourceCharset: UTF-8\n"
17
  "X-Poedit-SearchPath-0: ..\n"
18
 
19
+ #: ../cookie-notice.php:257
20
+ msgid "Compliance fines exceeded &euro;1.3 BILLION in 2021. Avoid the risk by making sure your website complies with the latest cookie consent laws."
21
  msgstr ""
22
 
23
+ #: ../cookie-notice.php:257
24
+ msgid "Run compliance check to learn if your website complies with the latest consent record storage and cookie blocking requirements."
25
  msgstr ""
26
 
27
+ #: ../cookie-notice.php:257
28
  msgid "Run Compliance Check"
29
  msgstr ""
30
 
31
+ #: ../cookie-notice.php:257
32
  msgid "Dismiss Notice"
33
  msgstr ""
34
 
35
+ #: ../cookie-notice.php:504
36
  msgid "Cookie Notice & Compliance - Deactivation survey"
37
  msgstr ""
38
 
39
+ #: ../cookie-notice.php:560
40
  msgid "Settings"
41
  msgstr ""
42
 
43
+ #: ../cookie-notice.php:564 ../includes/settings.php:217
44
  msgid "Free Upgrade"
45
  msgstr ""
46
 
47
+ #: ../cookie-notice.php:587
48
  msgid "We're sorry to see you go. Could you please tell us what happened?"
49
  msgstr ""
50
 
51
+ #: ../cookie-notice.php:591
52
  msgid "I couldn't figure out how to make it work."
53
  msgstr ""
54
 
55
+ #: ../cookie-notice.php:592
56
  msgid "I found another plugin to use for the same task."
57
  msgstr ""
58
 
59
+ #: ../cookie-notice.php:593
60
  msgid "The Cookie Compliance banner is too big."
61
  msgstr ""
62
 
63
+ #: ../cookie-notice.php:594
64
  msgid "The Cookie Compliance consent choices (Silver, Gold, Platinum) are confusing."
65
  msgstr ""
66
 
67
+ #: ../cookie-notice.php:595
68
  msgid "The Cookie Compliance default settings are too strict."
69
  msgstr ""
70
 
71
+ #: ../cookie-notice.php:596
72
  msgid "The web application user interface is not clear to me."
73
  msgstr ""
74
 
75
+ #: ../cookie-notice.php:597
76
  msgid "Support isn't timely."
77
  msgstr ""
78
 
79
+ #: ../cookie-notice.php:598
80
  msgid "Other"
81
  msgstr ""
82
 
83
+ #: ../cookie-notice.php:612
84
  msgid "Cancel"
85
  msgstr ""
86
 
87
+ #: ../cookie-notice.php:613
88
  msgid "Deactivate"
89
  msgstr ""
90
 
91
+ #: ../cookie-notice.php:614
92
  msgid "Deactivate & Submit"
93
  msgstr ""
94
 
95
+ #: ../includes/dashboard.php:40
96
+ msgid "Cookie Compliance"
97
+ msgstr ""
98
+
99
+ #: ../includes/dashboard.php:96
100
+ msgid "Used"
101
+ msgstr ""
102
+
103
+ #: ../includes/dashboard.php:97 ../includes/welcome.php:264
104
+ msgid "Free"
105
+ msgstr ""
106
+
107
+ #: ../includes/dashboard.php:142 ../includes/dashboard.php:154
108
+ #: ../includes/dashboard.php:166
109
+ #, php-format
110
+ msgid "Level %s"
111
+ msgstr ""
112
+
113
+ #: ../includes/dashboard.php:246
114
+ msgid "Traffic Overview"
115
+ msgstr ""
116
+
117
+ #: ../includes/dashboard.php:247
118
+ msgid "Displays the general visits information for your domain."
119
+ msgstr ""
120
+
121
+ #: ../includes/dashboard.php:251
122
+ msgid "Consent Activity"
123
+ msgstr ""
124
+
125
+ #: ../includes/dashboard.php:252
126
+ msgid "Displays the chart of the domain consent activity in the last 30 days."
127
+ msgstr ""
128
+
129
+ #: ../includes/dashboard.php:272
130
+ msgid "View consent activity inside WordPress Dashboard"
131
+ msgstr ""
132
+
133
+ #: ../includes/dashboard.php:273
134
+ msgid "Display information about the visits."
135
+ msgstr ""
136
+
137
+ #: ../includes/dashboard.php:274
138
+ msgid "Get Consent logs data for the last 30 days."
139
+ msgstr ""
140
+
141
+ #: ../includes/dashboard.php:275
142
+ msgid "Enable consent purpose categories, automatic cookie blocking and more."
143
+ msgstr ""
144
+
145
+ #: ../includes/dashboard.php:276
146
+ msgid "Upgrade to Cookie Compliance"
147
+ msgstr ""
148
+
149
+ #: ../includes/dashboard.php:368
150
+ msgid "Total Visits"
151
+ msgstr ""
152
+
153
+ #: ../includes/dashboard.php:370
154
+ msgid "Last 30 days"
155
+ msgstr ""
156
+
157
+ #: ../includes/dashboard.php:373
158
+ msgid "Consent Logs"
159
+ msgstr ""
160
+
161
+ #: ../includes/dashboard.php:375
162
+ #, php-format
163
+ msgid "Updated %s"
164
+ msgstr ""
165
+
166
+ #: ../includes/dashboard.php:393
167
+ msgid "Traffic Usage"
168
+ msgstr ""
169
+
170
+ #: ../includes/dashboard.php:396
171
+ #, php-format
172
+ msgid "Visits usage: %1$s / %2$s"
173
+ msgstr ""
174
+
175
+ #: ../includes/dashboard.php:397
176
+ #, php-format
177
+ msgid "Cycle started: %s"
178
+ msgstr ""
179
+
180
+ #: ../includes/dashboard.php:398
181
+ #, php-format
182
+ msgid "Days to go: %s"
183
+ msgstr ""
184
+
185
+ #: ../includes/settings.php:48 ../includes/welcome.php:456
186
  msgid "Top"
187
  msgstr ""
188
 
189
+ #: ../includes/settings.php:49 ../includes/welcome.php:455
190
  msgid "Bottom"
191
  msgstr ""
192
 
222
  msgid "Banner"
223
  msgstr ""
224
 
225
+ #: ../includes/settings.php:75 ../includes/settings.php:298
226
  msgid "Message"
227
  msgstr ""
228
 
327
  msgstr ""
328
 
329
  #: ../includes/settings.php:132 ../includes/settings.php:153
330
+ #: ../includes/settings.php:300
331
  msgid "Privacy policy"
332
  msgstr ""
333
 
359
  msgid "Highest level of personalisation. Data accessed to make ads and media more relevant. Data shared with 3rd parties may be use to track you on this site and other sites you visit."
360
  msgstr ""
361
 
362
+ #: ../includes/settings.php:143 ../includes/welcome.php:284
363
  msgid "month"
364
  msgstr ""
365
 
383
  msgid "You can revoke your consent any time using the Revoke consent button."
384
  msgstr ""
385
 
386
+ #: ../includes/settings.php:152 ../includes/settings.php:302
387
  msgid "Revoke consent"
388
  msgstr ""
389
 
390
+ #: ../includes/settings.php:188 ../includes/welcome.php:379
391
  msgid "Cookie Notice"
392
  msgstr ""
393
 
399
  msgid "Cookie Notice & Compliance for GDPR/CCPA"
400
  msgstr ""
401
 
402
+ #: ../includes/settings.php:209
403
  msgid "Promote the privacy of your website visitors without affecting how you do your business."
404
  msgstr ""
405
 
406
+ #: ../includes/settings.php:212 ../includes/welcome.php:170
407
+ #: ../includes/welcome.php:211
408
  msgid "The next generation of Cookie Notice"
409
  msgstr ""
410
 
411
+ #: ../includes/settings.php:214
412
  msgid "A free web application to help you deliver better consent experiences and comply with GDPR, CCPA and other data privacy laws more effectively."
413
  msgstr ""
414
 
415
+ #: ../includes/settings.php:228
416
+ msgid "F.A.Q."
417
+ msgstr ""
418
+
419
  #: ../includes/settings.php:232
420
+ msgid "Does the Cookie Notice make my site fully compliant with GDPR?"
421
+ msgstr ""
422
+
423
+ #: ../includes/settings.php:233
424
+ msgid "It is not possible to provide the required technical compliance features using only a WordPress plugin. Features like consent record storage, purpose categories and script blocking that bring your site into full compliance with GDPR are only available through the Cookie Compliance integration."
425
+ msgstr ""
426
+
427
+ #: ../includes/settings.php:237
428
+ msgid "Does the Cookie Compiance integration make my site fully compliant with GDPR?"
429
+ msgstr ""
430
+
431
+ #: ../includes/settings.php:238
432
+ msgid "Yes! The plugin + web application version includes technical compliance features to meet requirements for over 100 countries and legal jurisdictions."
433
+ msgstr ""
434
+
435
+ #: ../includes/settings.php:242
436
+ msgid "Is Cookie Compliance free?"
437
+ msgstr ""
438
+
439
+ #: ../includes/settings.php:243
440
+ msgid "Yes, but with limits. Cookie Compliance includes both free and paid plans to choose from depending on your needs and your website monthly traffic."
441
+ msgstr ""
442
+
443
+ #: ../includes/settings.php:260
444
  msgid "Reset to defaults"
445
  msgstr ""
446
 
447
+ #: ../includes/settings.php:278 ../includes/settings.php:292
448
  msgid "Compliance Settings"
449
  msgstr ""
450
 
451
+ #: ../includes/settings.php:279 ../includes/settings.php:293
452
  msgid "Compliance status"
453
  msgstr ""
454
 
455
+ #: ../includes/settings.php:280 ../includes/settings.php:294
456
  msgid "App ID"
457
  msgstr ""
458
 
459
+ #: ../includes/settings.php:281 ../includes/settings.php:295
460
  msgid "App Key"
461
  msgstr ""
462
 
463
+ #: ../includes/settings.php:283
464
  msgid "Miscellaneous Settings"
465
  msgstr ""
466
 
467
+ #: ../includes/settings.php:284 ../includes/settings.php:340
468
+ #: ../includes/settings.php:355 ../includes/settings.php:370
469
+ #: ../includes/welcome.php:380
470
  msgid "Autoblocking"
471
  msgstr ""
472
 
473
+ #: ../includes/settings.php:285
474
  msgid "Hide for logged in"
475
  msgstr ""
476
 
477
+ #: ../includes/settings.php:286
478
  msgid "Cache"
479
  msgstr ""
480
 
481
+ #: ../includes/settings.php:287 ../includes/settings.php:309
482
  msgid "Script placement"
483
  msgstr ""
484
 
485
+ #: ../includes/settings.php:288 ../includes/settings.php:310
486
  msgid "Deactivation"
487
  msgstr ""
488
 
489
+ #: ../includes/settings.php:297
490
  msgid "Notice Settings"
491
  msgstr ""
492
 
493
+ #: ../includes/settings.php:299
494
  msgid "Button text"
495
  msgstr ""
496
 
497
+ #: ../includes/settings.php:301
498
  msgid "Refuse consent"
499
  msgstr ""
500
 
501
+ #: ../includes/settings.php:303
502
  msgid "Script blocking"
503
  msgstr ""
504
 
505
+ #: ../includes/settings.php:304
506
  msgid "Reloading"
507
  msgstr ""
508
 
509
+ #: ../includes/settings.php:305
510
  msgid "On scroll"
511
  msgstr ""
512
 
513
+ #: ../includes/settings.php:306
514
  msgid "On click"
515
  msgstr ""
516
 
517
+ #: ../includes/settings.php:307
518
  msgid "Accepted expiry"
519
  msgstr ""
520
 
521
+ #: ../includes/settings.php:308
522
  msgid "Rejected expiry"
523
  msgstr ""
524
 
525
+ #: ../includes/settings.php:313
526
  msgid "Notice Design"
527
  msgstr ""
528
 
529
+ #: ../includes/settings.php:314
530
  msgid "Position"
531
  msgstr ""
532
 
533
+ #: ../includes/settings.php:315
534
  msgid "Animation"
535
  msgstr ""
536
 
537
+ #: ../includes/settings.php:316
538
  msgid "Colors"
539
  msgstr ""
540
 
541
+ #: ../includes/settings.php:317
542
  msgid "Button class"
543
  msgstr ""
544
 
545
+ #: ../includes/settings.php:339 ../includes/settings.php:354
546
+ #: ../includes/settings.php:369
547
  msgid "Notice"
548
  msgstr ""
549
 
550
+ #: ../includes/settings.php:339 ../includes/settings.php:340
551
+ #: ../includes/settings.php:341 ../includes/settings.php:342
552
+ #: ../includes/settings.php:354 ../includes/settings.php:369
553
  msgid "Active"
554
  msgstr ""
555
 
556
+ #: ../includes/settings.php:341 ../includes/settings.php:356
557
+ #: ../includes/settings.php:371 ../includes/welcome.php:381
558
  msgid "Cookie Categories"
559
  msgstr ""
560
 
561
+ #: ../includes/settings.php:342 ../includes/settings.php:357
562
+ #: ../includes/settings.php:372 ../includes/welcome.php:382
563
  msgid "Proof-of-Consent"
564
  msgstr ""
565
 
566
+ #: ../includes/settings.php:345
567
  msgid "Log in & Configure"
568
  msgstr ""
569
 
570
+ #: ../includes/settings.php:346
571
  msgid "Log into the Cookie Compliance&trade; web application and configure your Privacy Experience."
572
  msgstr ""
573
 
574
+ #: ../includes/settings.php:355 ../includes/settings.php:356
575
+ #: ../includes/settings.php:357
576
  msgid "Pending"
577
  msgstr ""
578
 
579
+ #: ../includes/settings.php:360
580
  msgid "Log in & configure"
581
  msgstr ""
582
 
583
+ #: ../includes/settings.php:361
584
  msgid "Log into the Cookie Compliance&trade; web application and complete the setup process."
585
  msgstr ""
586
 
587
+ #: ../includes/settings.php:370 ../includes/settings.php:371
588
+ #: ../includes/settings.php:372
589
  msgid "Inactive"
590
  msgstr ""
591
 
592
+ #: ../includes/settings.php:375
593
  msgid "Add Compliance features"
594
  msgstr ""
595
 
596
+ #: ../includes/settings.php:376
597
  msgid "Sign up to Cookie Compliance&trade; and add GDPR, CCPA and other international data privacy laws compliance features."
598
  msgstr ""
599
 
600
+ #: ../includes/settings.php:391
601
  msgid "Enter your Cookie Compliance&trade; application ID."
602
  msgstr ""
603
 
604
+ #: ../includes/settings.php:403
605
  msgid "Enter your Cookie Compliance&trade; application secret key."
606
  msgstr ""
607
 
608
+ #: ../includes/settings.php:413
609
  msgid "Enable to automatically block 3rd party scripts before user consent."
610
  msgstr ""
611
 
612
+ #: ../includes/settings.php:414
613
  msgid "In case you're experiencing issues with your site disable that feature temporarily."
614
  msgstr ""
615
 
616
+ #: ../includes/settings.php:425
617
  msgid "Purge Cache"
618
  msgstr ""
619
 
620
+ #: ../includes/settings.php:427
621
  msgid "Click the Purge Cache button to refresh the app configuration."
622
  msgstr ""
623
 
624
+ #: ../includes/settings.php:437
625
  msgid "Enable to hide the consent banner for logged in users."
626
  msgstr ""
627
 
628
+ #: ../includes/settings.php:448
629
  msgid "Enter the cookie notice message."
630
  msgstr ""
631
 
632
+ #: ../includes/settings.php:459
633
  msgid "The text of the option to accept the notice and make it disappear."
634
  msgstr ""
635
 
636
+ #: ../includes/settings.php:469
637
  msgid "Enable to give to the user the possibility to refuse third party non functional cookies."
638
  msgstr ""
639
 
640
+ #: ../includes/settings.php:473
641
  msgid "The text of the button to refuse the consent."
642
  msgstr ""
643
 
644
+ #: ../includes/settings.php:491
645
  msgid "Head"
646
  msgstr ""
647
 
648
+ #: ../includes/settings.php:492
649
  msgid "Body"
650
  msgstr ""
651
 
652
+ #: ../includes/settings.php:495
653
  msgid "The code to be used in your site header, before the closing head tag."
654
  msgstr ""
655
 
656
+ #: ../includes/settings.php:499
657
  msgid "The code to be used in your site footer, before the closing body tag."
658
  msgstr ""
659
 
660
+ #: ../includes/settings.php:503
661
  msgid "Enter non functional cookies Javascript code here (for e.g. Google Analitycs) to be used after the notice is accepted."
662
  msgstr ""
663
 
664
+ #: ../includes/settings.php:503
665
  msgid "To get the user consent status use the <code>cn_cookies_accepted()</code> function."
666
  msgstr ""
667
 
668
+ #: ../includes/settings.php:514
669
  msgid "Enable to give to the user the possibility to revoke their consent <i>(requires \"Refuse consent\" option enabled)</i>."
670
  msgstr ""
671
 
672
+ #: ../includes/settings.php:517
673
  msgid "Enter the revoke message."
674
  msgstr ""
675
 
676
+ #: ../includes/settings.php:519
677
  msgid "The text of the button to revoke the consent."
678
  msgstr ""
679
 
680
+ #: ../includes/settings.php:527
681
  msgid "Select the method for displaying the revoke button - automatic (in the banner) or manual using <code>[cookies_revoke]</code> shortcode."
682
  msgstr ""
683
 
684
+ #: ../includes/settings.php:538
685
  msgid "Enable to reload the page after the notice is accepted."
686
  msgstr ""
687
 
688
+ #: ../includes/settings.php:561
689
  msgid "Enable privacy policy link."
690
  msgstr ""
691
 
692
+ #: ../includes/settings.php:564
693
  msgid "The text of the privacy policy button."
694
  msgstr ""
695
 
696
+ #: ../includes/settings.php:576
697
  msgid "Select where to redirect user for more information."
698
  msgstr ""
699
 
700
+ #: ../includes/settings.php:579
701
  msgid "-- select page --"
702
  msgstr ""
703
 
704
+ #: ../includes/settings.php:590
705
  msgid "Select from one of your site's pages."
706
  msgstr ""
707
 
708
+ #: ../includes/settings.php:596
709
  msgid "Synchronize with WordPress Privacy Policy page."
710
  msgstr ""
711
 
712
+ #: ../includes/settings.php:603
713
  msgid "Enter the full URL starting with http(s)://"
714
  msgstr ""
715
 
716
+ #: ../includes/settings.php:646
717
  msgid "The amount of time that the cookie should be stored for when user accepts the notice."
718
  msgstr ""
719
 
720
+ #: ../includes/settings.php:669
721
  msgid "The amount of time that the cookie should be stored for when the user doesn't accept the notice."
722
  msgstr ""
723
 
724
+ #: ../includes/settings.php:687
725
  msgid "Select where all the plugin scripts should be placed."
726
  msgstr ""
727
 
728
+ #: ../includes/settings.php:707
729
  msgid "Select location for the notice."
730
  msgstr ""
731
 
732
+ #: ../includes/settings.php:728
733
  msgid "Select the animation style."
734
  msgstr ""
735
 
736
+ #: ../includes/settings.php:739
737
  msgid "Enable to accept the notice when user scrolls."
738
  msgstr ""
739
 
740
+ #: ../includes/settings.php:742
741
  msgid "Number of pixels user has to scroll to accept the notice and make it disappear."
742
  msgstr ""
743
 
744
+ #: ../includes/settings.php:753
745
  msgid "Enable to accept the notice on any click on the page."
746
  msgstr ""
747
 
748
+ #: ../includes/settings.php:763
749
  msgid "Enable if you want all plugin data to be deleted on deactivation."
750
  msgstr ""
751
 
752
+ #: ../includes/settings.php:775
753
  msgid "Enter additional button CSS classes separated by spaces."
754
  msgstr ""
755
 
756
+ #: ../includes/settings.php:799
757
  msgid "Bar opacity"
758
  msgstr ""
759
 
760
+ #: ../includes/settings.php:941
761
  msgid "Settings saved."
762
  msgstr ""
763
 
764
+ #: ../includes/settings.php:948
765
  msgid "Settings restored to defaults."
766
  msgstr ""
767
 
768
+ #: ../includes/settings.php:973
769
  msgid "Are you sure you want to reset these settings to defaults?"
770
  msgstr ""
771
 
772
+ #: ../includes/welcome-api.php:37 ../includes/welcome-api.php:40
773
+ #: ../includes/welcome-api.php:43 ../includes/welcome-api.php:46
774
+ #: ../includes/welcome.php:139 ../includes/welcome.php:149
775
+ #: ../includes/welcome.php:152
776
  msgid "You do not have permission to access this page."
777
  msgstr ""
778
 
779
+ #: ../includes/welcome-api.php:77 ../includes/welcome-api.php:210
780
+ #: ../includes/welcome-api.php:249 ../includes/welcome-api.php:375
781
+ #: ../includes/welcome-api.php:448 ../includes/welcome-api.php:860
782
  #: ../includes/welcome.php:49
783
  msgid "Unexpected error occurred. Please try again later."
784
  msgstr ""
785
 
786
+ #: ../includes/welcome-api.php:93
787
  msgid "Empty plan or payment method data."
788
  msgstr ""
789
 
790
+ #: ../includes/welcome-api.php:122
791
  msgid "Unable to create customer data."
792
  msgstr ""
793
 
794
+ #: ../includes/welcome-api.php:152
795
  msgid "Please accept the Terms of Service to proceed."
796
  msgstr ""
797
 
798
+ #: ../includes/welcome-api.php:157 ../includes/welcome-api.php:346
799
  msgid "Email is not allowed to be empty."
800
  msgstr ""
801
 
802
+ #: ../includes/welcome-api.php:162 ../includes/welcome-api.php:351
803
  msgid "Password is not allowed to be empty."
804
  msgstr ""
805
 
806
+ #: ../includes/welcome-api.php:167
807
  msgid "Passwords do not match."
808
  msgstr ""
809
 
827
  msgid "Please fill all the required fields."
828
  msgstr ""
829
 
830
+ #: ../includes/welcome.php:172
831
  msgid "Cookie Compliance is a free web application that enables websites to take a proactive approach to data protection and consent laws."
832
  msgstr ""
833
 
834
+ #: ../includes/welcome.php:178
835
  msgid "It is the first solution to offer <b>intentional consent</b>, a new consent framework that incorporates the latest guidelines from over 100+ countries, and emerging standards from leading international organizations like the IEEE."
836
  msgstr ""
837
 
838
+ #: ../includes/welcome.php:179
839
  msgid "Cookie Notice includes <b>seamless integration</b> with Cookie Compliance to help your site comply with the latest updates to existing consent laws and provide a beautiful, multi-level experience to engage visitors in data privacy decisions."
840
  msgstr ""
841
 
842
+ #: ../includes/welcome.php:183
843
  msgid "Sign up to Cookie Compliance"
844
  msgstr ""
845
 
846
+ #: ../includes/welcome.php:184
847
  msgid "Skip for now"
848
  msgstr ""
849
 
850
+ #: ../includes/welcome.php:213
851
  msgid "Take a proactive approach to data protection and consent laws by signing up for Cookie Compliance account. Then select a limited Basic Plan for free or get one of the Professional Plans for unlimited visits, consent storage, languages and customizations."
852
  msgstr ""
853
 
854
+ #: ../includes/welcome.php:257
855
  msgid "Compliance Plans"
856
  msgstr ""
857
 
858
+ #: ../includes/welcome.php:263 ../includes/welcome.php:548
859
+ #: ../includes/welcome.php:650
860
  msgid "Basic"
861
  msgstr ""
862
 
863
+ #: ../includes/welcome.php:267 ../includes/welcome.php:287
864
+ #: ../includes/welcome.php:308
865
+ msgid "GDPR, CCPA, ePrivacy, PECR compliance"
866
  msgstr ""
867
 
868
  #: ../includes/welcome.php:268 ../includes/welcome.php:288
869
  #: ../includes/welcome.php:309
 
 
 
 
 
870
  msgid "Consent Analytics Dashboard"
871
  msgstr ""
872
 
873
+ #: ../includes/welcome.php:269
874
  msgid "<b>1,000</b> visits / month"
875
  msgstr ""
876
 
877
+ #: ../includes/welcome.php:270
878
  msgid "<b>30 days</b> consent storage"
879
  msgstr ""
880
 
881
+ #: ../includes/welcome.php:271
882
  msgid "<b>1 additional</b> language"
883
  msgstr ""
884
 
885
+ #: ../includes/welcome.php:272
886
  msgid "<b>Basic</b> Support"
887
  msgstr ""
888
 
889
+ #: ../includes/welcome.php:275 ../includes/welcome.php:295
890
+ #: ../includes/welcome.php:316 ../includes/welcome.php:542
891
+ #: ../includes/welcome.php:644
892
  msgid "Select Plan"
893
  msgstr ""
894
 
895
+ #: ../includes/welcome.php:283
896
  msgid "Professional Monthly"
897
  msgstr ""
898
 
899
+ #: ../includes/welcome.php:289 ../includes/welcome.php:310
900
  msgid "<b>Unlimited</b> visits"
901
  msgstr ""
902
 
903
+ #: ../includes/welcome.php:290 ../includes/welcome.php:311
904
  msgid "<b>Lifetime</b> consent storage"
905
  msgstr ""
906
 
907
+ #: ../includes/welcome.php:291 ../includes/welcome.php:312
908
  msgid "<b>Unlimited</b> languages"
909
  msgstr ""
910
 
911
+ #: ../includes/welcome.php:292
912
  msgid "<b>Regular</b> Support"
913
  msgstr ""
914
 
915
+ #: ../includes/welcome.php:303
916
  msgid "Professional Yearly"
917
  msgstr ""
918
 
919
+ #: ../includes/welcome.php:304
920
  msgid "year"
921
  msgstr ""
922
 
923
+ #: ../includes/welcome.php:305
924
  msgid "Best Value"
925
  msgstr ""
926
 
927
+ #: ../includes/welcome.php:313
928
  msgid "<b>Premium</b> Support"
929
  msgstr ""
930
 
931
+ #: ../includes/welcome.php:322
932
  msgid "I don’t want to create an account now"
933
  msgstr ""
934
 
935
+ #: ../includes/welcome.php:338
936
  msgid "Congratulations"
937
  msgstr ""
938
 
939
+ #: ../includes/welcome.php:339
940
  msgid "You are now promoting privacy with Hu-manity.co"
941
  msgstr ""
942
 
943
+ #: ../includes/welcome.php:341
944
  msgid "Log in to your Cookie Compliance&trade; account and continue configuring your Privacy Experience."
945
  msgstr ""
946
 
947
+ #: ../includes/welcome.php:344
948
  msgid "Go to Application"
949
  msgstr ""
950
 
951
+ #: ../includes/welcome.php:369
952
  msgid "Compliance check"
953
  msgstr ""
954
 
955
+ #: ../includes/welcome.php:370
956
  msgid "This is a Compliance Check to determine your site’s compliance with updated data processing and consent rules under GDPR, CCPA and other international data privacy laws."
957
  msgstr ""
958
 
959
+ #: ../includes/welcome.php:372
960
  msgid "Site URL"
961
  msgstr ""
962
 
963
+ #: ../includes/welcome.php:373
964
  msgid "Site Name"
965
  msgstr ""
966
 
967
+ #: ../includes/welcome.php:376
968
  msgid "Checking..."
969
  msgstr ""
970
 
971
+ #: ../includes/welcome.php:379
972
  msgid "Notifies visitors that site uses cookies."
973
  msgstr ""
974
 
975
+ #: ../includes/welcome.php:380
976
  msgid "Non-essential cookies blocked until consent is registered."
977
  msgstr ""
978
 
979
+ #: ../includes/welcome.php:381
980
  msgid "Separate consent requested per purpose of use."
981
  msgstr ""
982
 
983
+ #: ../includes/welcome.php:382
984
  msgid "Proof-of-consent stored in secure audit format."
985
  msgstr ""
986
 
987
+ #: ../includes/welcome.php:398
988
  msgid "Live Setup"
989
  msgstr ""
990
 
991
+ #: ../includes/welcome.php:399
992
  msgid "Configure your Cookie Notice & Compliance design and compliance features through the options below. Click Apply Setup to save the configuration and go to selecting your preferred cookie solution."
993
  msgstr ""
994
 
995
+ #: ../includes/welcome.php:403
996
  msgid "Banner Compliance"
997
  msgstr ""
998
 
999
+ #: ../includes/welcome.php:424
1000
  msgid "Select the laws that apply to your business"
1001
  msgstr ""
1002
 
1003
+ #: ../includes/welcome.php:426
1004
  msgid "GDPR"
1005
  msgstr ""
1006
 
1007
+ #: ../includes/welcome.php:427
1008
  msgid "CCPA"
1009
  msgstr ""
1010
 
1011
+ #: ../includes/welcome.php:431
1012
  msgid "Select a naming style for the consent choices"
1013
  msgstr ""
1014
 
1015
+ #: ../includes/welcome.php:433
1016
  msgid "Silver, Gold, Platinum (Default)​"
1017
  msgstr ""
1018
 
1019
+ #: ../includes/welcome.php:434
1020
  msgid "Private, Balanced, Personalized"
1021
  msgstr ""
1022
 
1023
+ #: ../includes/welcome.php:435
1024
  msgid "Reject All, Accept Some, Accept All​"
1025
  msgstr ""
1026
 
1027
+ #: ../includes/welcome.php:439
1028
  msgid "Select additional information to include in the banner:"
1029
  msgstr ""
1030
 
1031
+ #: ../includes/welcome.php:441
1032
  msgid "Display <b>Privacy Paper</b> to provide helpful data privacy and consent information to visitors."
1033
  msgstr ""
1034
 
1035
+ #: ../includes/welcome.php:442
1036
  msgid "Display <b>Privacy Contact</b> to provide Data Controller contact information and links to external data privacy resources."
1037
  msgstr ""
1038
 
1039
+ #: ../includes/welcome.php:445 ../includes/welcome.php:473
1040
  msgid "available for Cookie Compliance&trade; Pro plans only"
1041
  msgstr ""
1042
 
1043
+ #: ../includes/welcome.php:449
1044
  msgid "Banner Design"
1045
  msgstr ""
1046
 
1047
+ #: ../includes/welcome.php:453
1048
  msgid "Select your preferred display position"
1049
  msgstr ""
1050
 
1051
+ #: ../includes/welcome.php:457
1052
  msgid "Left"
1053
  msgstr ""
1054
 
1055
+ #: ../includes/welcome.php:458
1056
  msgid "Right"
1057
  msgstr ""
1058
 
1059
+ #: ../includes/welcome.php:459
1060
  msgid "Center"
1061
  msgstr ""
1062
 
1063
+ #: ../includes/welcome.php:463
1064
  msgid "Adjust the banner color scheme"
1065
  msgstr ""
1066
 
1067
+ #: ../includes/welcome.php:465
1068
  msgid "Color of the buttons and interactive elements."
1069
  msgstr ""
1070
 
1071
+ #: ../includes/welcome.php:466
1072
  msgid "Color of the banner background."
1073
  msgstr ""
1074
 
1075
+ #: ../includes/welcome.php:467
1076
  msgid "Color of the body text."
1077
  msgstr ""
1078
 
1079
+ #: ../includes/welcome.php:468
1080
  msgid "Color of the borders and inactive elements."
1081
  msgstr ""
1082
 
1083
+ #: ../includes/welcome.php:469
1084
  msgid "Color of the heading text."
1085
  msgstr ""
1086
 
1087
+ #: ../includes/welcome.php:470
1088
  msgid "Color of the button text."
1089
  msgstr ""
1090
 
1091
+ #: ../includes/welcome.php:478
1092
  msgid "Apply Setup"
1093
  msgstr ""
1094
 
1095
+ #: ../includes/welcome.php:496
1096
  msgid "Compliance account"
1097
  msgstr ""
1098
 
1099
+ #: ../includes/welcome.php:498
1100
  msgid "Create a Cookie Compliance&trade; account and select your preferred plan."
1101
  msgstr ""
1102
 
1103
+ #: ../includes/welcome.php:502
1104
  msgid "Create Account"
1105
  msgstr ""
1106
 
1107
+ #: ../includes/welcome.php:507 ../includes/welcome.php:617
1108
  msgid "Email address"
1109
  msgstr ""
1110
 
1111
+ #: ../includes/welcome.php:510 ../includes/welcome.php:620
1112
  msgid "Password"
1113
  msgstr ""
1114
 
1115
+ #: ../includes/welcome.php:513
1116
  msgid "Confirm Password"
1117
  msgstr ""
1118
 
1119
+ #: ../includes/welcome.php:517
1120
  #, php-format
1121
  msgid "I have read and agree to the <a href=\"%s\" target=\"_blank\">Terms of Service"
1122
  msgstr ""
1123
 
1124
+ #: ../includes/welcome.php:521
1125
  msgid "Sign Up"
1126
  msgstr ""
1127
 
1128
+ #: ../includes/welcome.php:535
1129
  msgid "Already have an account?"
1130
  msgstr ""
1131
 
1132
+ #: ../includes/welcome.php:535 ../includes/welcome.php:623
1133
  msgid "Sign in"
1134
  msgstr ""
1135
 
1136
+ #: ../includes/welcome.php:549 ../includes/welcome.php:651
1137
  msgid "<b>Professional</b> Monthly"
1138
  msgstr ""
1139
 
1140
+ #: ../includes/welcome.php:549 ../includes/welcome.php:651
1141
  msgid "/mo"
1142
  msgstr ""
1143
 
1144
+ #: ../includes/welcome.php:550 ../includes/welcome.php:652
1145
  msgid "<b>Professional</b> Yearly"
1146
  msgstr ""
1147
 
1148
+ #: ../includes/welcome.php:550 ../includes/welcome.php:652
1149
  msgid "/yr"
1150
  msgstr ""
1151
 
1152
+ #: ../includes/welcome.php:554 ../includes/welcome.php:656
1153
  msgid "Confirm"
1154
  msgstr ""
1155
 
1156
+ #: ../includes/welcome.php:558 ../includes/welcome.php:660
1157
  msgid "Payment Method"
1158
  msgstr ""
1159
 
1160
+ #: ../includes/welcome.php:560 ../includes/welcome.php:662
1161
  msgid "Credit Card"
1162
  msgstr ""
1163
 
1164
+ #: ../includes/welcome.php:561 ../includes/welcome.php:663
1165
  msgid "PayPal"
1166
  msgstr ""
1167
 
1168
+ #: ../includes/welcome.php:567 ../includes/welcome.php:669
1169
  msgid "Card Number"
1170
  msgstr ""
1171
 
1172
+ #: ../includes/welcome.php:571 ../includes/welcome.php:673
1173
  msgid "Expiration Date"
1174
  msgstr ""
1175
 
1176
+ #: ../includes/welcome.php:575 ../includes/welcome.php:677
1177
  msgid "CVC/CVV"
1178
  msgstr ""
1179
 
1180
+ #: ../includes/welcome.php:579 ../includes/welcome.php:681
1181
  msgid "Submit"
1182
  msgstr ""
1183
 
1184
+ #: ../includes/welcome.php:606
1185
  msgid "Compliance Sign in"
1186
  msgstr ""
1187
 
1188
+ #: ../includes/welcome.php:608
1189
  msgid "Sign in to your existing Cookie Compliance&trade; account and select your preferred plan."
1190
  msgstr ""
1191
 
1192
+ #: ../includes/welcome.php:612
1193
  msgid "Account Login"
1194
  msgstr ""
1195
 
1196
+ #: ../includes/welcome.php:637
1197
  msgid "Don't have an account yet?"
1198
  msgstr ""
1199
 
1200
+ #: ../includes/welcome.php:637
1201
  msgid "Sign up"
1202
  msgstr ""
1203
 
1204
+ #: ../includes/welcome.php:706
1205
  msgid "Success!"
1206
  msgstr ""
1207
 
1208
+ #: ../includes/welcome.php:707
1209
  msgid "You have successfully upgraded your website to Cookie Compliance&trade;"
1210
  msgstr ""
1211
 
1212
+ #: ../includes/welcome.php:707
1213
  #, php-format
1214
  msgid "Go to Cookie Compliance&trade; application now. Or access it anytime from your <a href=\"%s\">Cookie Notice settings page</a>."
1215
  msgstr ""
readme.txt CHANGED
@@ -3,8 +3,8 @@ Contributors: humanityco
3
  Tags: gdpr, ccpa, cookies, consent, compliance
4
  Requires at least: 4.3
5
  Requires PHP: 5.3
6
- Tested up to: 5.8.2
7
- Stable tag: 2.2.0
8
  License: MIT License
9
  License URI: http://opensource.org/licenses/MIT
10
 
@@ -118,6 +118,12 @@ Yes! The plugin + web appliaction version includes technical compliance features
118
 
119
  == Changelog ==
120
 
 
 
 
 
 
 
121
  = 2.2.1 =
122
  * Fix: Missing variable definition in frontend
123
 
@@ -400,5 +406,8 @@ Initial release
400
 
401
  == Upgrade Notice ==
402
 
403
- = 2.2.1 =
404
- * Fix: Missing variable definition in frontend
 
 
 
3
  Tags: gdpr, ccpa, cookies, consent, compliance
4
  Requires at least: 4.3
5
  Requires PHP: 5.3
6
+ Tested up to: 5.9.1
7
+ Stable tag: 2.2.2
8
  License: MIT License
9
  License URI: http://opensource.org/licenses/MIT
10
 
118
 
119
  == Changelog ==
120
 
121
+ = 2.2.2 =
122
+ * Fix: Uncrawlable close notice link
123
+ * Tweak: WordPress 5.9 compatibility
124
+ * Tweak: Prevent displaying the notice in an iframe
125
+ * Tweak: Send site language to a web app on signup
126
+
127
  = 2.2.1 =
128
  * Fix: Missing variable definition in frontend
129
 
406
 
407
  == Upgrade Notice ==
408
 
409
+ = 2.2.2 =
410
+ * Fix: Uncrawlable close notice link
411
+ * Tweak: WordPress 5.9 compatibility
412
+ * Tweak: Prevent displaying the notice in an iframe
413
+ * Tweak: Send site language to a web app on signup