<!--
  ~ Licensed under the Apache License, Version 2.0 (the "License");
  ~ you may not use this file except in compliance with the License.
  ~ You may obtain a copy of the License at
  ~     http://www.apache.org/licenses/LICENSE-2.0
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  -->

<!DOCTYPE html>
<html lang="en" class="light">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" href="./assets/images/zeppelin.png" type="image/x-icon">
  <title>Zeppelin</title>
  <base href="/">
</head>
<body>
<zeppelin-root>
  <section class="spin">
    <div>
      <div class="logo"></div>
      <div class="spin-text">
        <h1 class="brand-title" style="display: none">Zeppelin</h1>
        <span class="status" style="display: none">Booting ...</span>
      </div>
    </div>
  </section>
</zeppelin-root>

  <script type="text/x-mathjax-config">
      var config = {
        extensions: ["tex2jax.js"],
        jax: ["input/TeX", "output/HTML-CSS"],
        tex2jax: {
          inlineMath: [ ["\\(","\\)"] ],
          displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
          processEscapes: true
        },
        "HTML-CSS": { availableFonts: ["TeX"] },
        messageStyle: "none"
      }
      MathJax.Hub.Config(config);
    </script>
</body>
</html>
