{"version":3,"sources":["js/particles.min.js"],"names":[],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"../../js/particles.min.js","sourcesContent":["var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/* -----------------------------------------------\r\n/* Author : Vincent Garreau - vincentgarreau.com\r\n/* MIT license: http://opensource.org/licenses/MIT\r\n/* Demo / Generator : vincentgarreau.com/particles.js\r\n/* GitHub : github.com/VincentGarreau/particles.js\r\n/* How to use? : Check the GitHub README\r\n/* v2.0.0\r\n/* ----------------------------------------------- */\nfunction hexToRgb(e) {\n var a = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n e = e.replace(a, function (e, a, t, i) {\n return a + a + t + t + i + i;\n });\n var t = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(e);\n return t ? { r: parseInt(t[1], 16), g: parseInt(t[2], 16), b: parseInt(t[3], 16) } : null;\n}\n\nfunction clamp(e, a, t) {\n return Math.min(Math.max(e, a), t);\n}\n\nfunction isInArray(e, a) {\n return a.indexOf(e) > -1;\n}\n\nvar pJS = function pJS(e, a) {\n var t = document.querySelector(\"#\" + e + \" > .particles-js-canvas-el\");\n this.pJS = {\n canvas: { el: t, w: t.offsetWidth, h: t.offsetHeight },\n particles: {\n number: { value: 400, density: { enable: !0, value_area: 800 } },\n color: { value: \"#fff\" },\n shape: {\n type: \"circle\",\n stroke: { width: 0, color: \"#ff0000\" },\n polygon: { nb_sides: 5 },\n image: { src: \"\", width: 100, height: 100 }\n },\n opacity: { value: 1, random: !1, anim: { enable: !1, speed: 2, opacity_min: 0, sync: !1 } },\n size: { value: 20, random: !1, anim: { enable: !1, speed: 20, size_min: 0, sync: !1 } },\n line_linked: { enable: !0, distance: 100, color: \"#fff\", opacity: 1, width: 1 },\n move: {\n enable: !0,\n speed: 2,\n direction: \"none\",\n random: !1,\n straight: !1,\n out_mode: \"out\",\n bounce: !1,\n attract: { enable: !1, rotateX: 3e3, rotateY: 3e3 }\n },\n array: []\n },\n interactivity: {\n detect_on: \"canvas\",\n events: { onhover: { enable: !0, mode: \"grab\" }, onclick: { enable: !0, mode: \"push\" }, resize: !0 },\n modes: {\n grab: { distance: 100, line_linked: { opacity: 1 } },\n bubble: { distance: 200, size: 80, duration: .4 },\n repulse: { distance: 200, duration: .4 },\n push: { particles_nb: 4 },\n remove: { particles_nb: 2 }\n },\n mouse: {}\n },\n retina_detect: !1,\n fn: { interact: {}, modes: {}, vendors: {} },\n tmp: {}\n };\n var i = this.pJS;\n a && Object.deepExtend(i, a), i.tmp.obj = {\n size_value: i.particles.size.value,\n size_anim_speed: i.particles.size.anim.speed,\n move_speed: i.particles.move.speed,\n line_linked_distance: i.particles.line_linked.distance,\n line_linked_width: i.particles.line_linked.width,\n mode_grab_distance: i.interactivity.modes.grab.distance,\n mode_bubble_distance: i.interactivity.modes.bubble.distance,\n mode_bubble_size: i.interactivity.modes.bubble.size,\n mode_repulse_distance: i.interactivity.modes.repulse.distance\n }, i.fn.retinaInit = function () {\n i.retina_detect && window.devicePixelRatio > 1 ? (i.canvas.pxratio = window.devicePixelRatio, i.tmp.retina = !0) : (i.canvas.pxratio = 1, i.tmp.retina = !1), i.canvas.w = i.canvas.el.offsetWidth * i.canvas.pxratio, i.canvas.h = i.canvas.el.offsetHeight * i.canvas.pxratio, i.particles.size.value = i.tmp.obj.size_value * i.canvas.pxratio, i.particles.size.anim.speed = i.tmp.obj.size_anim_speed * i.canvas.pxratio, i.particles.move.speed = i.tmp.obj.move_speed * i.canvas.pxratio, i.particles.line_linked.distance = i.tmp.obj.line_linked_distance * i.canvas.pxratio, i.interactivity.modes.grab.distance = i.tmp.obj.mode_grab_distance * i.canvas.pxratio, i.interactivity.modes.bubble.distance = i.tmp.obj.mode_bubble_distance * i.canvas.pxratio, i.particles.line_linked.width = i.tmp.obj.line_linked_width * i.canvas.pxratio, i.interactivity.modes.bubble.size = i.tmp.obj.mode_bubble_size * i.canvas.pxratio, i.interactivity.modes.repulse.distance = i.tmp.obj.mode_repulse_distance * i.canvas.pxratio;\n }, i.fn.canvasInit = function () {\n i.canvas.ctx = i.canvas.el.getContext(\"2d\");\n }, i.fn.canvasSize = function () {\n i.canvas.el.width = i.canvas.w, i.canvas.el.height = i.canvas.h, i && i.interactivity.events.resize && window.addEventListener(\"resize\", function () {\n i.canvas.w = i.canvas.el.offsetWidth, i.canvas.h = i.canvas.el.offsetHeight, i.tmp.retina && (i.canvas.w *= i.canvas.pxratio, i.canvas.h *= i.canvas.pxratio), i.canvas.el.width = i.canvas.w, i.canvas.el.height = i.canvas.h, i.particles.move.enable || (i.fn.particlesEmpty(), i.fn.particlesCreate(), i.fn.particlesDraw(), i.fn.vendors.densityAutoParticles()), i.fn.vendors.densityAutoParticles();\n });\n }, i.fn.canvasPaint = function () {\n i.canvas.ctx.fillRect(0, 0, i.canvas.w, i.canvas.h);\n }, i.fn.canvasClear = function () {\n i.canvas.ctx.clearRect(0, 0, i.canvas.w, i.canvas.h);\n }, i.fn.particle = function (e, a, t) {\n if (this.radius = (i.particles.size.random ? Math.random() : 1) * i.particles.size.value, i.particles.size.anim.enable && (this.size_status = !1, this.vs = i.particles.size.anim.speed / 100, i.particles.size.anim.sync || (this.vs = this.vs * Math.random())), this.x = t ? t.x : Math.random() * i.canvas.w, this.y = t ? t.y : Math.random() * i.canvas.h, this.x > i.canvas.w - 2 * this.radius ? this.x = this.x - this.radius : this.x < 2 * this.radius && (this.x = this.x + this.radius), this.y > i.canvas.h - 2 * this.radius ? this.y = this.y - this.radius : this.y < 2 * this.radius && (this.y = this.y + this.radius), i.particles.move.bounce && i.fn.vendors.checkOverlap(this, t), this.color = {}, \"object\" == _typeof(e.value)) {\n if (e.value instanceof Array) {\n var s = e.value[Math.floor(Math.random() * i.particles.color.value.length)];\n this.color.rgb = hexToRgb(s);\n } else void 0 != e.value.r && void 0 != e.value.g && void 0 != e.value.b && (this.color.rgb = {\n r: e.value.r,\n g: e.value.g,\n b: e.value.b\n }), void 0 != e.value.h && void 0 != e.value.s && void 0 != e.value.l && (this.color.hsl = {\n h: e.value.h,\n s: e.value.s,\n l: e.value.l\n });\n } else \"random\" == e.value ? this.color.rgb = {\n r: Math.floor(256 * Math.random()) + 0,\n g: Math.floor(256 * Math.random()) + 0,\n b: Math.floor(256 * Math.random()) + 0\n } : \"string\" == typeof e.value && (this.color = e, this.color.rgb = hexToRgb(this.color.value));\n this.opacity = (i.particles.opacity.random ? Math.random() : 1) * i.particles.opacity.value, i.particles.opacity.anim.enable && (this.opacity_status = !1, this.vo = i.particles.opacity.anim.speed / 100, i.particles.opacity.anim.sync || (this.vo = this.vo * Math.random()));\n var n = {};\n switch (i.particles.move.direction) {\n case \"top\":\n n = { x: 0, y: -1 };\n break;\n case \"top-right\":\n n = { x: .5, y: -.5 };\n break;\n case \"right\":\n n = { x: 1, y: -0 };\n break;\n case \"bottom-right\":\n n = { x: .5, y: .5 };\n break;\n case \"bottom\":\n n = { x: 0, y: 1 };\n break;\n case \"bottom-left\":\n n = { x: -.5, y: 1 };\n break;\n case \"left\":\n n = { x: -1, y: 0 };\n break;\n case \"top-left\":\n n = { x: -.5, y: -.5 };\n break;\n default:\n n = { x: 0, y: 0 };\n }\n i.particles.move.straight ? (this.vx = n.x, this.vy = n.y, i.particles.move.random && (this.vx = this.vx * Math.random(), this.vy = this.vy * Math.random())) : (this.vx = n.x + Math.random() - .5, this.vy = n.y + Math.random() - .5), this.vx_i = this.vx, this.vy_i = this.vy;\n var r = i.particles.shape.type;\n if (\"object\" == (typeof r === \"undefined\" ? \"undefined\" : _typeof(r))) {\n if (r instanceof Array) {\n var c = r[Math.floor(Math.random() * r.length)];\n this.shape = c;\n }\n } else this.shape = r;\n if (\"image\" == this.shape) {\n var o = i.particles.shape;\n this.img = {\n src: o.image.src,\n ratio: o.image.width / o.image.height\n }, this.img.ratio || (this.img.ratio = 1), \"svg\" == i.tmp.img_type && void 0 != i.tmp.source_svg && (i.fn.vendors.createSvgImg(this), i.tmp.pushing && (this.img.loaded = !1));\n }\n }, i.fn.particle.prototype.draw = function () {\n function e() {\n i.canvas.ctx.drawImage(r, a.x - t, a.y - t, 2 * t, 2 * t / a.img.ratio);\n }\n\n var a = this;\n if (void 0 != a.radius_bubble) var t = a.radius_bubble;else var t = a.radius;\n if (void 0 != a.opacity_bubble) var s = a.opacity_bubble;else var s = a.opacity;\n if (a.color.rgb) var n = \"rgba(\" + a.color.rgb.r + \",\" + a.color.rgb.g + \",\" + a.color.rgb.b + \",\" + s + \")\";else var n = \"hsla(\" + a.color.hsl.h + \",\" + a.color.hsl.s + \"%,\" + a.color.hsl.l + \"%,\" + s + \")\";\n switch (i.canvas.ctx.fillStyle = n, i.canvas.ctx.beginPath(), a.shape) {\n case \"circle\":\n i.canvas.ctx.arc(a.x, a.y, t, 0, 2 * Math.PI, !1);\n break;\n case \"edge\":\n i.canvas.ctx.rect(a.x - t, a.y - t, 2 * t, 2 * t);\n break;\n case \"triangle\":\n i.fn.vendors.drawShape(i.canvas.ctx, a.x - t, a.y + t / 1.66, 2 * t, 3, 2);\n break;\n case \"polygon\":\n i.fn.vendors.drawShape(i.canvas.ctx, a.x - t / (i.particles.shape.polygon.nb_sides / 3.5), a.y - t / .76, 2.66 * t / (i.particles.shape.polygon.nb_sides / 3), i.particles.shape.polygon.nb_sides, 1);\n break;\n case \"star\":\n i.fn.vendors.drawShape(i.canvas.ctx, a.x - 2 * t / (i.particles.shape.polygon.nb_sides / 4), a.y - t / 1.52, 2 * t * 2.66 / (i.particles.shape.polygon.nb_sides / 3), i.particles.shape.polygon.nb_sides, 2);\n break;\n case \"image\":\n if (\"svg\" == i.tmp.img_type) var r = a.img.obj;else var r = i.tmp.img_obj;\n r && e();\n }\n i.canvas.ctx.closePath(), i.particles.shape.stroke.width > 0 && (i.canvas.ctx.strokeStyle = i.particles.shape.stroke.color, i.canvas.ctx.lineWidth = i.particles.shape.stroke.width, i.canvas.ctx.stroke()), i.canvas.ctx.fill();\n }, i.fn.particlesCreate = function () {\n for (var e = 0; e < i.particles.number.value; e++) {\n i.particles.array.push(new i.fn.particle(i.particles.color, i.particles.opacity.value));\n }\n }, i.fn.particlesUpdate = function () {\n for (var e = 0; e < i.particles.array.length; e++) {\n var a = i.particles.array[e];\n if (i.particles.move.enable) {\n var t = i.particles.move.speed / 2;\n a.x += a.vx * t, a.y += a.vy * t;\n }\n if (i.particles.opacity.anim.enable && (1 == a.opacity_status ? (a.opacity >= i.particles.opacity.value && (a.opacity_status = !1), a.opacity += a.vo) : (a.opacity <= i.particles.opacity.anim.opacity_min && (a.opacity_status = !0), a.opacity -= a.vo), a.opacity < 0 && (a.opacity = 0)), i.particles.size.anim.enable && (1 == a.size_status ? (a.radius >= i.particles.size.value && (a.size_status = !1), a.radius += a.vs) : (a.radius <= i.particles.size.anim.size_min && (a.size_status = !0), a.radius -= a.vs), a.radius < 0 && (a.radius = 0)), \"bounce\" == i.particles.move.out_mode) var s = {\n x_left: a.radius,\n x_right: i.canvas.w,\n y_top: a.radius,\n y_bottom: i.canvas.h\n };else var s = {\n x_left: -a.radius,\n x_right: i.canvas.w + a.radius,\n y_top: -a.radius,\n y_bottom: i.canvas.h + a.radius\n };\n switch (a.x - a.radius > i.canvas.w ? (a.x = s.x_left, a.y = Math.random() * i.canvas.h) : a.x + a.radius < 0 && (a.x = s.x_right, a.y = Math.random() * i.canvas.h), a.y - a.radius > i.canvas.h ? (a.y = s.y_top, a.x = Math.random() * i.canvas.w) : a.y + a.radius < 0 && (a.y = s.y_bottom, a.x = Math.random() * i.canvas.w), i.particles.move.out_mode) {\n case \"bounce\":\n a.x + a.radius > i.canvas.w ? a.vx = -a.vx : a.x - a.radius < 0 && (a.vx = -a.vx), a.y + a.radius > i.canvas.h ? a.vy = -a.vy : a.y - a.radius < 0 && (a.vy = -a.vy);\n }\n if (isInArray(\"grab\", i.interactivity.events.onhover.mode) && i.fn.modes.grabParticle(a), (isInArray(\"bubble\", i.interactivity.events.onhover.mode) || isInArray(\"bubble\", i.interactivity.events.onclick.mode)) && i.fn.modes.bubbleParticle(a), (isInArray(\"repulse\", i.interactivity.events.onhover.mode) || isInArray(\"repulse\", i.interactivity.events.onclick.mode)) && i.fn.modes.repulseParticle(a), i.particles.line_linked.enable || i.particles.move.attract.enable) for (var n = e + 1; n < i.particles.array.length; n++) {\n var r = i.particles.array[n];\n i.particles.line_linked.enable && i.fn.interact.linkParticles(a, r), i.particles.move.attract.enable && i.fn.interact.attractParticles(a, r), i.particles.move.bounce && i.fn.interact.bounceParticles(a, r);\n }\n }\n }, i.fn.particlesDraw = function () {\n i.canvas.ctx.clearRect(0, 0, i.canvas.w, i.canvas.h), i.fn.particlesUpdate();\n for (var e = 0; e < i.particles.array.length; e++) {\n var a = i.particles.array[e];\n a.draw();\n }\n }, i.fn.particlesEmpty = function () {\n i.particles.array = [];\n }, i.fn.particlesRefresh = function () {\n cancelRequestAnimFrame(i.fn.checkAnimFrame), cancelRequestAnimFrame(i.fn.drawAnimFrame), i.tmp.source_svg = void 0, i.tmp.img_obj = void 0, i.tmp.count_svg = 0, i.fn.particlesEmpty(), i.fn.canvasClear(), i.fn.vendors.start();\n }, i.fn.interact.linkParticles = function (e, a) {\n var t = e.x - a.x,\n s = e.y - a.y,\n n = Math.sqrt(t * t + s * s);\n if (n <= i.particles.line_linked.distance) {\n var r = i.particles.line_linked.opacity - n / (1 / i.particles.line_linked.opacity) / i.particles.line_linked.distance;\n if (r > 0) {\n var c = i.particles.line_linked.color_rgb_line;\n i.canvas.ctx.strokeStyle = \"rgba(\" + c.r + \",\" + c.g + \",\" + c.b + \",\" + r + \")\", i.canvas.ctx.lineWidth = i.particles.line_linked.width, i.canvas.ctx.beginPath(), i.canvas.ctx.moveTo(e.x, e.y), i.canvas.ctx.lineTo(a.x, a.y), i.canvas.ctx.stroke(), i.canvas.ctx.closePath();\n }\n }\n }, i.fn.interact.attractParticles = function (e, a) {\n var t = e.x - a.x,\n s = e.y - a.y,\n n = Math.sqrt(t * t + s * s);\n if (n <= i.particles.line_linked.distance) {\n var r = t / (1e3 * i.particles.move.attract.rotateX),\n c = s / (1e3 * i.particles.move.attract.rotateY);\n e.vx -= r, e.vy -= c, a.vx += r, a.vy += c;\n }\n }, i.fn.interact.bounceParticles = function (e, a) {\n var t = e.x - a.x,\n i = e.y - a.y,\n s = Math.sqrt(t * t + i * i),\n n = e.radius + a.radius;\n n >= s && (e.vx = -e.vx, e.vy = -e.vy, a.vx = -a.vx, a.vy = -a.vy);\n }, i.fn.modes.pushParticles = function (e, a) {\n i.tmp.pushing = !0;\n for (var t = 0; e > t; t++) {\n i.particles.array.push(new i.fn.particle(i.particles.color, i.particles.opacity.value, {\n x: a ? a.pos_x : Math.random() * i.canvas.w,\n y: a ? a.pos_y : Math.random() * i.canvas.h\n })), t == e - 1 && (i.particles.move.enable || i.fn.particlesDraw(), i.tmp.pushing = !1);\n }\n }, i.fn.modes.removeParticles = function (e) {\n i.particles.array.splice(0, e), i.particles.move.enable || i.fn.particlesDraw();\n }, i.fn.modes.bubbleParticle = function (e) {\n function a() {\n e.opacity_bubble = e.opacity, e.radius_bubble = e.radius;\n }\n\n function t(a, t, s, n, c) {\n if (a != t) if (i.tmp.bubble_duration_end) {\n if (void 0 != s) {\n var o = n - p * (n - a) / i.interactivity.modes.bubble.duration,\n l = a - o;\n d = a + l, \"size\" == c && (e.radius_bubble = d), \"opacity\" == c && (e.opacity_bubble = d);\n }\n } else if (r <= i.interactivity.modes.bubble.distance) {\n if (void 0 != s) var v = s;else var v = n;\n if (v != a) {\n var d = n - p * (n - a) / i.interactivity.modes.bubble.duration;\n \"size\" == c && (e.radius_bubble = d), \"opacity\" == c && (e.opacity_bubble = d);\n }\n } else \"size\" == c && (e.radius_bubble = void 0), \"opacity\" == c && (e.opacity_bubble = void 0);\n }\n\n if (i.interactivity.events.onhover.enable && isInArray(\"bubble\", i.interactivity.events.onhover.mode)) {\n var s = e.x - i.interactivity.mouse.pos_x,\n n = e.y - i.interactivity.mouse.pos_y,\n r = Math.sqrt(s * s + n * n),\n c = 1 - r / i.interactivity.modes.bubble.distance;\n if (r <= i.interactivity.modes.bubble.distance) {\n if (c >= 0 && \"mousemove\" == i.interactivity.status) {\n if (i.interactivity.modes.bubble.size != i.particles.size.value) if (i.interactivity.modes.bubble.size > i.particles.size.value) {\n var o = e.radius + i.interactivity.modes.bubble.size * c;\n o >= 0 && (e.radius_bubble = o);\n } else {\n var l = e.radius - i.interactivity.modes.bubble.size,\n o = e.radius - l * c;\n o > 0 ? e.radius_bubble = o : e.radius_bubble = 0;\n }\n if (i.interactivity.modes.bubble.opacity != i.particles.opacity.value) if (i.interactivity.modes.bubble.opacity > i.particles.opacity.value) {\n var v = i.interactivity.modes.bubble.opacity * c;\n v > e.opacity && v <= i.interactivity.modes.bubble.opacity && (e.opacity_bubble = v);\n } else {\n var v = e.opacity - (i.particles.opacity.value - i.interactivity.modes.bubble.opacity) * c;\n v < e.opacity && v >= i.interactivity.modes.bubble.opacity && (e.opacity_bubble = v);\n }\n }\n } else a();\n \"mouseleave\" == i.interactivity.status && a();\n } else if (i.interactivity.events.onclick.enable && isInArray(\"bubble\", i.interactivity.events.onclick.mode)) {\n if (i.tmp.bubble_clicking) {\n var s = e.x - i.interactivity.mouse.click_pos_x,\n n = e.y - i.interactivity.mouse.click_pos_y,\n r = Math.sqrt(s * s + n * n),\n p = (new Date().getTime() - i.interactivity.mouse.click_time) / 1e3;\n p > i.interactivity.modes.bubble.duration && (i.tmp.bubble_duration_end = !0), p > 2 * i.interactivity.modes.bubble.duration && (i.tmp.bubble_clicking = !1, i.tmp.bubble_duration_end = !1);\n }\n i.tmp.bubble_clicking && (t(i.interactivity.modes.bubble.size, i.particles.size.value, e.radius_bubble, e.radius, \"size\"), t(i.interactivity.modes.bubble.opacity, i.particles.opacity.value, e.opacity_bubble, e.opacity, \"opacity\"));\n }\n }, i.fn.modes.repulseParticle = function (e) {\n function a() {\n var a = Math.atan2(d, p);\n if (e.vx = u * Math.cos(a), e.vy = u * Math.sin(a), \"bounce\" == i.particles.move.out_mode) {\n var t = { x: e.x + e.vx, y: e.y + e.vy };\n t.x + e.radius > i.canvas.w ? e.vx = -e.vx : t.x - e.radius < 0 && (e.vx = -e.vx), t.y + e.radius > i.canvas.h ? e.vy = -e.vy : t.y - e.radius < 0 && (e.vy = -e.vy);\n }\n }\n\n if (i.interactivity.events.onhover.enable && isInArray(\"repulse\", i.interactivity.events.onhover.mode) && \"mousemove\" == i.interactivity.status) {\n var t = e.x - i.interactivity.mouse.pos_x,\n s = e.y - i.interactivity.mouse.pos_y,\n n = Math.sqrt(t * t + s * s),\n r = { x: t / n, y: s / n },\n c = i.interactivity.modes.repulse.distance,\n o = 100,\n l = clamp(1 / c * (-1 * Math.pow(n / c, 2) + 1) * c * o, 0, 50),\n v = { x: e.x + r.x * l, y: e.y + r.y * l };\n \"bounce\" == i.particles.move.out_mode ? (v.x - e.radius > 0 && v.x + e.radius < i.canvas.w && (e.x = v.x), v.y - e.radius > 0 && v.y + e.radius < i.canvas.h && (e.y = v.y)) : (e.x = v.x, e.y = v.y);\n } else if (i.interactivity.events.onclick.enable && isInArray(\"repulse\", i.interactivity.events.onclick.mode)) if (i.tmp.repulse_finish || (i.tmp.repulse_count++, i.tmp.repulse_count == i.particles.array.length && (i.tmp.repulse_finish = !0)), i.tmp.repulse_clicking) {\n var c = Math.pow(i.interactivity.modes.repulse.distance / 6, 3),\n p = i.interactivity.mouse.click_pos_x - e.x,\n d = i.interactivity.mouse.click_pos_y - e.y,\n m = p * p + d * d,\n u = -c / m * 1;\n c >= m && a();\n } else 0 == i.tmp.repulse_clicking && (e.vx = e.vx_i, e.vy = e.vy_i);\n }, i.fn.modes.grabParticle = function (e) {\n if (i.interactivity.events.onhover.enable && \"mousemove\" == i.interactivity.status) {\n var a = e.x - i.interactivity.mouse.pos_x,\n t = e.y - i.interactivity.mouse.pos_y,\n s = Math.sqrt(a * a + t * t);\n if (s <= i.interactivity.modes.grab.distance) {\n var n = i.interactivity.modes.grab.line_linked.opacity - s / (1 / i.interactivity.modes.grab.line_linked.opacity) / i.interactivity.modes.grab.distance;\n if (n > 0) {\n var r = i.particles.line_linked.color_rgb_line;\n i.canvas.ctx.strokeStyle = \"rgba(\" + r.r + \",\" + r.g + \",\" + r.b + \",\" + n + \")\", i.canvas.ctx.lineWidth = i.particles.line_linked.width, i.canvas.ctx.beginPath(), i.canvas.ctx.moveTo(e.x, e.y), i.canvas.ctx.lineTo(i.interactivity.mouse.pos_x, i.interactivity.mouse.pos_y), i.canvas.ctx.stroke(), i.canvas.ctx.closePath();\n }\n }\n }\n }, i.fn.vendors.eventsListeners = function () {\n \"window\" == i.interactivity.detect_on ? i.interactivity.el = window : i.interactivity.el = i.canvas.el, (i.interactivity.events.onhover.enable || i.interactivity.events.onclick.enable) && (i.interactivity.el.addEventListener(\"mousemove\", function (e) {\n if (i.interactivity.el == window) var a = e.clientX,\n t = e.clientY;else var a = e.offsetX || e.clientX,\n t = e.offsetY || e.clientY;\n i.interactivity.mouse.pos_x = a, i.interactivity.mouse.pos_y = t, i.tmp.retina && (i.interactivity.mouse.pos_x *= i.canvas.pxratio, i.interactivity.mouse.pos_y *= i.canvas.pxratio), i.interactivity.status = \"mousemove\";\n }), i.interactivity.el.addEventListener(\"mouseleave\", function (e) {\n i.interactivity.mouse.pos_x = null, i.interactivity.mouse.pos_y = null, i.interactivity.status = \"mouseleave\";\n })), i.interactivity.events.onclick.enable && i.interactivity.el.addEventListener(\"click\", function () {\n if (i.interactivity.mouse.click_pos_x = i.interactivity.mouse.pos_x, i.interactivity.mouse.click_pos_y = i.interactivity.mouse.pos_y, i.interactivity.mouse.click_time = new Date().getTime(), i.interactivity.events.onclick.enable) switch (i.interactivity.events.onclick.mode) {\n case \"push\":\n i.particles.move.enable ? i.fn.modes.pushParticles(i.interactivity.modes.push.particles_nb, i.interactivity.mouse) : 1 == i.interactivity.modes.push.particles_nb ? i.fn.modes.pushParticles(i.interactivity.modes.push.particles_nb, i.interactivity.mouse) : i.interactivity.modes.push.particles_nb > 1 && i.fn.modes.pushParticles(i.interactivity.modes.push.particles_nb);\n break;\n case \"remove\":\n i.fn.modes.removeParticles(i.interactivity.modes.remove.particles_nb);\n break;\n case \"bubble\":\n i.tmp.bubble_clicking = !0;\n break;\n case \"repulse\":\n i.tmp.repulse_clicking = !0, i.tmp.repulse_count = 0, i.tmp.repulse_finish = !1, setTimeout(function () {\n i.tmp.repulse_clicking = !1;\n }, 1e3 * i.interactivity.modes.repulse.duration);\n }\n });\n }, i.fn.vendors.densityAutoParticles = function () {\n if (i.particles.number.density.enable) {\n var e = i.canvas.el.width * i.canvas.el.height / 1e3;\n i.tmp.retina && (e /= 2 * i.canvas.pxratio);\n var a = e * i.particles.number.value / i.particles.number.density.value_area,\n t = i.particles.array.length - a;\n 0 > t ? i.fn.modes.pushParticles(Math.abs(t)) : i.fn.modes.removeParticles(t);\n }\n }, i.fn.vendors.checkOverlap = function (e, a) {\n for (var t = 0; t < i.particles.array.length; t++) {\n var s = i.particles.array[t],\n n = e.x - s.x,\n r = e.y - s.y,\n c = Math.sqrt(n * n + r * r);\n c <= e.radius + s.radius && (e.x = a ? a.x : Math.random() * i.canvas.w, e.y = a ? a.y : Math.random() * i.canvas.h, i.fn.vendors.checkOverlap(e));\n }\n }, i.fn.vendors.createSvgImg = function (e) {\n var a = i.tmp.source_svg,\n t = /#([0-9A-F]{3,6})/gi,\n s = a.replace(t, function (a, t, i, s) {\n if (e.color.rgb) var n = \"rgba(\" + e.color.rgb.r + \",\" + e.color.rgb.g + \",\" + e.color.rgb.b + \",\" + e.opacity + \")\";else var n = \"hsla(\" + e.color.hsl.h + \",\" + e.color.hsl.s + \"%,\" + e.color.hsl.l + \"%,\" + e.opacity + \")\";\n return n;\n }),\n n = new Blob([s], { type: \"image/svg+xml;charset=utf-8\" }),\n r = window.URL || window.webkitURL || window,\n c = r.createObjectURL(n),\n o = new Image();\n o.addEventListener(\"load\", function () {\n e.img.obj = o, e.img.loaded = !0, r.revokeObjectURL(c), i.tmp.count_svg++;\n }), o.src = c;\n }, i.fn.vendors.destroypJS = function () {\n cancelAnimationFrame(i.fn.drawAnimFrame), t.remove(), pJSDom = null;\n }, i.fn.vendors.drawShape = function (e, a, t, i, s, n) {\n var r = s * n,\n c = s / n,\n o = 180 * (c - 2) / c,\n l = Math.PI - Math.PI * o / 180;\n e.save(), e.beginPath(), e.translate(a, t), e.moveTo(0, 0);\n for (var v = 0; r > v; v++) {\n e.lineTo(i, 0), e.translate(i, 0), e.rotate(l);\n }e.fill(), e.restore();\n }, i.fn.vendors.exportImg = function () {\n window.open(i.canvas.el.toDataURL(\"image/png\"), \"_blank\");\n }, i.fn.vendors.loadImg = function (e) {\n if (i.tmp.img_error = void 0, \"\" != i.particles.shape.image.src) {\n if (\"svg\" == e) {\n var a = new XMLHttpRequest();\n a.open(\"GET\", i.particles.shape.image.src), a.onreadystatechange = function (e) {\n 4 == a.readyState && (200 == a.status ? (i.tmp.source_svg = e.currentTarget.response, i.fn.vendors.checkBeforeDraw()) : (console.log(\"Error pJS - Image not found\"), i.tmp.img_error = !0));\n }, a.send();\n } else {\n var t = new Image();\n t.addEventListener(\"load\", function () {\n i.tmp.img_obj = t, i.fn.vendors.checkBeforeDraw();\n }), t.src = i.particles.shape.image.src;\n }\n } else console.log(\"Error pJS - No image.src\"), i.tmp.img_error = !0;\n }, i.fn.vendors.draw = function () {\n \"image\" == i.particles.shape.type ? \"svg\" == i.tmp.img_type ? i.tmp.count_svg >= i.particles.number.value ? (i.fn.particlesDraw(), i.particles.move.enable ? i.fn.drawAnimFrame = requestAnimFrame(i.fn.vendors.draw) : cancelRequestAnimFrame(i.fn.drawAnimFrame)) : i.tmp.img_error || (i.fn.drawAnimFrame = requestAnimFrame(i.fn.vendors.draw)) : void 0 != i.tmp.img_obj ? (i.fn.particlesDraw(), i.particles.move.enable ? i.fn.drawAnimFrame = requestAnimFrame(i.fn.vendors.draw) : cancelRequestAnimFrame(i.fn.drawAnimFrame)) : i.tmp.img_error || (i.fn.drawAnimFrame = requestAnimFrame(i.fn.vendors.draw)) : (i.fn.particlesDraw(), i.particles.move.enable ? i.fn.drawAnimFrame = requestAnimFrame(i.fn.vendors.draw) : cancelRequestAnimFrame(i.fn.drawAnimFrame));\n }, i.fn.vendors.checkBeforeDraw = function () {\n \"image\" == i.particles.shape.type ? \"svg\" == i.tmp.img_type && void 0 == i.tmp.source_svg ? i.tmp.checkAnimFrame = requestAnimFrame(check) : (cancelRequestAnimFrame(i.tmp.checkAnimFrame), i.tmp.img_error || (i.fn.vendors.init(), i.fn.vendors.draw())) : (i.fn.vendors.init(), i.fn.vendors.draw());\n }, i.fn.vendors.init = function () {\n i.fn.retinaInit(), i.fn.canvasInit(), i.fn.canvasSize(), i.fn.canvasPaint(), i.fn.particlesCreate(), i.fn.vendors.densityAutoParticles(), i.particles.line_linked.color_rgb_line = hexToRgb(i.particles.line_linked.color);\n }, i.fn.vendors.start = function () {\n isInArray(\"image\", i.particles.shape.type) ? (i.tmp.img_type = i.particles.shape.image.src.substr(i.particles.shape.image.src.length - 3), i.fn.vendors.loadImg(i.tmp.img_type)) : i.fn.vendors.checkBeforeDraw();\n }, i.fn.vendors.eventsListeners(), i.fn.vendors.start();\n};\nObject.deepExtend = function (e, a) {\n for (var t in a) {\n a[t] && a[t].constructor && a[t].constructor === Object ? (e[t] = e[t] || {}, arguments.callee(e[t], a[t])) : e[t] = a[t];\n }return e;\n}, window.requestAnimFrame = function () {\n return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (e) {\n window.setTimeout(e, 1e3 / 60);\n };\n}(), window.cancelRequestAnimFrame = function () {\n return window.cancelAnimationFrame || window.webkitCancelRequestAnimationFrame || window.mozCancelRequestAnimationFrame || window.oCancelRequestAnimationFrame || window.msCancelRequestAnimationFrame || clearTimeout;\n}(), window.pJSDom = [], window.particlesJS = function (e, a) {\n \"string\" != typeof e && (a = e, e = \"particles-js\"), e || (e = \"particles-js\");\n var t = document.getElementById(e),\n i = \"particles-js-canvas-el\",\n s = t.getElementsByClassName(i);\n if (s.length) for (; s.length > 0;) {\n t.removeChild(s[0]);\n }var n = document.createElement(\"canvas\");\n n.className = i, n.style.width = \"100%\", n.style.height = \"100%\";\n var r = document.getElementById(e).appendChild(n);\n null != r && pJSDom.push(new pJS(e, a));\n}, window.particlesJS.load = function (e, a, t) {\n var i = new XMLHttpRequest();\n i.open(\"GET\", a), i.onreadystatechange = function (a) {\n if (4 == i.readyState) if (200 == i.status) {\n var s = JSON.parse(a.currentTarget.response);\n window.particlesJS(e, s), t && t();\n } else console.log(\"Error pJS - XMLHttpRequest status: \" + i.status), console.log(\"Error pJS - File config not found\");\n }, i.send();\n};"]}