Difference between revisions of "Team:NCTU Formosa"

 
(26 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{NCTU_Formosa}}
+
{{NCTU_Formosa/test}}
 
<html>
 
<html>
    <head>
 
        <style type="text/css">
 
          footer{
 
          text-align:center;
 
          }
 
        </style>
 
    </head>
 
    <body>
 
        <div class="column full_size" >
 
        <h1> Welcome to NCTU_Formosa! </h1><br>
 
        <h4 align="center"> Project Description </h4>
 
        <p>
 
            Imbalanced soil microbiota will cause excessive nutrient components stocking in soil, making it become acidification. <br>
 
            Generally speaking, soluble nutrient components in soil is often lower than the amount plants need. To solve this, people try to add bio-fertilizer into land to
 
            transform more nutrient components into soluble. However, farmers usually apply too much bacteria, destroying soil microbiota, making soil start to acidify. <br>
 
            This year, we want to use Bacteriocin, the natural antimicrobial peptide such like Enterocin 96 or Bovicin HJ50, to inhibit the survival of our target bacteria,
 
            phosphate-solubilizing bacteria. By Feedback System we created for the target bacteria, we can gradually adjust the quantity of phosphate-solubilizing bacteria to
 
            standard. Finally, we can make our soil fertile again!<br>
 
  
        </p>
+
<head>
    </body>
+
  <meta charset="UTF-8">
 +
  <title>Home</title>
 +
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
 +
  <script src="jQueryAssets/jquery-1.11.1.min.js"></script>
 +
  <script src="jQueryAssets/jquery.ui-1.10.4.dialog.min.js"></script>
 +
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0" />
  
 +
  <style>
 +
    /* ---- reset ---- */
 +
    canvas{ display: block; vertical-align: bottom; } /* ---- particles.js container ---- */
 +
    #particles-js{
 +
      position:relative;
 +
      display: inline-block;
 +
      top: 2vw;
 +
      margin-left: 0%;
 +
      width: 30vw;
 +
      height: 30vw;
 +
      background-color: rgba(6, 13, 68,0);
 +
      background-image: url("https://static.igem.org/mediawiki/2018/6/6e/T--NCTU_Formosa--world2.png");
 +
      background-repeat: no-repeat;
 +
      background-size: cover;
 +
      background-position: 25% 25%; } /* ---- stats.js ---- */
 +
    #stats, .count-particles{ -webkit-user-select: none; margin-top: 5px; margin-left: 5px; }
 +
    #stats{ border-radius: 3px 3px 0 0; overflow: hidden; }
 +
  </style>
  
 +
  <style>
  
 +
@-webkit-keyframes rotation {
 +
  0% {transform: rotate(0deg);}
 +
  25% {transform: rotate(90deg);}
 +
  50% {transform: rotate(180deg);}
 +
  75% {transform: rotate(270deg);}
 +
  100% {transform: rotate(360deg);}
 +
}
  
<img src="http://placehold.it/1080x320/c4baba/e4dede">
+
@keyframes rotation {
+
    0% {transform: rotate(0deg);}
 +
    25% {transform: rotate(90deg);}
 +
    50% {transform: rotate(180deg);}
 +
    75% {transform: rotate(270deg);}
 +
100% {transform: rotate(360deg);}
 +
}
  
 +
@keyframes subtitle {
 +
    0% {opacity: 0; top: 2vw;}
 +
    30% {opacity: 0; top: 2vw;}
 +
    50% {opacity: 0.4; top: 1vw;}
 +
    75% {opacity: 0.7; top: 0.4vw;}
 +
    100% {opacity: 1; top: 0;}
 +
}
  
<div class="column full_size" >
+
@keyframes subtitle1 {
 +
    0% {opacity: 0; top: 1vw;}
 +
    30% {opacity: 0; top: 1vw;}
 +
    50% {opacity: 0.4; top: 0.4vw;}
 +
    75% {opacity: 0.7; top: 0vw;}
 +
    100% {opacity: 1; top: 0.5;}
 +
}
  
<h3>Before you start</h3>
+
@keyframes cloud {
<p> Please read the following pages:</p>
+
    0% {opacity: 0; top: -14vw;}
<ul>
+
    15% {opacity: 0; top: -10.5vw;}
<li>  <a href="https://2018.igem.org/Competition">Competition Hub</a> </li>
+
    25% {opacity: 0.7; top: -7vw;}
<li> <a href="https://2018.igem.org/Competition/Deliverables/Wiki">Wiki Requirements page</a></li>
+
    35% {opacity: 1; top: -3.5vw;}
<li> <a href="https://2018.igem.org/Resources/Template_Documentation">Template documentation</a></li>
+
    44% {opacity: 1; top: 0;}
</ul>
+
    48% {opacity: 1; top: -1vw;}
</div>
+
    52% {opacity: 1; top: 0;}
 +
    60% {opacity: 1; top: -1.5vw;}
 +
    67.5% {opacity: 1; top: -3.5vw;}
 +
    75% {opacity: 0.7; top: -7vw;}
 +
    85% {opacity: 0; top: -10.5vw;}
 +
    100% {opacity: 0; top: -14vw;}
 +
}
  
 +
    #globalWrapper{
 +
      padding-bottom: 0 !important;
 +
    }
  
<div class="clear extra_space"></div>
+
    body{
<div class="line_divider"></div>
+
      font-size: 0;
<div class="clear extra_space"></div>
+
      margin: 0;
 +
      padding: 0 !important;
 +
      width: 100%;
  
 +
    }
  
 +
    .wrapper{
 +
      width: 100%;
 +
      background-image: url(https://static.igem.org/mediawiki/2018/b/b0/T--NCTU_Formosa--background2.png);
 +
      background-size: cover;
 +
      position: relative;
 +
    }
  
<div class="column full_size" >
+
    .cover{
<h3> Styling your wiki </h3>
+
      width: 100%;
<p>You may style this page as you like or you can simply leave the style as it is. You can easily keep the styling and edit the content of these default wiki pages with your project information and completely fulfill the requirement to document your project.</p>
+
    }
<p>While you may not win Best Wiki with this styling, your team is still eligible for all other awards. This default wiki meets the requirements, it improves navigability and ease of use for visitors, and you should not feel it is necessary to style beyond what has been provided.</p>
+
  
</div>
 
  
 +
    .title{
 +
      font-size: 7vmin;
 +
      margin: 50px;
 +
      margin-top: 0px;
 +
      text-align: center;
 +
    }
  
 +
    .title_1{
 +
      font-size: 6vmin;
 +
      width: 75%;
 +
      margin: 50px;
 +
      margin-top: 100px;
 +
      margin-left: 12.5%;
 +
    }
  
 +
    .title_2{
 +
      font-size: 5vmin;
 +
      width: 70%;
 +
      margin: 50px;
 +
      margin-left: 15%;
 +
    }
  
<div class="clear extra_space"></div>
+
    .title_3{
 +
      font-size: 3.5vmin;
 +
      width: 70%;
 +
      margin: 50px;
 +
      margin-left: 15%;
 +
    }
  
 +
    .text{
 +
      font-size: 3vmin;
 +
      width: 75%;
 +
      position: relative;
 +
      margin-left: 12.5%;
 +
      margin-right: 12.5%;
 +
      margin-top: 40px;
 +
      margin-bottom: 40px;
 +
      text-align: justify;
 +
    }
  
 +
    .explanation{
 +
      font-size: 2.5vmin;
 +
      font-weight: bold;
 +
      color: #575656;
 +
      text-align: center;
 +
    }
  
<div class="column third_size" >
+
    .text2{
 +
      font-size: 2.5vw;
 +
      font-family: Agency FB;
 +
      color: white;
 +
      text-align: left;
 +
      transform: scaleX(1.3);
 +
      width: 55%;
 +
      padding-left: 20%;
 +
    }
  
<h3> Uploading pictures and files </h3>
+
    .block{
<p> You must upload any pictures and files to the iGEM 2018 server. Remember to keep all your pictures and files within your team's namespace or at least include your team's name in the file name. </p>
+
      display: inline-block;
 +
      width: 55%;
 +
      margin-left: 3%;
 +
      vertical-align: top;
 +
      position: relative;
 +
      top: 6vw;
 +
    }
  
 +
    #drylab{
 +
      top: 10vw;
 +
    }
  
