{% extends "admin/base.html" %}
{% load admin_static %}

{# Additional <head> content here, some extra meta tags or favicon #}
{#{% block extrahead %}#}
{#{% endblock %}#}


{# Additional CSS includes #}
{# {% block extrastyle %} #}
{# {% endblock %} #}


{# Additional JS files in footer, right before </body> #}
{#{% block extrajs %}#}
{#  <script type="text/javascript" src="{% static 'js/my_project.js' %}"></script>#}
{#{% endblock %}#}


{# Footer links (left side) #}
{#{% block footer_links %}#}
{#  <a href="/docs/" class="icon"><i class="icon-question-sign"></i>Documentation</a>#}
{#{% endblock %}#}

{# Additional header content like notifications or language switcher #}
{#{% block header_content %}#}
{#    {{ block.super }}#}
{#    <div class="header-content">#}
{#        <!-- First icon column -->#}
{#        <div class="header-column icon">#}
{#            <i class="icon-home"></i><br>#}
{#            <i class="icon-cog"></i>#}
{#        </div>#}
{#        <div class="header-column" style="margin-right: 20px">#}
{#            <a href="/" class="grey">Front-end</a><br>#}
{#            <a href="" class="grey">One more link</a>#}
{#        </div>#}
{#        <!-- Second icon column -->#}
{#        <div class="header-column icon">#}
{#            <i class="icon-comment"></i>#}
{#        </div>#}
{#        <div class="header-column">#}
{#            <a href="" class="grey">5 new messages</a>#}
{#        </div>#}
{#    </div>#}
{#{% endblock %}#}

{# Footer branding name (center) #}
{% block footer_branding %}
PlanetStack
{% endblock %}


{# Footer copyright (right side) #}
{% block copyright %}
{#  Copyright &copy; 2013 Client<br>Developed by <a href="http://yoursite.com" target="_blank">YourName</a> #}
{% endblock %}
