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

# layout for front page, contianing only the footer, with a bit more text
layout: website-base
---
<div class="container slightlyNarrowContainer">
    {{ content }}
</div>

<div id="footer">
    <div class="container">
        <div class="row">
            <div class="col-md-9 text-muted">
                Apache Brooklyn is distributed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License v2.0</a>.
            </div>
            <div class="col-md-3">
                <p>
                <a class="btn btn-sm btn-default" href="https://github.com/apache/brooklyn-docs/edit/master/{{ page.path }}">Edit This Page</a>
                <a href="{{ site.url_root }}{{ site.path.website }}/community/how-to-contribute-docs.html"
                    data-toggle="tooltip" data-placement="top" title="How to Edit Documentation" data-delay="400"/>
                  <span class="octicon octicon-question octicon-footer"></span>
                </a>
                </p>
            </div>
        </div>
    </div>
</div>