<p>When you upload, set the "Destination Filename" to <b> T--YourOfficialTeamName--NameOfFile.jpg</b>. (If you don't do this, someone else might upload a different file with the same "Destination Filename", and your file would be erased!)</p>
+
    #wetlab{
 +
      top: 10vw;
 +
    }
  
<div class="button_link">
+
    #iot{
<a href="https://2018.igem.org/Special:Upload">
+
      top: 13vw;
UPLOAD FILES
+
    }
</a>
+
</div>
+
  
</div>
+
    #entre{
 +
      top: 10vw;
 +
    }
  
<div class="column third_size" >
 
<h3> Wiki template information </h3>
 
<p>We have created these wiki template pages to help you get started and to help you think about how your team will be evaluated. You can find a list of all the pages tied to awards here at the <a href="https://2018.igem.org/Judging/Pages_for_Awards">Pages for awards</a> link. You must edit these pages to be evaluated for medals and awards, but ultimately the design, layout, style and all other elements of your team wiki is up to you!</p>
 
  
</div>
 
  
 +
    .button_1{
 +
      width: auto;
 +
      color: #064055;
 +
      background-color: #72C6C6;
 +
      border-radius: 8px;
 +
      font-size: 4vw;
 +
      font-family: solaris;
 +
      padding-left: 1.5vw;
 +
      padding-right: 1.5vw;
 +
      margin-top: 3vw;
 +
      margin-left: 30%;
 +
      transition-duration: 0.3s;
 +
      position: relative;
 +
      top: 5vw;
 +
    }
  
 +
    .button_1:hover{
 +
      color: white;
 +
    }
  
<div class="column third_size" >
+
    #description{
<div class="highlight decoration_B_full">
+
      position: relative;
<h3> Editing your wiki </h3>
+
      opacity: 0;
<p>On this page you can document your project, introduce your team members, document your progress and share your iGEM experience with the rest of the world! </p>
+
      margin-left: 3%;
<p>Use WikiTools - Edit in the black menu bar to edit this page</p>
+
      margin-top: 5vw;
 +
      display: inline-block;
 +
      bottom: 0px;
 +
      animation-fill-mode: forwards!important;
 +
    }
  
<div class="button_link">
+
    a{
<a href="https://2018.igem.org/wiki/index.php?title=Team:NCTU_Formosa&action=edit">
+
      text-decoration: none!important;
EDIT PAGE
+
    }
</a>
+
</div>
+
  
 +
    p{
 +
      margin: 0;
 +
    }
  
</div>
+
    table{
</div>
+
      width: 55%;
 +
      border: solid 2px #e7eceb;
 +
      text-align: left;
 +
      margin: 40px;
 +
      margin-left: auto;
 +
      margin-right: auto;
 +
      padding: 10px;
 +
      border-collapse: collapse;
 +
      background: #fefefe;
 +
    }
  
 +
    tr{
 +
      border: solid 1px #e7eceb;
 +
      margin: 15px;
 +
      padding: 10px;
 +
    }
  
 +
    td,th{
 +
      padding: 10px;
 +
    }
  
 +
    caption{
 +
      font-size: 3vmin;
 +
      font-weight: bold;
 +
      margin-bottom: 10px;
 +
      color: #575656;
 +
      box-sizing: border-box;
 +
    }
  
 +
    thead{
 +
      background: #1182be;
 +
      color: #fefefe;
 +
      font-size: 3.5vmin;
 +
    }
  
<div class="clear extra_space"></div>
+
    tbody{
<div class="line_divider"></div>
+
      font-size: 3vmin;
<div class="clear extra_space"></div>
+
    }
  
 +
    .equation{
 +
      font-size: 3vmin;
 +
      margin: 40px;
 +
      text-align: center;
 +
      margin-left: auto;
 +
      margin-right: auto;
 +
    }
  
 +
    .icon{
 +
      width: 20px;
 +
      vertical-align: middle;
 +
    }
  
<div class="column two_thirds_size" >
+
    .pic{
<h3>Tips</h3>
+
      width: 100%;
<p>This wiki will be your team’s first interaction with the rest of the world, so here are a few tips to help you get started: </p>
+
    }
<ul>
+
<li>State your accomplishments! Tell people what you have achieved from the start. </li>
+
<li>Be clear about what you are doing and how you plan to do this.</li>
+
<li>You have a global audience! Consider the different backgrounds that your users come from.</li>
+
<li>Make sure information is easy to find; nothing should be more than 3 clicks away.  </li>
+
<li>Avoid using very small fonts and low contrast colors; information should be easy to read.  </li>
+
<li>Start documenting your project as early as possible; don’t leave anything to the last minute before the Wiki Freeze. For a complete list of deadlines visit the <a href="https://2018.igem.org/Calendar">iGEM 2018 calendar</a> </li>
+
<li>Have lots of fun! </li>
+
</ul>
+
</div>
+
  
 +
    .procedure{
 +
      width: 100px;
 +
    }
  
<div class="column third_size">
+
    .curcumin{
<div class="highlight decoration_A_full">
+
      width: 30%;
<h3>Inspiration</h3>
+
      margin-left: 5%;
<p> You can also view other team wikis for inspiration! Here are some examples:</p>
+
      display: inline-block;
<ul>
+
    }
