<!--
  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.
-->

<!--header>
    <button type='button' class='menu' title='Docs menu'>
	  <img src="{{'assets/images/menu-icon.svg'|relative_url}}"/>
    </button>
    
    <nav>
   
    </nav>
    <form class='search'>
        <button class="search-close" type='button'><img src='{{"assets/images/cancel.svg"|relative_url}}'></button>
        <input type="search" placeholder="Search…" id="search-input">
    </form>
	<button type='button' class='search-toggle'><img src='{{"assets/images/search.svg"|relative_url}}'></button>
    <button type='button' class='top-nav-toggle'>⋮</button>
    <a href="https://github.com/ignite" title='GitHub' class='github' target="_blank">
        <img src="{{'assets/images/github-gray.svg'|relative_url}}" alt="GitHub logo">
    </a>
</header-->

