Difference between revisions of "Team:NCTU Formosa"

Line 1: Line 1:
{{NCTU_Formosa}}
+
{{NCTU_Formosa/test}}
 
<html>
 
<html>
    <head>
+
 
        <style type="text/css">
+
<head>
          .bottom{
+
  <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);}
 +
}
 +
 
 +
@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;}
 +
}
 +
 
 +
@keyframes cloud {
 +
    0% {opacity: 0; top: -14vw;}
 +
    15% {opacity: 0; top: -10.5vw;}
 +
    25% {opacity: 0.7; top: -7vw;}
 +
    35% {opacity: 1; top: -3.5vw;}
 +
    44% {opacity: 1; top: 0;}
 +
    48% {opacity: 1; top: -1vw;}
 +
    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;
 +
    }
 +
 
 +
    body{
 +
      font-size: 0;
 +
      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;
 
       position: relative;
 
     }
 
     }
  
     .footer{
+
     .cover{
 
       width: 100%;
 
       width: 100%;
 
     }
 
     }
  
     .footer_icon{
+
 
       transition-duration: 0.5s;
+
     .title{
 +
       font-size: 7vmin;
 +
      margin: 50px;
 +
      margin-top: 0px;
 +
      text-align: center;
 
     }
 
     }
  
     .footer_icon:hover{
+
     .title_1{
       transform: scale(1.2);
+
       font-size: 6vmin;
 +
      width: 75%;
 +
      margin: 50px;
 +
      margin-top: 100px;
 +
      margin-left: 12.5%;
 
     }
 
     }
  
     .fb {
+
     .title_2{
       position: absolute;
+
       font-size: 5vmin;
       width: 5.9% !important;
+
       width: 70%;
       left: 26.5%;
+
       margin: 50px;
       top: 9vw;
+
       margin-left: 15%;
 
     }
 
     }
  
     .ig {
+
     .title_3{
       position: absolute;
+
       font-size: 3.5vmin;
       width: 6% !important;
+
       width: 70%;
       left: 34.5%;
+
       margin: 50px;
       top: 9vw;
+
       margin-left: 15%;
 
     }
 
     }
  
     .wechat {
+
     .text{
       position: absolute;
+
       font-size: 3vmin;
       width: 6% !important;
+
       width: 75%;
       left: 44%;
+
       position: relative;
       top: 9vw;
+
      margin-left: 12.5%;
 +
       margin-right: 12.5%;
 +
      margin-top: 40px;
 +
      margin-bottom: 40px;
 +
      text-align: justify;
 
     }
 
     }
  
     .gmail {
+
     .explanation{
       position: absolute;
+
       font-size: 2.5vmin;
       width: 7% !important;
+
       font-weight: bold;
       left: 52%;
+
       color: #575656;
       top: 9.5vw;
+
       text-align: center;
 
     }
 
     }
  
     .location {
+
     .text2{
       position: absolute;
+
       font-size: 2.5vw;
       width: 4% !important;
+
       font-family: Agency FB;
       left: 73%;
+
       color: white;
       top: 9vw;
+
      text-align: left;
 +
      transform: scaleX(1.3);
 +
      width: 55%;
 +
       padding-left: 20%;
 
     }
 
     }
        </style>
 
    </head>
 
    <body>
 
        <div class="column full_size" >
 
        <h1> Welcome to NCTU_Formosa! </h1><br>
 
        <h4 align="center"> Project Description </h4>
 
        <div id=x>
 
            <hr color="cc0066" align="center" size="6">
 
        </div>
 
        <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>
+
    .block{
     </body>
+
      display: inline-block;
 +
      width: 55%;
 +
      margin-left: 3%;
 +
      vertical-align: top;
 +
      position: relative;
 +
      top: 6vw;
 +
     }
  
<img src="http://placehold.it/1080x320/c4baba/e4dede">
+
    #drylab{
+
      top: 10vw;
 +
    }
  
 +
    #wetlab{
 +
      top: 10vw;
 +
    }
  
<div class="column full_size" >
+
    #iot{
 +
      top: 13vw;
 +
    }
  
<h3>Before you start</h3>
+
    #entre{
<p> Please read the following pages:</p>
+
      top: 10vw;
<ul>
+
    }
<li>  <a href="https://2018.igem.org/Competition">Competition Hub</a> </li>
+
<li> <a href="https://2018.igem.org/Competition/Deliverables/Wiki">Wiki Requirements page</a></li>
+
<li> <a href="https://2018.igem.org/Resources/Template_Documentation">Template documentation</a></li>
+
</ul>
+
</div>
+
  
  
<div class="clear extra_space"></div>
 