<li> <a href="https://2014.igem.org/Team:SDU-Denmark/"> 2014 SDU Denmark </a> </li>
+
<li> <a href="https://2014.igem.org/Team:Aalto-Helsinki">2014 Aalto-Helsinki</a> </li>
+
<li> <a href="https://2014.igem.org/Team:LMU-Munich">2014 LMU-Munich</a> </li>
+
<li> <a href="https://2014.igem.org/Team:Michigan"> 2014 Michigan</a></li>
+
<li> <a href="https://2014.igem.org/Team:ITESM-Guadalajara">2014 ITESM-Guadalajara </a></li>
+
<li> <a href="https://2014.igem.org/Team:SCU-China"> 2014 SCU-China </a></li>
+
</ul>
+
</div>
+
</div>
+
  
<div class="clear extra_space"></div>
+
    .wetlab{
<div class="line_divider"></div>
+
      width: 100%;
<div class="clear extra_space"></div>
+
    }
  
<footer>
+
    .iot{
    NCTU_Formosa_2018<br>
+
      width: 30%;
    Contact Us: nctuformosa2018@gmail.com<br>
+
      margin-left: 2%;
    FB: NCTU_Formosa IGEM team<br>
+
      display: inline-block;
    Copyright 2018 © NCTU_Formosa
+
      margin-top: 6vw;
</footer>
+
    }
 +
    .cloud{
 +
      position: relative;
 +
      width: 100%;
 +
      z-index: 100!important;
 +
    }
 +
    .lines{
 +
      position: relative;
 +
      width:90%;
 +
      margin-left: 4.5%;
 +
      margin-top: -0.5vw;
 +
      z-index: 1;
 +
      -webkit-animation: cloud 6s infinite linear;
 +
      animation: cloud 6s infinite linear;
 +
      transition-duration: 0.4s;
 +
    }
 +
 
 +
    .entre{
 +
      width: 35%;
 +
      margin-left: 5%;
 +
      display: inline-block;
 +
      margin-top: 6vw;
 +
    }
 +
 
 +
    .circle{
 +
      width: 30%;
 +
      position: relative;
 +
      bottom: 10vw;
 +
      left: 37%;
 +
      margin-bottom: -9vw;
 +
      z-index: 2;
 +
      transition-duration: 0.4;
 +
      cursor: pointer;
 +
    }
 +
 
 +
    .circle:hover{
 +
      -webkit-animation: rotation 6s infinite linear;
 +
      animation: rotation 6s infinite linear;
 +
    }
 +
 
 +
    .hand{
 +
      width: 15%;
 +
      position: relative;
 +
      bottom: 0px;
 +
      margin-top: 10vw;
 +
      margin-left: 13%;
 +
      z-index: 1;
 +
      display: inline-block;
 +
    }
 +
 
 +
    #text2{
 +
      position: relative;
 +
      opacity: 0;
 +
      animation-fill-mode: forwards!important;
 +
    }
 +
 
 +
    .planb{
 +
      width: 70%;
 +
      margin-left: 15%;
 +
      margin-bottom: 10vw;
 +
      margin-top: 5vw;
 +
    }
 +
 
 +
    .bov{
 +
      position: absolute;
 +
      width: 70%;
 +
      top: 1.5vw;
 +
      left: 6vw;
 +
    }
 +
 
 +
    .bacteriocin{
 +
      position: relative;
 +
      width: 37%;
 +
      margin-left: 5%;
 +
      display: inline-block;
 +
      margin-top: 6vw;
 +
    }
 +
 
 +
    .earth{
 +
      position:relative;
 +
      display: inline-block;
 +
      top: 2vw;
 +
      margin-left: 0%;
 +
      width: 30vw;
 +
      height: 30vw;
 +
    }
 +
 
 +
    video{
 +
      width: 100%;
 +
    }
 +
 
 +
  </style>
 +
 
 +
  <!----------------------------------------------------------------------------->
 +
 
 +
  <script>
 +
  </script>
 +
 
 +
  <!----------------------------------------------------------------------------->
 +
 
 +
  <!-- Latex resourse code-->
 +
  <script src="http://cdn.mathjax.org/mathjax/latest/MathJax.js" type="text/javascript">
 +
      MathJax.Hub.Config({
 +
          extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
 +
          jax: ["input/TeX", "output/HTML-CSS"],
 +
          tex2jax: {
 +
              inlineMath: [
 +
                  ['$', '$'],
 +
                  ["\\(", "\\)"]
 +
              ],
 +
              displayMath: [
 +
                  ['$$', '$$'],
 +
                  ["\\[", "\\]"]
 +
              ],
 +
          },
 +
          "HTML-CSS": {
 +
              availableFonts: ["TeX"]
 +
          }
 +
      });
 +
  </script>
 +
 
 +
  <!----------------------------------------------------------------------------->
 +
</head>
 +
 
 +
<body>
 +
  <div class="wrapper">
 +
    <div class="sec1">
 +
      <video src="https://static.igem.org/mediawiki/2018/a/a1/T--NCTU_Formosa--Home2.mp4"  loop="loop" autoplay="autoplay"></video>
 +
      <img src="https://static.igem.org/mediawiki/2018/1/14/T--NCTU_Formosa--Mr.curcumin.png" class="curcumin">
 +
      <div class="block">
 +
        <div class="text2">
 +
          <p>
 +
            As the first team to introduce machine learning below the ground, we can do some pretty incredible things...
 +
          </p>
 +
        </div>
 +
        <a href="https://2018.igem.org/Team:NCTU_Formosa/Applied_Design"><span class="button_1">DEsiGn</span></a>
 +
      </div>
 +
 
 +
      <div class="block" id="drylab">
 +
        <div class="text2">
 +
          <p>
 +
            Regulating soil microbiota, who directly shapes the environment...
 +
          </p>
 +
        </div>
 +
        <a href="https://2018.igem.org/Team:NCTU_Formosa/Model"><span class="button_1">Dry lAb</span></a>
 +
      </div>
 +
      <img src="https://static.igem.org/mediawiki/2018/a/a7/T--NCTU_Formosa--earth2.png" alt="" class="earth">
 +
 
 +
      <div class="bacteriocin">
 +
        <img src="https://static.igem.org/mediawiki/2018/3/3d/T--NCTU_Formosa--bacterioriocin.png" class="wetlab">
 +
      </div>
 +
      <div class="block" id="wetlab">
 +
        <div class="text2">
 +
          <p>
 +
            Using bio-stimulators, including our specially selected bacteriocins to manipulate bacterial ratios...
 +
          </p>
 +
        </div>
 +
        <a href="https://2018.igem.org/Team:NCTU_Formosa/Wet_Lab"><span class="button_1" >WEt lAb</span></a>
 +
      </div>
 +
 
 +
      <div class="block" id="iot">
 +
        <div class="text2">
 +
          <p>
 +
            Collecting data through IoT system to strengthen prediction accuracy with feedback...
 +
          </p>
 +
        </div>
 +
        <a href="https://2018.igem.org/Team:NCTU_Formosa/Hardware"><span class="button_1" >IOt systEm</span></a>
 +
      </div>
 +
      <div class="iot">
 +
        <img src="https://static.igem.org/mediawiki/2018/3/32/T--NCTU_Formosa--cloud.png" class="cloud">
 +
        <img src="https://static.igem.org/mediawiki/2018/c/c8/T--NCTU_Formosa--lines2.png" class="lines">
 +
      </div>
 +
 
 +
      <img src="https://static.igem.org/mediawiki/2018/6/6b/T--NCTU_Formosa--Home_Entrepreneurship.png" class="entre">
 +
      <div class="block" id="entre">
 +
        <div class="text2">
 +
          <p>
 +
            Integrating our concept with previous designs to benefit the industry and the environment...
 +
          </p>
 +
        </div>
 +
        <a href="https://2018.igem.org/Team:NCTU_Formosa/Entrepreneurship"><span class="button_1" style="margin-left: 14%;">EntrEprEnEurship</span></a>
 +
      </div>
 +
 
 +
      <div class="text2" id="text2" style="text-align: center; font-size: 4vw; margin-top: 6vw; margin-bottom: 7vw;"><p>The journey begins here...</p></div>
 +
      <img src="https://static.igem.org/mediawiki/2018/5/5a/T--NCTU_Formosa--Home_Circle2.png" class="circle">
 +
      <img src="https://static.igem.org/mediawiki/2018/6/67/T--NCTU_Formosa--Hand.png" class="hand">
 +
      <a href="https://2018.igem.org/Team:NCTU_Formosa/Project/Description" id="description"><span class="button_1">DEscriptiOn</span></a>
 +
    </div>
 +
 
 +
