<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You 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">
<head>
    <meta charset="utf-8">
    <title>Tap Home</title>
    {% load staticfiles %}
    <link rel="stylesheet" href="{% static "semantic.min.css" %}">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
    <!-- <script src="{% static "jquery-3.0.0.min.js" %}"></script> -->
    <script src="{% static "semantic.min.js" %}"></script>
    <link href="{% static "styles.min.css" %}" rel="stylesheet">
</head>
<body>
    <div id="main-container">
        <div id="react-container" />
    </div>
    <!-- <script src="{{ STATIC_URL }}js/components/jquery/dist/jquery.min.js"></script>
    <script src="{{ STATIC_URL }}js/components/bootstrap/dist/js/bootstrap.min.js"></script>
    <script src="{{ STATIC_URL }}js/es5-shim.min.js"></script> -->
    <script src="{% static "app.js" %}"></script>
</body>
</html>
