.elementor-4413 .elementor-element.elementor-element-b4f6789{--display:flex;--min-height:30vh;--align-items:center;--container-widget-width:calc( ( 1 - var( --container-widget-flex-grow ) ) * 100% );--gap:80px 80px;--row-gap:80px;--column-gap:80px;--padding-top:80px;--padding-bottom:40px;--padding-left:80px;--padding-right:80px;}.elementor-4413 .elementor-element.elementor-element-b4f6789:not(.elementor-motion-effects-element-type-background), .elementor-4413 .elementor-element.elementor-element-b4f6789 > .elementor-motion-effects-container > .elementor-motion-effects-layer{background-color:#F5F9FC;}.elementor-4413 .elementor-element.elementor-element-b4f6789 .trx_addons_bg_text{z-index:0;}.elementor-4413 .elementor-element.elementor-element-b4f6789 .trx_addons_bg_text.trx_addons_marquee_wrap:not(.trx_addons_marquee_reverse) .trx_addons_marquee_element{padding-right:50px;}.elementor-4413 .elementor-element.elementor-element-b4f6789 .trx_addons_bg_text.trx_addons_marquee_wrap.trx_addons_marquee_reverse .trx_addons_marquee_element{padding-left:50px;}.elementor-4413 .elementor-element.elementor-element-cc461e2{--display:flex;--flex-direction:row;--container-widget-width:initial;--container-widget-height:100%;--container-widget-flex-grow:1;--container-widget-align-self:stretch;--flex-wrap-mobile:wrap;--justify-content:center;--gap:50px 50px;--row-gap:50px;--column-gap:50px;}.elementor-4413 .elementor-element.elementor-element-cc461e2 .trx_addons_bg_text{z-index:0;}.elementor-4413 .elementor-element.elementor-element-cc461e2 .trx_addons_bg_text.trx_addons_marquee_wrap:not(.trx_addons_marquee_reverse) .trx_addons_marquee_element{padding-right:50px;}.elementor-4413 .elementor-element.elementor-element-cc461e2 .trx_addons_bg_text.trx_addons_marquee_wrap.trx_addons_marquee_reverse .trx_addons_marquee_element{padding-left:50px;}.elementor-4413 .elementor-element.elementor-element-cc461e2.e-con{--flex-grow:0;--flex-shrink:0;}.elementor-4413 .elementor-element.elementor-element-5c72696{--display:flex;--align-items:center;--container-widget-width:calc( ( 1 - var( --container-widget-flex-grow ) ) * 100% );}.elementor-4413 .elementor-element.elementor-element-5c72696 .trx_addons_bg_text{z-index:0;}.elementor-4413 .elementor-element.elementor-element-5c72696 .trx_addons_bg_text.trx_addons_marquee_wrap:not(.trx_addons_marquee_reverse) .trx_addons_marquee_element{padding-right:50px;}.elementor-4413 .elementor-element.elementor-element-5c72696 .trx_addons_bg_text.trx_addons_marquee_wrap.trx_addons_marquee_reverse .trx_addons_marquee_element{padding-left:50px;}.elementor-widget-heading .elementor-heading-title{font-family:var( --e-global-typography-primary-font-family ), Sans-serif;font-weight:var( --e-global-typography-primary-font-weight );color:var( --e-global-color-primary );}.elementor-4413 .elementor-element.elementor-element-5d821e6{margin:0px 0px calc(var(--kit-widget-spacing, 0px) + 0px) 0px;}.elementor-4413 .elementor-element.elementor-element-5d821e6 .elementor-heading-title{font-size:14px;text-transform:uppercase;line-height:1em;letter-spacing:1px;color:var( --e-global-color-accent );}.elementor-4413 .elementor-element.elementor-element-4e7880c{width:var( --container-widget-width, 70% );max-width:70%;--container-widget-width:70%;--container-widget-flex-grow:0;text-align:center;}.elementor-4413 .elementor-element.elementor-element-4e7880c .elementor-heading-title{font-family:"Plus Jakarta Sans", Sans-serif;font-size:60px;font-weight:900;text-transform:none;font-style:normal;text-decoration:none;line-height:72px;}.elementor-widget-text-editor{font-family:var( --e-global-typography-text-font-family ), Sans-serif;font-weight:var( --e-global-typography-text-font-weight );color:var( --e-global-color-text );}.elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap{background-color:var( --e-global-color-primary );}.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap, .elementor-widget-text-editor.elementor-drop-cap-view-default .elementor-drop-cap{color:var( --e-global-color-primary );border-color:var( --e-global-color-primary );}.elementor-4413 .elementor-element.elementor-element-a128e00{width:var( --container-widget-width, 70% );max-width:70%;--container-widget-width:70%;--container-widget-flex-grow:0;text-align:center;}.elementor-4413 .elementor-element.elementor-element-cab044e{--display:flex;--flex-direction:row;--container-widget-width:calc( ( 1 - var( --container-widget-flex-grow ) ) * 100% );--container-widget-height:100%;--container-widget-flex-grow:1;--container-widget-align-self:stretch;--flex-wrap-mobile:wrap;--justify-content:flex-start;--align-items:flex-start;--gap:20px 20px;--row-gap:20px;--column-gap:20px;--padding-top:40px;--padding-bottom:80px;--padding-left:20px;--padding-right:20px;}.elementor-4413 .elementor-element.elementor-element-cab044e:not(.elementor-motion-effects-element-type-background), .elementor-4413 .elementor-element.elementor-element-cab044e > .elementor-motion-effects-container > .elementor-motion-effects-layer{background-color:#F5F9FC;}.elementor-4413 .elementor-element.elementor-element-cab044e .trx_addons_bg_text{z-index:0;}.elementor-4413 .elementor-element.elementor-element-cab044e .trx_addons_bg_text.trx_addons_marquee_wrap:not(.trx_addons_marquee_reverse) .trx_addons_marquee_element{padding-right:50px;}.elementor-4413 .elementor-element.elementor-element-cab044e .trx_addons_bg_text.trx_addons_marquee_wrap.trx_addons_marquee_reverse .trx_addons_marquee_element{padding-left:50px;}.elementor-4413 .elementor-element.elementor-element-388213a{--display:flex;}.elementor-4413 .elementor-element.elementor-element-388213a .trx_addons_bg_text{z-index:0;}.elementor-4413 .elementor-element.elementor-element-388213a .trx_addons_bg_text.trx_addons_marquee_wrap:not(.trx_addons_marquee_reverse) .trx_addons_marquee_element{padding-right:50px;}.elementor-4413 .elementor-element.elementor-element-388213a .trx_addons_bg_text.trx_addons_marquee_wrap.trx_addons_marquee_reverse .trx_addons_marquee_element{padding-left:50px;}.elementor-4413 .elementor-element.elementor-element-324123b{--display:flex;--align-items:flex-start;--container-widget-width:calc( ( 1 - var( --container-widget-flex-grow ) ) * 100% );--gap:20px 20px;--row-gap:20px;--column-gap:20px;}.elementor-4413 .elementor-element.elementor-element-324123b .trx_addons_bg_text{z-index:0;}.elementor-4413 .elementor-element.elementor-element-324123b .trx_addons_bg_text.trx_addons_marquee_wrap:not(.trx_addons_marquee_reverse) .trx_addons_marquee_element{padding-right:50px;}.elementor-4413 .elementor-element.elementor-element-324123b .trx_addons_bg_text.trx_addons_marquee_wrap.trx_addons_marquee_reverse .trx_addons_marquee_element{padding-left:50px;}.elementor-4413 .elementor-element.elementor-element-ece93f8{margin:0px 0px calc(var(--kit-widget-spacing, 0px) + 0px) 0px;}.elementor-4413 .elementor-element.elementor-element-ece93f8 .elementor-heading-title{font-size:14px;text-transform:uppercase;line-height:1em;letter-spacing:1px;color:var( --e-global-color-accent );}.elementor-4413 .elementor-element.elementor-element-98ca5de{text-align:start;}.elementor-4413 .elementor-element.elementor-element-98ca5de .elementor-heading-title{font-family:"Plus Jakarta Sans", Sans-serif;font-size:45px;font-weight:900;text-transform:none;font-style:normal;text-decoration:none;line-height:55px;}.elementor-4413 .elementor-element.elementor-element-f6767ee{text-align:start;font-family:"Plus Jakarta Sans", Sans-serif;font-size:16px;font-weight:500;line-height:24px;}.elementor-4413 .elementor-element.elementor-element-467888a{--display:flex;--flex-direction:row;--container-widget-width:calc( ( 1 - var( --container-widget-flex-grow ) ) * 100% );--container-widget-height:100%;--container-widget-flex-grow:1;--container-widget-align-self:stretch;--flex-wrap-mobile:wrap;--align-items:flex-start;--padding-top:80px;--padding-bottom:80px;--padding-left:20px;--padding-right:20px;}.elementor-4413 .elementor-element.elementor-element-467888a .trx_addons_bg_text{z-index:0;}.elementor-4413 .elementor-element.elementor-element-467888a .trx_addons_bg_text.trx_addons_marquee_wrap:not(.trx_addons_marquee_reverse) .trx_addons_marquee_element{padding-right:50px;}.elementor-4413 .elementor-element.elementor-element-467888a .trx_addons_bg_text.trx_addons_marquee_wrap.trx_addons_marquee_reverse .trx_addons_marquee_element{padding-left:50px;}.elementor-4413 .elementor-element.elementor-element-431d4c1{--display:flex;--align-items:center;--container-widget-width:calc( ( 1 - var( --container-widget-flex-grow ) ) * 100% );--gap:20px 20px;--row-gap:20px;--column-gap:20px;}.elementor-4413 .elementor-element.elementor-element-431d4c1 .trx_addons_bg_text{z-index:0;}.elementor-4413 .elementor-element.elementor-element-431d4c1 .trx_addons_bg_text.trx_addons_marquee_wrap:not(.trx_addons_marquee_reverse) .trx_addons_marquee_element{padding-right:50px;}.elementor-4413 .elementor-element.elementor-element-431d4c1 .trx_addons_bg_text.trx_addons_marquee_wrap.trx_addons_marquee_reverse .trx_addons_marquee_element{padding-left:50px;}.elementor-4413 .elementor-element.elementor-element-d31a95e{width:var( --container-widget-width, 80% );max-width:80%;--container-widget-width:80%;--container-widget-flex-grow:0;text-align:center;}.elementor-4413 .elementor-element.elementor-element-d31a95e .elementor-heading-title{font-family:"Plus Jakarta Sans", Sans-serif;font-size:45px;font-weight:900;text-transform:none;font-style:normal;text-decoration:none;line-height:55px;}.elementor-4413 .elementor-element.elementor-element-8fe476f{width:var( --container-widget-width, 69% );max-width:69%;--container-widget-width:69%;--container-widget-flex-grow:0;text-align:center;font-family:"Plus Jakarta Sans", Sans-serif;font-size:16px;font-weight:500;line-height:24px;}.elementor-4413 .elementor-element.elementor-element-4fc9169{--display:flex;--align-items:center;--container-widget-width:calc( ( 1 - var( --container-widget-flex-grow ) ) * 100% );}.elementor-4413 .elementor-element.elementor-element-4fc9169 .trx_addons_bg_text{z-index:0;}.elementor-4413 .elementor-element.elementor-element-4fc9169 .trx_addons_bg_text.trx_addons_marquee_wrap:not(.trx_addons_marquee_reverse) .trx_addons_marquee_element{padding-right:50px;}.elementor-4413 .elementor-element.elementor-element-4fc9169 .trx_addons_bg_text.trx_addons_marquee_wrap.trx_addons_marquee_reverse .trx_addons_marquee_element{padding-left:50px;}.elementor-4413 .elementor-element.elementor-element-c7f6e37{--display:flex;}.elementor-4413 .elementor-element.elementor-element-c7f6e37 .trx_addons_bg_text{z-index:0;}.elementor-4413 .elementor-element.elementor-element-c7f6e37 .trx_addons_bg_text.trx_addons_marquee_wrap:not(.trx_addons_marquee_reverse) .trx_addons_marquee_element{padding-right:50px;}.elementor-4413 .elementor-element.elementor-element-c7f6e37 .trx_addons_bg_text.trx_addons_marquee_wrap.trx_addons_marquee_reverse .trx_addons_marquee_element{padding-left:50px;}.elementor-4413 .elementor-element.elementor-element-c7f6e37.e-con{--flex-grow:0;--flex-shrink:0;}:root{--page-title-display:none;}@media(min-width:768px){.elementor-4413 .elementor-element.elementor-element-b4f6789{--content-width:1200px;}.elementor-4413 .elementor-element.elementor-element-cc461e2{--content-width:1440px;}.elementor-4413 .elementor-element.elementor-element-cab044e{--content-width:1200px;}.elementor-4413 .elementor-element.elementor-element-324123b{--width:80%;}.elementor-4413 .elementor-element.elementor-element-467888a{--content-width:1200px;}.elementor-4413 .elementor-element.elementor-element-431d4c1{--width:70%;}.elementor-4413 .elementor-element.elementor-element-c7f6e37{--width:40%;}}@media(max-width:1024px){.elementor-4413 .elementor-element.elementor-element-b4f6789{--min-height:70vh;--padding-top:40px;--padding-bottom:40px;--padding-left:20px;--padding-right:20px;}.elementor-4413 .elementor-element.elementor-element-5d821e6{margin:0px 0px calc(var(--kit-widget-spacing, 0px) + 0px) 0px;}.elementor-4413 .elementor-element.elementor-element-4e7880c .elementor-heading-title{font-size:45px;line-height:55px;}.elementor-4413 .elementor-element.elementor-element-cab044e{--flex-direction:column;--container-widget-width:100%;--container-widget-height:initial;--container-widget-flex-grow:0;--container-widget-align-self:initial;--flex-wrap-mobile:wrap;--padding-top:40px;--padding-bottom:40px;--padding-left:20px;--padding-right:20px;}.elementor-4413 .elementor-element.elementor-element-324123b{--gap:20px 20px;--row-gap:20px;--column-gap:20px;--padding-top:5px;--padding-bottom:5px;--padding-left:5px;--padding-right:5px;}.elementor-4413 .elementor-element.elementor-element-ece93f8{margin:0px 0px calc(var(--kit-widget-spacing, 0px) + 0px) 0px;}.elementor-4413 .elementor-element.elementor-element-98ca5de .elementor-heading-title{font-size:45px;}.elementor-4413 .elementor-element.elementor-element-467888a{--flex-direction:column;--container-widget-width:100%;--container-widget-height:initial;--container-widget-flex-grow:0;--container-widget-align-self:initial;--flex-wrap-mobile:wrap;--padding-top:40px;--padding-bottom:40px;--padding-left:20px;--padding-right:20px;}.elementor-4413 .elementor-element.elementor-element-431d4c1{--gap:20px 20px;--row-gap:20px;--column-gap:20px;--padding-top:5px;--padding-bottom:5px;--padding-left:5px;--padding-right:5px;}.elementor-4413 .elementor-element.elementor-element-d31a95e .elementor-heading-title{font-size:45px;}}@media(max-width:767px){.elementor-4413 .elementor-element.elementor-element-b4f6789{--min-height:30vh;--gap:50px 50px;--row-gap:50px;--column-gap:50px;--padding-top:40px;--padding-bottom:40px;--padding-left:20px;--padding-right:20px;}.elementor-4413 .elementor-element.elementor-element-cc461e2{--gap:40px 40px;--row-gap:40px;--column-gap:40px;}.elementor-4413 .elementor-element.elementor-element-5c72696{--gap:10px 10px;--row-gap:10px;--column-gap:10px;}.elementor-4413 .elementor-element.elementor-element-5d821e6{margin:0px 0px calc(var(--kit-widget-spacing, 0px) + 0px) 0px;}.elementor-4413 .elementor-element.elementor-element-5d821e6 .elementor-heading-title{font-size:13px;}.elementor-4413 .elementor-element.elementor-element-4e7880c{width:100%;max-width:100%;}.elementor-4413 .elementor-element.elementor-element-4e7880c .elementor-heading-title{font-size:34px;line-height:36px;}.elementor-4413 .elementor-element.elementor-element-a128e00{width:100%;max-width:100%;text-align:center;}.elementor-4413 .elementor-element.elementor-element-cab044e{--gap:50px 50px;--row-gap:50px;--column-gap:50px;--padding-top:40px;--padding-bottom:40px;--padding-left:20px;--padding-right:20px;}.elementor-4413 .elementor-element.elementor-element-324123b{--align-items:flex-start;--container-widget-width:calc( ( 1 - var( --container-widget-flex-grow ) ) * 100% );--gap:10px 10px;--row-gap:10px;--column-gap:10px;--padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;}.elementor-4413 .elementor-element.elementor-element-ece93f8{margin:0px 0px calc(var(--kit-widget-spacing, 0px) + 0px) 0px;}.elementor-4413 .elementor-element.elementor-element-ece93f8 .elementor-heading-title{font-size:13px;}.elementor-4413 .elementor-element.elementor-element-98ca5de .elementor-heading-title{font-size:28px;line-height:30px;}.elementor-4413 .elementor-element.elementor-element-f6767ee{width:100%;max-width:100%;}.elementor-4413 .elementor-element.elementor-element-467888a{--gap:50px 50px;--row-gap:50px;--column-gap:50px;--padding-top:40px;--padding-bottom:40px;--padding-left:20px;--padding-right:20px;}.elementor-4413 .elementor-element.elementor-element-431d4c1{--align-items:flex-start;--container-widget-width:calc( ( 1 - var( --container-widget-flex-grow ) ) * 100% );--gap:10px 10px;--row-gap:10px;--column-gap:10px;--padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;}.elementor-4413 .elementor-element.elementor-element-d31a95e{width:100%;max-width:100%;}.elementor-4413 .elementor-element.elementor-element-d31a95e .elementor-heading-title{font-size:28px;line-height:30px;}.elementor-4413 .elementor-element.elementor-element-8fe476f{width:100%;max-width:100%;text-align:center;}}/* Start custom CSS for container, class: .elementor-element-cc461e2 */.elementor-4413 .elementor-element.elementor-element-cc461e2 {
  position: relative;
  z-index: 2;
}/* End custom CSS */
/* Start custom CSS for container, class: .elementor-element-b4f6789 */<style>
.shader-bg-canvas {
  position: absolute;
  top: 0; left: 0;
  width: 100%; height: 100%;
  display: block;
  z-index: 0;
  pointer-events: none;
}
.shader-bg-fallback {
  position: absolute;
  top: 0; left: 0;
  width: 100%; height: 100%;
  z-index: 0;
  background: linear-gradient(135deg, #06303a, #0a4d47);
  background-size: 200% 200%;
  animation: shaderFallback 15s ease infinite;
}
@keyframes shaderFallback {
  0% { background-position: 0% 50%; }
  50% { background-position: 100% 50%; }
  100% { background-position: 0% 50%; }
}
</style>

<script>
(function () {
  var done = false;

  function init() {
    if (done) return;
    var hero = document.getElementById('shader-bg-section');
    if (!hero) return;

    done = true;
    hero.style.position = 'relative';
    hero.style.overflow = 'hidden';

    var prefersReduced = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
    if (prefersReduced) {
      var fallback = document.createElement('div');
      fallback.className = 'shader-bg-fallback';
      hero.insertBefore(fallback, hero.firstChild);
      return;
    }

    var canvas = document.createElement('canvas');
    canvas.className = 'shader-bg-canvas';
    hero.insertBefore(canvas, hero.firstChild);

    var gl = canvas.getContext('webgl');
    if (!gl) {
      var fb = document.createElement('div');
      fb.className = 'shader-bg-fallback';
      hero.insertBefore(fb, hero.firstChild);
      canvas.remove();
      return;
    }

    var vsSource = 'attribute vec4 aVertexPosition;\n' +
      'void main(){ gl_Position = aVertexPosition; }';

    var fsSource = 'precision highp float;\n' +
      'uniform vec2 iResolution;\n' +
      'uniform float iTime;\n' +
      'const float overallSpeed = 0.2;\n' +
      'const float gridSmoothWidth = 0.015;\n' +
      'const float scale = 5.0;\n' +
      'const vec4 lineColor = vec4(0.1, 0.55, 0.5, 1.0);\n' +
      'const float minLineWidth = 0.01;\n' +
      'const float maxLineWidth = 0.2;\n' +
      'const float lineSpeed = 1.0 * overallSpeed;\n' +
      'const float lineAmplitude = 1.0;\n' +
      'const float lineFrequency = 0.2;\n' +
      'const float warpSpeed = 0.2 * overallSpeed;\n' +
      'const float warpFrequency = 0.5;\n' +
      'const float warpAmplitude = 1.0;\n' +
      'const float offsetFrequency = 0.5;\n' +
      'const float offsetSpeed = 1.33 * overallSpeed;\n' +
      'const float minOffsetSpread = 0.6;\n' +
      'const float maxOffsetSpread = 2.0;\n' +
      'const int linesPerGroup = 16;\n' +
      '#define drawCircle(pos, radius, coord) smoothstep(radius + gridSmoothWidth, radius, length(coord - (pos)))\n' +
      '#define drawSmoothLine(pos, halfWidth, t) smoothstep(halfWidth, 0.0, abs(pos - (t)))\n' +
      '#define drawCrispLine(pos, halfWidth, t) smoothstep(halfWidth + gridSmoothWidth, halfWidth, abs(pos - (t)))\n' +
      'float random(float t){ return (cos(t) + cos(t * 1.3 + 1.3) + cos(t * 1.4 + 1.4)) / 3.0; }\n' +
      'float getPlasmaY(float x, float horizontalFade, float offset){\n' +
      '  return random(x * lineFrequency + iTime * lineSpeed) * horizontalFade * lineAmplitude + offset;\n' +
      '}\n' +
      'void main(){\n' +
      '  vec2 fragCoord = gl_FragCoord.xy;\n' +
      '  vec4 fragColor;\n' +
      '  vec2 uv = fragCoord.xy / iResolution.xy;\n' +
      '  vec2 space = (fragCoord - iResolution.xy / 2.0) / iResolution.x * 2.0 * scale;\n' +
      '  float horizontalFade = 1.0 - (cos(uv.x * 6.28) * 0.5 + 0.5);\n' +
      '  float verticalFade = 1.0 - (cos(uv.y * 6.28) * 0.5 + 0.5);\n' +
      '  space.y += random(space.x * warpFrequency + iTime * warpSpeed) * warpAmplitude * (0.5 + horizontalFade);\n' +
      '  space.x += random(space.y * warpFrequency + iTime * warpSpeed + 2.0) * warpAmplitude * horizontalFade;\n' +
      '  vec4 lines = vec4(0.0);\n' +
      '  vec4 bgColor1 = vec4(0.02, 0.12, 0.15, 1.0);\n' +
      '  vec4 bgColor2 = vec4(0.04, 0.25, 0.28, 1.0);\n' +
      '  for(int l = 0; l < linesPerGroup; l++){\n' +
      '    float normalizedLineIndex = float(l) / float(linesPerGroup);\n' +
      '    float offsetTime = iTime * offsetSpeed;\n' +
      '    float offsetPosition = float(l) + space.x * offsetFrequency;\n' +
      '    float rand = random(offsetPosition + offsetTime) * 0.5 + 0.5;\n' +
      '    float halfWidth = mix(minLineWidth, maxLineWidth, rand * horizontalFade) / 2.0;\n' +
      '    float offset = random(offsetPosition + offsetTime * (1.0 + normalizedLineIndex)) * mix(minOffsetSpread, maxOffsetSpread, horizontalFade);\n' +
      '    float linePosition = getPlasmaY(space.x, horizontalFade, offset);\n' +
      '    float line = drawSmoothLine(linePosition, halfWidth, space.y) / 2.0 + drawCrispLine(linePosition, halfWidth * 0.15, space.y);\n' +
      '    float circleX = mod(float(l) + iTime * lineSpeed, 25.0) - 12.0;\n' +
      '    vec2 circlePosition = vec2(circleX, getPlasmaY(circleX, horizontalFade, offset));\n' +
      '    float circle = drawCircle(circlePosition, 0.01, space) * 4.0;\n' +
      '    line = line + circle;\n' +
      '    lines += line * lineColor * rand;\n' +
      '  }\n' +
      '  fragColor = mix(bgColor1, bgColor2, uv.x);\n' +
      '  fragColor *= verticalFade;\n' +
      '  fragColor.a = 1.0;\n' +
      '  fragColor += lines;\n' +
      '  gl_FragColor = fragColor;\n' +
      '}';

    function compile(type, src) {
      var s = gl.createShader(type);
      gl.shaderSource(s, src);
      gl.compileShader(s);
      return s;
    }

    var program = gl.createProgram();
    gl.attachShader(program, compile(gl.VERTEX_SHADER, vsSource));
    gl.attachShader(program, compile(gl.FRAGMENT_SHADER, fsSource));
    gl.linkProgram(program);

    if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
      var fb2 = document.createElement('div');
      fb2.className = 'shader-bg-fallback';
      hero.insertBefore(fb2, hero.firstChild);
      canvas.remove();
      return;
    }

    gl.useProgram(program);

    var positionBuffer = gl.createBuffer();
    gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);
    gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([-1,-1, 1,-1, -1,1, 1,1]), gl.STATIC_DRAW);

    var posLoc = gl.getAttribLocation(program, 'aVertexPosition');
    gl.enableVertexAttribArray(posLoc);
    gl.vertexAttribPointer(posLoc, 2, gl.FLOAT, false, 0, 0);

    var resLoc = gl.getUniformLocation(program, 'iResolution');
    var timeLoc = gl.getUniformLocation(program, 'iTime');

    function resize() {
      var dpr = Math.min(window.devicePixelRatio || 1, 1.5);
      canvas.width = canvas.clientWidth * dpr;
      canvas.height = canvas.clientHeight * dpr;
      gl.viewport(0, 0, canvas.width, canvas.height);
    }
    window.addEventListener('resize', resize);
    resize();

    var startTime = Date.now();
    function render() {
      var currentTime = (Date.now() - startTime) / 1000;
      gl.uniform2f(resLoc, canvas.width, canvas.height);
      gl.uniform1f(timeLoc, currentTime);
      gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
      requestAnimationFrame(render);
    }
    requestAnimationFrame(render);
  }

  setTimeout(init, 100);
  window.addEventListener('load', init);
  document.addEventListener('DOMContentLoaded', init);
})();
</script>/* End custom CSS */