<!----------------------------------------------------------------------------->
 +
 
 +
 
 +
  </div>
 +
</body>
 +
 
 +
<script>
 +
var Stats = function() {
 +
    function h(a) {
 +
        c.appendChild(a.dom);
 +
        return a
 +
    }
 +
 
 +
    function k(a) {
 +
        for (var d = 0; d < c.children.length; d++) c.children[d].style.display = d === a ? "block" : "none";
 +
        l = a
 +
    }
 +
    var l = 0,
 +
        c = document.createElement("div");
 +
    c.style.cssText = "position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000";
 +
    c.addEventListener("click", function(a) {
 +
        a.preventDefault();
 +
        k(++l % c.children.length)
 +
    }, !1);
 +
    var g = (performance || Date).now(),
 +
        e = g,
 +
        a = 0,
 +
        r = h(new Stats.Panel("FPS", "#0ff", "#002")),
 +
        f = h(new Stats.Panel("MS", "#0f0", "#020"));
 +
    if (self.performance && self.performance.memory) var t = h(new Stats.Panel("MB", "#f08", "#201"));
 +
    k(0);
 +
    return {
 +
        REVISION: 16,
 +
        dom: c,
 +
        addPanel: h,
 +
        showPanel: k,
 +
        begin: function() {
 +
            g = (performance || Date).now()
 +
        },
 +
        end: function() {
 +
            a++;
 +
            var c = (performance || Date).now();
 +
            f.update(c - g, 200);
 +
            if (c > e + 1E3 && (r.update(1E3 * a / (c - e), 100), e = c, a = 0, t)) {
 +
                var d = performance.memory;
 +
                t.update(d.usedJSHeapSize / 1048576, d.jsHeapSizeLimit / 1048576)
 +
            }
 +
            return c
 +
        },
 +
        update: function() {
 +
            g = this.end()
 +
        },
 +
        domElement: c,
 +
        setMode: k
 +
    }
 +
};
 +
Stats.Panel = function(h, k, l) {
 +
    var c = Infinity,
 +
        g = 0,
 +
        e = Math.round,
 +
        a = e(window.devicePixelRatio || 1),
 +
        r = 80 * a,
 +
        f = 48 * a,
 +
        t = 3 * a,
 +
        u = 2 * a,
 +
        d = 3 * a,
 +
        m = 15 * a,
 +
        n = 74 * a,
 +
        p = 30 * a,
 +
        q = document.createElement("");
 +
    q.width = r;
 +
    q.height = f;
 +
    q.style.cssText = "width:80px;height:48px";
 +
    var b = q.getContext("2d");
 +
    b.font = "bold " + 9 * a + "px Helvetica,Arial,sans-serif";
 +
    b.textBaseline = "top";
 +
    b.fillStyle = l;
 +
    b.fillRect(0, 0, r, f);
 +
    b.fillStyle = k;
 +
    b.fillText(h, t, u);
 +
    b.fillRect(d, m, n, p);
 +
    b.fillStyle = l;
 +
    b.globalAlpha = .9;
 +
    b.fillRect(d, m, n, p);
 +
    return {
 +
        dom: q,
 +
        update: function(f,
 +
            v) {
 +
            c = Math.min(c, f);
 +
            g = Math.max(g, f);
 +
            b.fillStyle = l;
 +
            b.globalAlpha = 1;
 +
            b.fillRect(0, 0, r, m);
 +
            b.fillStyle = k;
 +
            b.fillText(e(f) + " " + h + " (" + e(c) + "-" + e(g) + ")", t, u);
 +
            b.drawImage(q, d + a, m, n - a, p, d, m, n - a, p);
 +
            b.fillRect(d + n - a, m, a, p);
 +
            b.fillStyle = l;
 +
            b.globalAlpha = .9;
 +
            b.fillRect(d + n - a, m, a, e((1 - f / v) * p))
 +
        }
 +
    }
 +
};
 +
"object" === typeof module && (module.exports = Stats);
 +
</script> <!-- stats.js lib -->
 +
 
 +
<script>
 +
function hexToRgb(e) {
 +
  var a = /^#?([a-f\d])([a-f\d])([a-f\d])$/i;
 +
  e = e.replace(a, function(e, a, t, i) {
 +
      return a + a + t + t + i + i
 +
  });
 +
  var t = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);
 +
  return t ? {
 +
      r: parseInt(t[1], 16),
 +
      g: parseInt(t[2], 16),
 +
      b: parseInt(t[3], 16)
 +
  } : null
 +
}
 +
 
 +
function clamp(e, a, t) {
 +
  return Math.min(Math.max(e, a), t)
 +
}
 +
 
 +
function isInArray(e, a) {
 +
  return a.indexOf(e) > -1
 +
}
 +
