{% comment %}
    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.
{% endcomment %}
<head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    {% if jekyll.environment == "production" %}
    {% comment %}
    <meta http-equiv="Refresh" content="0;URL=https://wayang.apache.org{{page.url}}" />
    {% endcomment %}
    <script type="text/javascript">
        if(window.location.protocol != 'https:') {
            location.href =   location.href.replace("http://", "https://");
        }
    </script>
    {% endif %}


    <title>Apache Wayang - {{page.title}}</title>
    <link rel="icon" href="{{ "assets/img/logo/favicon-pluma.ico" | absolute_url }}">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css" integrity="sha384-B0vP5xmATw1+K9KRQjQERJvTumQW0nPEzvF6L/Z6nronJ3oUOFUFpCjEUQouq2+l" crossorigin="anonymous">
    <link rel="stylesheet" href="{{ "assets/css/color.css" | absolute_url }}">
    <link rel="stylesheet" href="https://pro.fontawesome.com/releases/v5.10.0/css/all.css" integrity="sha384-AYmEC3Yw5cVb3ZcuHtOA93w35dYTsvhLPVnYs9eStHfGJvOvKxVfELGroGkvsg+p" crossorigin="anonymous"/>

    <link rel="stylesheet" href="{{ "assets/css/monokai.css" | absolute_url }}">
    <link rel="stylesheet" href="{{ "assets/css/home.css" | absolute_url }}">

</head>