<div class="line_divider"></div>
 
<div class="clear extra_space"></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 full_size" >
+
    #description{
<h3> Styling your wiki </h3>
+
      position: relative;
<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>
+
      opacity: 0;
<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>
+
      margin-left:68%;
 +
      margin-top: -14vw;
 +
      display: inline-block;
 +
      bottom: 0px;
 +
      animation-fill-mode: forwards!important;
 +
    }
  
</div>
+
    a{
 +
      text-decoration: none!important;
 +
    }
  
 +
    p{
 +
      margin: 0;
 +
    }
  
 +
    table{
 +
      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;
 +
    }
  
<div class="clear extra_space"></div>
+
    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="column third_size" >
+
    tbody{
 +
      font-size: 3vmin;
 +
    }
  
<h3> Uploading pictures and files </h3>
+
    .equation{
<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>
+
      font-size: 3vmin;
 +
      margin: 40px;
 +
      text-align: center;
 +
      margin-left: auto;
 +
      margin-right: auto;
 +
    }
  
 +
    .icon{
 +
      width: 20px;
 +
      vertical-align: middle;
 +
    }
  
<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>
+
    .pic{
 +
      width: 100%;
 +
    }
  
<div class="button_link">
+
    .procedure{
<a href="https://2018.igem.org/Special:Upload">
+
      width: 100px;
UPLOAD FILES
+
    }
</a>
+
</div>
+
  
</div>
+
    .curcumin{
 +
      width: 30%;
 +
      margin-left: 5%;
 +
      display: inline-block;
 +
    }
  
<div class="column third_size" >
+
    .wetlab{
<h3> Wiki template information </h3>
+
      width: 100%;
<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>
+
    .iot{
 +
      width: 30%;
 +
      margin-left: 2%;
 +
      display: inline-block;
 +
      margin-top: 6vw;
 +
    }
 +
    .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;
 +
    }
  
<div class="column third_size" >
+
    .circle:hover{
<div class="highlight decoration_B_full">
+
      -webkit-animation: rotation 6s infinite linear;
<h3> Editing your wiki </h3>
+
      animation: rotation 6s infinite linear;
<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>
+
    }
<p>Use WikiTools - Edit in the black menu bar to edit this page</p>
+
  
<div class="button_link">
+
    .hand{
<a href="https://2018.igem.org/wiki/index.php?title=Team:NCTU_Formosa&action=edit">
+
      width: 15%;
EDIT PAGE
+
      position: relative;
</a>
+
      bottom: 0px;
</div>
+
      margin-top: 10vw;
 +
      margin-left: 13%;
 +
      z-index: 1;
 +
      display: inline-block;
 +
    }
  
 +
    #text2{
 +
      position: relative;
 +
      opacity: 0;
 +
      animation-fill-mode: forwards!important;
 +
    }
  
</div>
+
    .planb{
</div>
+
      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;
 +
    }
  
 +
  </style>
  
<div class="clear extra_space"></div>
+
  <!----------------------------------------------------------------------------->
<div class="line_divider"></div>
+
<div class="clear extra_space"></div>
+
  
 +
  <script>
 +
  </script>
  
 +
  <!----------------------------------------------------------------------------->
  
<div class="column two_thirds_size" >
+
  <!-- Latex resourse code-->
<h3>Tips</h3>
+
  <script src="http://cdn.mathjax.org/mathjax/latest/MathJax.js" type="text/javascript">