var pJS = function(e, a) {
 +
  var t = document.querySelector("#" + e + " > .particles-js-canvas-el");
 +
  this.pJS = {
 +
      canvas: {
 +
          el: t,
 +
          w: t.offsetWidth,
 +
          h: t.offsetHeight
 +
      },
 +
      particles: {
 +
          number: {
 +
              value: 400,
 +
              density: {
 +
                  enable: !0,
 +
                  value_area: 800
 +
              }
 +
          },
 +
          color: {
 +
              value: "#fff"
 +
          },
 +
          shape: {
 +
              type: "circle",
 +
              stroke: {
 +
                  width: 0,
 +
                  color: "#ff0000"
 +
              },
 +
              polygon: {
 +
                  nb_sides: 5
 +
              },
 +
              image: {
 +
                  src: "",
 +
                  width: 100,
 +
                  height: 100
 +
              }
 +
          },
 +
          opacity: {
 +
              value: 1,
 +
              random: !1,
 +
              anim: {
 +
                  enable: !1,
 +
                  speed: 2,
 +
                  opacity_min: 0,
 +
                  sync: !1
 +
              }
 +
          },
 +
          size: {
 +
              value: 20,
 +
              random: !1,
 +
              anim: {
 +
                  enable: !1,
 +
                  speed: 20,
 +
                  size_min: 0,
 +
                  sync: !1
 +
              }
 +
          },
 +
          line_linked: {
 +
              enable: !0,
 +
              distance: 100,
 +
              color: "#fff",
 +
              opacity: 1,
 +
              width: 1
 +
          },
 +
          move: {
 +
              enable: !0,
 +
              speed: 2,
 +
              direction: "none",
 +
              random: !1,
 +
              straight: !1,
 +
              out_mode: "out",
 +
              bounce: !1,
 +
              attract: {
 +
                  enable: !1,
 +
                  rotateX: 3e3,
 +
                  rotateY: 3e3
 +
              }
 +
          },
 +
          array: []
 +
      },
 +
      interactivity: {
 +
          detect_on: "canvas",
 +
          events: {
 +
              onhover: {
 +
                  enable: !0,
 +
                  mode: "grab"
 +
              },
 +
              onclick: {
 +
                  enable: !0,
 +
                  mode: "push"
 +
              },
 +
              resize: !0
 +
          },
 +
          modes: {
 +
              grab: {
 +
                  distance: 100,
 +
                  line_linked: {
 +
                      opacity: 1
 +
                  }
 +
              },
 +
              bubble: {
 +
                  distance: 200,
 +
                  size: 80,
 +
                  duration: .4
 +
              },
 +
              repulse: {
 +
                  distance: 200,
 +
                  duration: .4
 +
              },
 +
              push: {
 +
                  particles_nb: 4
 +
              },
 +
              remove: {
 +
                  particles_nb: 2
 +
              }
 +
          },
 +
          mouse: {}
 +
      },
 +
      retina_detect: !1,
 +
      fn: {
 +
          interact: {},
 +
          modes: {},
 +
          vendors: {}
 +
      },
 +
      tmp: {}
 +
  };
 +
  var i = this.pJS;
 +
  a && Object.deepExtend(i, a), i.tmp.obj = {
 +
      size_value: i.particles.size.value,
 +
      size_anim_speed: i.particles.size.anim.speed,
 +
      move_speed: i.particles.move.speed,
 +
      line_linked_distance: i.particles.line_linked.distance,
 +
      line_linked_width: i.particles.line_linked.width,
 +
      mode_grab_distance: i.interactivity.modes.grab.distance,
 +
      mode_bubble_distance: i.interactivity.modes.bubble.distance,
 +
      mode_bubble_size: i.interactivity.modes.bubble.size,
 +
      mode_repulse_distance: i.interactivity.modes.repulse.distance
 +
  }, i.fn.retinaInit = function() {
 +
      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
 +
  }, i.fn.canvasInit = function() {
 +
      i.canvas.ctx = i.canvas.el.getContext("2d")
 +
  }, i.fn.canvasSize = function() {
 +
      i.canvas.el.width = i.canvas.w, i.canvas.el.height = i.canvas.h, i && i.interactivity.events.resize && window.addEventListener("resize", function() {
 +
          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()
 +
      })
 +
  }, i.fn.canvasPaint = function() {
 +
      i.canvas.ctx.fillRect(0, 0, i.canvas.w, i.canvas.h)
 +
  }, i.fn.canvasClear = function() {
 +
      i.canvas.ctx.clearRect(0, 0, i.canvas.w, i.canvas.h)
 +
  }, i.fn.particle = function(e, a, t) {
 +
      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)
 +
          if (e.value instanceof Array) {
 +
              var s = e.value[Math.floor(Math.random() * i.particles.color.value.length)];
 +
              this.color.rgb = hexToRgb(s)
 +
          } else void 0 != e.value.r && void 0 != e.value.g && void 0 != e.value.b && (this.color.rgb = {
 +
              r: e.value.r,
 +
              g: e.value.g,
 +
              b: e.value.b
 +
          }), void 0 != e.value.h && void 0 != e.value.s && void 0 != e.value.l && (this.color.hsl = {
 +
              h: e.value.h,
 +
              s: e.value.s,
 +
              l: e.value.l
 +
          });
 +
      else "random" == e.value ? this.color.rgb = {
 +
          r: Math.floor(256 * Math.random()) + 0,
 +
          g: Math.floor(256 * Math.random()) + 0,
 +
          b: Math.floor(256 * Math.random()) + 0
 +
      } : "string" == typeof e.value && (this.color = e, this.color.rgb = hexToRgb(this.color.value));
 +
      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()));
 +
      var n = {};
 +
      switch (i.particles.move.direction) {
 +
          case "top":
 +
              n = {
 +
                  x: 0,
 +
                  y: -1
 +
              };
 +
              break;
 +
          case "top-right":
 +
              n = {
 +
                  x: .5,
 +
                  y: -.5
 +
              };
 +
              break;
 +
          case "right":
 +
              n = {
 +
                  x: 1,
 +
                  y: -0
 +
              };
 +
              break;
 +
          case "bottom-right":
 +
              n = {
 +
                  x: .5,
 +
                  y: .5
 +
              };
 +
              break;
 +
          case "bottom":
 +
              n = {
 +
                  x: 0,
 +
                  y: 1
 +
              };
 +
              break;
 +
          case "bottom-left":
 +
              n = {
 +
                  x: -.5,
 +
                  y: 1
 +
              };
 +
              break;
 +
          case "left":
 +
              n = {
 +
                  x: -1,
 +
                  y: 0
 +
              };
 +
              break;
 +
          case "top-left":
 +
              n = {
 +
                  x: -.5,
 +
                  y: -.5
 +
              };
 +
              break;
 +
          default:
 +
              n = {
 +
                  x: 0,
 +
                  y: 0
 +
              }
 +
      }
 +
      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;
 +
      var r = i.particles.shape.type;
 +
      if ("object" == typeof r) {
 +
          if (r instanceof Array) {
 +
              var c = r[Math.floor(Math.random() * r.length)];
 +
              this.shape = c
 +
          }
 +
      } else this.shape = r;
 +
      if ("image" == this.shape) {
 +
          var o = i.particles.shape;
 +
          this.img = {
 +
              src: o.image.src,
 +
              ratio: o.image.width / o.image.height
 +
          }, 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))
 +
      }
 +
  }, i.fn.particle.prototype.draw = function() {
 +
      function e() {
 +
          i.canvas.ctx.drawImage(r, a.x - t, a.y - t, 2 * t, 2 * t / a.img.ratio)
 +
      }
 +
      var a = this;
 +
      if (void 0 != a.radius_bubble) var t = a.radius_bubble;
 +
      else var t = a.radius;
 +
      if (void 0 != a.opacity_bubble) var s = a.opacity_bubble;
 +
      else var s = a.opacity;
 +
      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 + ")";
 +
      switch (i.canvas.ctx.fillStyle = n, i.canvas.ctx.beginPath(), a.shape) {
 +
          case "circle":
 +
              i.canvas.ctx.arc(a.x, a.y, t, 0, 2 * Math.PI, !1);
 +
              break;
 +
          case "edge":
 +
              i.canvas.ctx.rect(a.x - t, a.y - t, 2 * t, 2 * t);
 +
              break;
 +
          case "triangle":
 +
              i.fn.vendors.drawShape(i.canvas.ctx, a.x - t, a.y + t / 1.66, 2 * t, 3, 2);
 +
              break;
 +
          case "polygon":
 +
              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);
 +
              break;
 +
          case "star":
 +
              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);
 +
              break;
 +
          case "image":
 +
              if ("svg" == i.tmp.img_type) var r = a.img.obj;
 +
              else var r = i.tmp.img_obj;
 +
              r && e()
 +
      }
 +
      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()
 +
  }, i.fn.particlesCreate = function() {
 +
      for (var e = 0; e < i.particles.number.value; e++) i.particles.array.push(new i.fn.particle(i.particles.color, i.particles.opacity.value))
 +
  }, i.fn.particlesUpdate = function() {
 +
      for (var e = 0; e < i.particles.array.length; e++) {
 +
          var a = i.particles.array[e];
 +
          if (i.particles.move.enable) {
 +
              var t = i.particles.move.speed / 2;
 +
              a.x += a.vx * t, a.y += a.vy * t
 +
          }
 +
          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 = {
 +
              x_left: a.radius,
 +
              x_right: i.canvas.w,
 +
              y_top: a.radius,
 +
              y_bottom: i.canvas.h
 +
          };
 +
          else var s = {
 +
              x_left: -a.radius,
 +
              x_right: i.canvas.w + a.radius,
 +
              y_top: -a.radius,
 +
              y_bottom: i.canvas.h + a.radius
 +
          };
 +
          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) {
 +
              case "bounce":
 +
                  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)
 +
          }
 +
          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++) {
 +
                  var r = i.particles.array[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)
 +
              }
 +
      }
 +
  }, i.fn.particlesDraw = function() {
 +
      i.canvas.ctx.clearRect(0, 0, i.canvas.w, i.canvas.h), i.fn.particlesUpdate();
 +
      for (var e = 0; e < i.particles.array.length; e++) {
 +
          var a = i.particles.array[e];
 +
          a.draw()
 +
      }
 +
  }, i.fn.particlesEmpty = function() {
 +
      i.particles.array = []
 +
  }, i.fn.particlesRefresh = function() {
 +
      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()
 +
  }, i.fn.interact.linkParticles = function(e, a) {
 +
      var t = e.x - a.x,
 +
          s = e.y - a.y,
 +
          n = Math.sqrt(t * t + s * s);
 +
      if (n <= i.particles.line_linked.distance) {
 +
          var r = i.particles.line_linked.opacity - n / (1 / i.particles.line_linked.opacity) / i.particles.line_linked.distance;
 +
          if (r > 0) {
 +
              var c = i.particles.line_linked.color_rgb_line;
 +
              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()
 +
          }
 +
      }
 +
  }, i.fn.interact.attractParticles = function(e, a) {
 +
      var t = e.x - a.x,
 +
          s = e.y - a.y,
 +
          n = Math.sqrt(t * t + s * s);
 +
      if (n <= i.particles.line_linked.distance) {
 +
          var r = t / (1e3 * i.particles.move.attract.rotateX),
 +
              c = s / (1e3 * i.particles.move.attract.rotateY);
 +
          e.vx -= r, e.vy -= c, a.vx += r, a.vy += c
 +
      }
 +
  }, i.fn.interact.bounceParticles = function(e, a) {
 +
      var t = e.x - a.x,
 +
          i = e.y - a.y,
 +
          s = Math.sqrt(t * t + i * i),
 +
          n = e.radius + a.radius;
 +
      n >= s && (e.vx = -e.vx, e.vy = -e.vy, a.vx = -a.vx, a.vy = -a.vy)
 +
  }, i.fn.modes.pushParticles = function(e, a) {
 +
      i.tmp.pushing = !0;
 +
      for (var t = 0; e > t; t++) i.particles.array.push(new i.fn.particle(i.particles.color, i.particles.opacity.value, {
 +
          x: a ? a.pos_x : Math.random() * i.canvas.w,
 +
          y: a ? a.pos_y : Math.random() * i.canvas.h
 +
      })), t == e - 1 && (i.particles.move.enable || i.fn.particlesDraw(), i.tmp.pushing = !1)
 +
  }, i.fn.modes.removeParticles = function(e) {
 +
      i.particles.array.splice(0, e), i.particles.move.enable || i.fn.particlesDraw()
 +
  }, i.fn.modes.bubbleParticle = function(e) {
 +
      function a() {
 +
          e.opacity_bubble = e.opacity, e.radius_bubble = e.radius
 +
      }
 +
 
 +
      function t(a, t, s, n, c) {
 +
          if (a != t)
 +
              if (i.tmp.bubble_duration_end) {
 +
                  if (void 0 != s) {
 +
                      var o = n - p * (n - a) / i.interactivity.modes.bubble.duration,
 +
                          l = a - o;
 +
                      d = a + l, "size" == c && (e.radius_bubble = d), "opacity" == c && (e.opacity_bubble = d)
 +
                  }
 +
              } else if (r <= i.interactivity.modes.bubble.distance) {
 +
              if (void 0 != s) var v = s;
 +
              else var v = n;
 +
              if (v != a) {
 +
                  var d = n - p * (n - a) / i.interactivity.modes.bubble.duration;
 +
                  "size" == c && (e.radius_bubble = d), "opacity" == c && (e.opacity_bubble = d)
 +
              }
 +
          } else "size" == c && (e.radius_bubble = void 0), "opacity" == c && (e.opacity_bubble = void 0)
 +
      }
 +
      if (i.interactivity.events.onhover.enable && isInArray("bubble", i.interactivity.events.onhover.mode)) {
 +
          var s = e.x - i.interactivity.mouse.pos_x,
 +
              n = e.y - i.interactivity.mouse.pos_y,
 +
              r = Math.sqrt(s * s + n * n),
 +
              c = 1 - r / i.interactivity.modes.bubble.distance;
 +
          if (r <= i.interactivity.modes.bubble.distance) {
 +
              if (c >= 0 && "mousemove" == i.interactivity.status) {
 +
                  if (i.interactivity.modes.bubble.size != i.particles.size.value)
 +
                      if (i.interactivity.modes.bubble.size > i.particles.size.value) {
 +
                          var o = e.radius + i.interactivity.modes.bubble.size * c;
 +
                          o >= 0 && (e.radius_bubble = o)
 +
                      } else {
 +
                          var l = e.radius - i.interactivity.modes.bubble.size,
 +
                              o = e.radius - l * c;
 +
                          o > 0 ? e.radius_bubble = o : e.radius_bubble = 0
 +
                      } if (i.interactivity.modes.bubble.opacity != i.particles.opacity.value)
 +
                      if (i.interactivity.modes.bubble.opacity > i.particles.opacity.value) {
 +
                          var v = i.interactivity.modes.bubble.opacity * c;
 +
                          v > e.opacity && v <= i.interactivity.modes.bubble.opacity && (e.opacity_bubble = v)
 +
                      } else {
 +
                          var v = e.opacity - (i.particles.opacity.value - i.interactivity.modes.bubble.opacity) * c;
 +
                          v < e.opacity && v >= i.interactivity.modes.bubble.opacity && (e.opacity_bubble = v)
 +
                      }
 +
              }
 +
          } else a();
 +
          "mouseleave" == i.interactivity.status && a()
 +
      } else if (i.interactivity.events.onclick.enable && isInArray("bubble", i.interactivity.events.onclick.mode)) {
 +
          if (i.tmp.bubble_clicking) {
 +
              var s = e.x - i.interactivity.mouse.click_pos_x,
 +
                  n = e.y - i.interactivity.mouse.click_pos_y,
 +
                  r = Math.sqrt(s * s + n * n),
 +
                  p = ((new Date).getTime() - i.interactivity.mouse.click_time) / 1e3;
 +
              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)
 +
          }
 +
          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"))
 +
      }
 +
  }, i.fn.modes.repulseParticle = function(e) {
 +
      function a() {
 +
          var a = Math.atan2(d, p);
 +
          if (e.vx = u * Math.cos(a), e.vy = u * Math.sin(a), "bounce" == i.particles.move.out_mode) {
 +
              var t = {
 +
                  x: e.x + e.vx,
 +
                  y: e.y + e.vy
 +
              };
 +
              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)
 +
          }
 +
      }
 +
      if (i.interactivity.events.onhover.enable && isInArray("repulse", i.interactivity.events.onhover.mode) && "mousemove" == i.interactivity.status) {
 +
          var t = e.x - i.interactivity.mouse.pos_x,
 +
              s = e.y - i.interactivity.mouse.pos_y,
 +
              n = Math.sqrt(t * t + s * s),
 +
              r = {
 +
                  x: t / n,
 +
                  y: s / n
 +
              },
 +
              c = i.interactivity.modes.repulse.distance,
 +
              o = 100,
 +
              l = clamp(1 / c * (-1 * Math.pow(n / c, 2) + 1) * c * o, 0, 50),
 +
              v = {
 +
                  x: e.x + r.x * l,
 +
                  y: e.y + r.y * l
 +
              };
 +
          "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)
 +
      } 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) {
 +
              var c = Math.pow(i.interactivity.modes.repulse.distance / 6, 3),
 +
                  p = i.interactivity.mouse.click_pos_x - e.x,
 +
                  d = i.interactivity.mouse.click_pos_y - e.y,
 +
                  m = p * p + d * d,
 +
                  u = -c / m * 1;
 +
              c >= m && a()
 +
          } else 0 == i.tmp.repulse_clicking && (e.vx = e.vx_i, e.vy = e.vy_i)
 +
  }, i.fn.modes.grabParticle = function(e) {
 +
      if (i.interactivity.events.onhover.enable && "mousemove" == i.interactivity.status) {
 +
          var a = e.x - i.interactivity.mouse.pos_x,
 +
              t = e.y - i.interactivity.mouse.pos_y,
 +
              s = Math.sqrt(a * a + t * t);
 +
          if (s <= i.interactivity.modes.grab.distance) {
 +
              var n = i.interactivity.modes.grab.line_linked.opacity - s / (1 / i.interactivity.modes.grab.line_linked.opacity) / i.interactivity.modes.grab.distance;
 +
              if (n > 0) {
 +
                  var r = i.particles.line_linked.color_rgb_line;
 +
                  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()
 +
              }
 +
          }
 +
      }
 +
  }, i.fn.vendors.eventsListeners = function() {
 +
      "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) {
 +
          if (i.interactivity.el == window) var a = e.clientX,
 +
              t = e.clientY;
 +
          else var a = e.offsetX || e.clientX,
 +
              t = e.offsetY || e.clientY;
 +
          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"
 +
      }), i.interactivity.el.addEventListener("mouseleave", function(e) {
 +
          i.interactivity.mouse.pos_x = null, i.interactivity.mouse.pos_y = null, i.interactivity.status = "mouseleave"
 +
      })), i.interactivity.events.onclick.enable && i.interactivity.el.addEventListener("click", function() {
 +
          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) {
 +
              case "push":
 +
                  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);
 +
                  break;
 +
              case "remove":
 +
                  i.fn.modes.removeParticles(i.interactivity.modes.remove.particles_nb);
 +
                  break;
 +
              case "bubble":
 +
                  i.tmp.bubble_clicking = !0;
 +
                  break;
 +
              case "repulse":
 +
                  i.tmp.repulse_clicking = !0, i.tmp.repulse_count = 0, i.tmp.repulse_finish = !1, setTimeout(function() {
 +
                      i.tmp.repulse_clicking = !1
 +
                  }, 1e3 * i.interactivity.modes.repulse.duration)
 +
          }
 +
      })
 +
  }, i.fn.vendors.densityAutoParticles = function() {
 +
      if (i.particles.number.density.enable) {
 +
          var e = i.canvas.el.width * i.canvas.el.height / 1e3;
 +
          i.tmp.retina && (e /= 2 * i.canvas.pxratio);
 +
          var a = e * i.particles.number.value / i.particles.number.density.value_area,
 +
              t = i.particles.array.length - a;
 +
          0 > t ? i.fn.modes.pushParticles(Math.abs(t)) : i.fn.modes.removeParticles(t)
 +
      }
 +
  }, i.fn.vendors.checkOverlap = function(e, a) {
 +
      for (var t = 0; t < i.particles.array.length; t++) {
 +
          var s = i.particles.array[t],
 +
              n = e.x - s.x,
 +
              r = e.y - s.y,
 +
              c = Math.sqrt(n * n + r * r);
 +
          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))
 +
      }
 +
  }, i.fn.vendors.createSvgImg = function(e) {
 +
      var a = i.tmp.source_svg,
 +
          t = /#([0-9A-F]{3,6})/gi,
 +
          s = a.replace(t, function(a, t, i, s) {
 +
              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 + ")";
 +
              return n
 +
          }),
 +
          n = new Blob([s], {
 +
              type: "image/svg+xml;charset=utf-8"
 +
          }),
 +
          r = window.URL || window.webkitURL || window,
 +
          c = r.createObjectURL(n),
 +
          o = new Image;
 +
      o.addEventListener("load", function() {
 +
          e.img.obj = o, e.img.loaded = !0, r.revokeObjectURL(c), i.tmp.count_svg++
 +
      }), o.src = c
 +
  }, i.fn.vendors.destroypJS = function() {
 +
      cancelAnimationFrame(i.fn.drawAnimFrame), t.remove(), pJSDom = null
 +
  }, i.fn.vendors.drawShape = function(e, a, t, i, s, n) {
 +
      var r = s * n,
 +
          c = s / n,
 +
          o = 180 * (c - 2) / c,
 +
          l = Math.PI - Math.PI * o / 180;
 +
      e.save(), e.beginPath(), e.translate(a, t), e.moveTo(0, 0);
 +
      for (var v = 0; r > v; v++) e.lineTo(i, 0), e.translate(i, 0), e.rotate(l);
 +
      e.fill(), e.restore()
 +
  }, i.fn.vendors.exportImg = function() {
 +
      window.open(i.canvas.el.toDataURL("image/png"), "_blank")
 +
  }, i.fn.vendors.loadImg = function(e) {
 +
      if (i.tmp.img_error = void 0, "" != i.particles.shape.image.src)
 +
          if ("svg" == e) {
 +
              var a = new XMLHttpRequest;
 +
              a.open("GET", i.particles.shape.image.src), a.onreadystatechange = function(e) {
 +
                  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))
 +
              }, a.send()
 +
          } else {
 +
              var t = new Image;
 +
              t.addEventListener("load", function() {
 +
                  i.tmp.img_obj = t, i.fn.vendors.checkBeforeDraw()
 +
              }), t.src = i.particles.shape.image.src
 +
          }
 +
      else console.log("Error pJS - No image.src"), i.tmp.img_error = !0
 +
  }, i.fn.vendors.draw = function() {
 +
      "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))
 +
  }, i.fn.vendors.checkBeforeDraw = function() {
 +
      "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())
 +
  }, i.fn.vendors.init = function() {
 +
      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)
 +
  }, i.fn.vendors.start = function() {
 +
      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()
 +
  }, i.fn.vendors.eventsListeners(), i.fn.vendors.start()
 +
};
 +
