<!--
{% 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 %}
-->


<section id="home">
<!-- Header -->
	<div class="intro-header">

		<div class="container">

			<div class="row">
				<div class="col-lg-4 vcenter">
					<div class="intro-message">
						<img class="logo-img" src="img/apache_logo.png" alt="">
                        <!-- <h1>{{ page.title }}</h1> -->
						<!-- <h3>{{ page.subTitle }}</h3> -->
						<!-- <hr class="intro-divider"> -->
					</div>
				</div>
                <div class="col-lg-6 vcenter">
                    <div class="intro-message">

                        <!-- <h1>{{ page.title }}</h1> -->
						<h2>{{ page.subTitle }}</h2>
						<!-- <hr class="intro-divider"> -->
					</div>
                </div>
			</div>
            <div class="row">
                <em style="color:black" >Site under construction. Some links may still point to GitHub, rather than Apache pages.</em>
            </div>
		</div>
		<!-- /.container -->

	</div>
	<!-- /.intro-header -->
</section>

<!-- Navigation -->
<div id="nav-bar">
    <nav id="nav-container" class="navbar navbar-inverse " role="navigation">
        <div class="container">
            <!-- Brand and toggle get grouped for better mobile display -->

            <div class="navbar-header page-scroll">
                <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
                    <span class="sr-only">Toggle navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a class="navbar-brand page-scroll" href="http://quarks.incubator.apache.org/#home">Home</a>
            </div>
            <!-- Collect the nav links, forms, and other content for toggling -->
            <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
                <ul class="nav navbar-nav">
                    <li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">About Quarks</a>
                      <ul class="dropdown-menu">
                        <li><a href="/docs/overview">About Quarks</a></li>
                        <li><a href="{{ site.sourceurl }}/blob/master/LICENSE">License</a></li>
                      </ul>
                    </li>
                    <li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Community</a>
                      <ul class="dropdown-menu">
                        <li><a href="docs/community">Get Involved</a></li>
                        <li><a href="https://issues.apache.org/jira/browse/QUARKS">Issue Tracker</a></li>
                        <li><a href="{{ site.sourceurl }}/">Source Code</a></li>
                        <li><a href="docs/committers">Committers</a></li>
                        <li><a href="https://cwiki.apache.org/confluence/display/QUARKS/Apache+Quarks+Wiki+Home">Wiki</a></li>
                      </ul>
                    </li>
                    <li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Getting Started</a>
                      <ul class="dropdown-menu">
                        <li><a href="docs/quarks-getting-started">Getting Started Guide</a></li>
                        <li><a href="{{ site.sourceurl }}">Download Source</a></li>
                        <li><a href="docs/samples">Sample Programs</a></li>
                        <li><a href="docs/faq">FAQ</a></li>

                      </ul>
                    </li>
                    <li class="dropdown">
                      <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Documentation</a>
                      <ul class="dropdown-menu">
                        <li><a href="docs/home">Documentation Home</a></li>
                        <li><a href="javadoc/lastest/index.html">Javadoc</a></li>
                      </ul>
                    </li>
                    <li class="dropdown">
                      <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Apache</a>
                      <ul class="dropdown-menu">
                        <li><a href="http://www.apache.org/foundation/how-it-works.html">Apache Software Foundation</a></li>
                        <li><a href="http://www.apache.org/licenses/">Apache License</a></li>
                        <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
                        <li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
                      </ul>
                    </li>
                </ul>
                <ul class="nav navbar-nav navbar-right">
                    <li>
                        <a href="{{ site.sourceurl }}">Download Source</a>
                    </li>
                   <!-- <li>
                        <a class="page-scroll" href="#services">Services</a>
                    </li>
                    <li>
                        <a class="page-scroll" href="#contact">Contact</a>
                    </li> -->
                </ul>
            </div>
            <!-- /.navbar-collapse -->
        </div>
        <!-- /.container -->
    </nav>
</div>