<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>
+
      MathJax.Hub.Config({
<ul>
+
          extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
<li>State your accomplishments! Tell people what you have achieved from the start. </li>
+
          jax: ["input/TeX", "output/HTML-CSS"],
<li>Be clear about what you are doing and how you plan to do this.</li>
+
          tex2jax: {
<li>You have a global audience! Consider the different backgrounds that your users come from.</li>
+
              inlineMath: [
<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>
+
              displayMath: [
</ul>
+
                  ['$$', '$$'],
</div>
+
                  ["\\[", "\\]"]
 +
              ],
 +
          },
 +
          "HTML-CSS": {
 +
              availableFonts: ["TeX"]
 +
          }
 +
      });
 +
  </script>
  
 +
  <!----------------------------------------------------------------------------->
 +
</head>
  
<div class="column third_size">
+
<body>
<div class="highlight decoration_A_full">
+
  <div class="wrapper">
<h3>Inspiration</h3>
+
    <div class="sec1">
<p> You can also view other team wikis for inspiration! Here are some examples:</p>
+
      <img src="https://static.igem.org/mediawiki/2018/6/68/T--NCTU_Formosa--PlantB.png" class="planb">
<ul>
+
      <img src="https://static.igem.org/mediawiki/2018/9/90/T--NCTU_Formosa--Home_curcumin.png" class="curcumin">
<li> <a href="https://2014.igem.org/Team:SDU-Denmark/"> 2014 SDU Denmark </a> </li>
+
      <div class="block">
<li> <a href="https://2014.igem.org/Team:Aalto-Helsinki">2014 Aalto-Helsinki</a> </li>
+
        <div class="text2">
<li> <a href="https://2014.igem.org/Team:LMU-Munich">2014 LMU-Munich</a> </li>
+
          <p>
<li> <a href="https://2014.igem.org/Team:Michigan"> 2014 Michigan</a></li>
+
            As the first team to introduce machine learning below the groung, we can do some pretty incredible things...
<li> <a href="https://2014.igem.org/Team:ITESM-Guadalajara">2014 ITESM-Guadalajara </a></li>
+
          </p>
<li> <a href="https://2014.igem.org/Team:SCU-China"> 2014 SCU-China </a></li>
+
        </div>
</ul>
+
        <a href="https://2018.igem.org/Team:NCTU_Formosa/Applied_Design"><span class="button_1">DEsiGn</span></a>
</div>
+
      </div>
</div>
+
  
<div class="clear extra_space"></div>
+
      <div class="block" id="drylab">
<div class="line_divider"></div>
+
        <div class="text2">
<div class="clear extra_space"></div>
+
          <p>
 +
            Regulating soil microbiota, who directly shape their 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/9/9d/T--NCTU_Formosa--earthearth.png" alt="" class="earth">
  
<div class="bottom">
+
      <div class="bacteriocin">
      <img class="footer" src="https://static.igem.org/mediawiki/2018/4/4a/T--NCTU_Formosa--footer.png"/>
+
        <img src="https://static.igem.org/mediawiki/2018/3/30/T--NCTU_Formosa--Home_Wetlab.png" class="wetlab">
      <a href="https://www.facebook.com/NCTUFormosa/" target="_blank">
+
         <img src="https://static.igem.org/mediawiki/2018/8/8a/T--NCTU_Formosa--Bovicin2.gif" class="bov">
         <img class="footer_icon fb" src="https://static.igem.org/mediawiki/2018/8/86/T--NCTU_Formosa--fb.png"/>
+
       </div>
       </a>
+
       <div class="block" id="wetlab">
       <a href="" target="_blank">
+
         <div class="text2">
         <img class="footer_icon ig" src="https://static.igem.org/mediawiki/2018/8/85/T--NCTU_Formosa--ig.png"/>
+
          <p>
      </a>
+
            Using bio-stimulators, including our specially selected bacteriocins to manipulate bacterial ratios...
      <a href="" target="_blank">
+
          </p>
        <img class="footer_icon wechat" src="https://static.igem.org/mediawiki/2018/8/88/T--NCTU_Formosa--wechat.png"/>
+
        </div>
      </a>
+
        <a href="https://2018.igem.org/Team:NCTU_Formosa/Wet_Lab"><span class="button_1" >WEt lAb</span></a>
      <a href="mailto:nctuformosa@gmail.com " target="_blank">
+
      </div>
        <img class="footer_icon gmail" src="https://static.igem.org/mediawiki/2018/2/2e/T--NCTU_Formosa--gmail.png"/>
+
 
       </a>
+
      <div class="block" id="iot">
      <a href="https://www.google.com.tw/maps/place/%E5%9C%8B%E7%AB%8B%E4%BA%A4%E9%80%9A%E5%A4%A7%E5%AD%B8%E5%85%89%E5%BE%A9%E6%A0%A1%E5%8D%80/@24.7890719,120.997069,17z/data=!3m1!4b1!4m5!3m4!1s0x34683657ef245f31:0x3929da7f3a723e9a!8m2!3d24.789067!4d120.999263?hl=zh-TW" target="_blank">
+
        <div class="text2">
        <img class="footer_icon location" src="https://static.igem.org/mediawiki/2018/1/13/T--NCTU_Formosa--location.png"/>
+
          <p>
       </a>
+
            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"><span class="button_1" id="description">DEscriptiOn</span></a>
 
     </div>
 
     </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}}

Revision as of 19:21, 17 October 2018

Navigation Bar Home

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

DEsiGn

Regulating soil microbiota, who directly shape their 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