Object.deepExtend = function(e, a) {
 +
  for (var t in a) a[t] && a[t].constructor && a[t].constructor === Object ? (e[t] = e[t] || {}, arguments.callee(e[t], a[t])) : e[t] = a[t];
 +
  return e
 +
}, window.requestAnimFrame = function() {
 +
  return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function(e) {
 +
      window.setTimeout(e, 1e3 / 60)
 +
  }
 +
}(), window.cancelRequestAnimFrame = function() {
 +
  return window.cancelAnimationFrame || window.webkitCancelRequestAnimationFrame || window.mozCancelRequestAnimationFrame || window.oCancelRequestAnimationFrame || window.msCancelRequestAnimationFrame || clearTimeout
 +
}(), window.pJSDom = [], window.particlesJS = function(e, a) {
 +
  "string" != typeof e && (a = e, e = "particles-js"), e || (e = "particles-js");
 +
  var t = document.getElementById(e),
 +
      i = "particles-js-canvas-el",
 +
      s = t.getElementsByClassName(i);
 +
  if (s.length)
 +
      for (; s.length > 0;) t.removeChild(s[0]);
 +
  var n = document.createElement("canvas");
 +
  n.className = i, n.style.width = "100%", n.style.height = "100%";
 +
  var r = document.getElementById(e).appendChild(n);
 +
  null != r && pJSDom.push(new pJS(e, a))
 +
}, window.particlesJS.load = function(e, a, t) {
 +
  var i = new XMLHttpRequest;
 +
  i.open("GET", a), i.onreadystatechange = function(a) {
 +
      if (4 == i.readyState)
 +
          if (200 == i.status) {
 +
              var s = JSON.parse(a.currentTarget.response);
 +
              window.particlesJS(e, s), t && t()
 +
          } else console.log("Error pJS - XMLHttpRequest status: " + i.status), console.log("Error pJS - File config not found")
 +
  }, i.send()
 +
};
 +
</script>
 +
<script>
 +
  particlesJS("particles-js", {"particles":{"number":{"value":101,"density":{"enable":true,"value_area":820.2189465597543}},"color":{"value":"#ffffff"},"shape":{"type":"circle","stroke":{"width":0,"color":"#000000"},"polygon":{"nb_sides":5},"image":{"src":"","width":100,"height":100}},"opacity":{"value":1,"random":true,"anim":{"enable":false,"speed":1,"opacity_min":0.1,"sync":false}},"size":{"value":8.002432739552825,"random":true,"anim":{"enable":false,"speed":30,"size_min":0.1,"sync":false}},"line_linked":{"enable":true,"distance":125,"color":"#ffffff","opacity":0.4,"width":1},"move":{"enable":true,"speed":8.002432739552825,"direction":"none","random":true,"straight":false,"out_mode":"out","bounce":false,"attract":{"enable":false,"rotateX":600,"rotateY":1200}}},"interactivity":{"detect_on":"canvas","events":{"onhover":{"enable":true,"mode":"repulse"},"onclick":{"enable":true,"mode":"push"},"resize":true},"modes":{"grab":{"distance":400,"line_linked":{"opacity":1}},"bubble":{"distance":400,"size":40,"duration":2,"opacity":8,"speed":3},"repulse":{"distance":200,"duration":0.4},"push":{"particles_nb":4},"remove":{"particles_nb":2}}},"retina_detect":true});var count_particles, stats, update; stats = new Stats; stats.setMode(0); stats.domElement.style.position = 'absolute'; stats.domElement.style.left = '0px'; stats.domElement.style.top = '0px'; document.body.appendChild(stats.domElement); count_particles = document.querySelector('.js-count-particles'); update = function() { stats.begin(); stats.end(); if (window.pJSDom[0].pJS.particles && window.pJSDom[0].pJS.particles.array) { count_particles.innerText = window.pJSDom[0].pJS.particles.array.length; } requestAnimationFrame(update); }; requestAnimationFrame(update);;
 +
</script>
 +
<script>
 +
$(".circle").hover(function(){
 +
    $("#text2").css("animation", "subtitle 4s linear");
 +
    }, function(){
 +
    $("#text2").css("opacity", "1");
 +
    }, function(){
 +
});
 +
$(".circle").hover(function(){
 +
      $("#description").css("animation", "subtitle 4s linear");
 +
      }, function(){
 +
      $("#description").css("opacity", "1");
 +
  });
 +
</script>
  
 
</html>
 
</html>
 +
 +
{{NCTU_Formosa/Footer}}

Latest revision as of 00:54, 18 October 2018

Navigation Bar Home

As the first team to introduce machine learning below the ground, we can do some pretty incredible things...

DEsiGn

Regulating soil microbiota, who directly shapes the environment...

Dry lAb

Using bio-stimulators, including our specially selected bacteriocins to manipulate bacterial ratios...

WEt lAb

Collecting data through IoT system to strengthen prediction accuracy with feedback...

IOt systEm

Integrating our concept with previous designs to benefit the industry and the environment...

EntrEprEnEurship

The journey begins here...

DEscriptiOn