Commits

Tyler Butler  committed 91c332c

Backup.

  • Participants
  • Parent commits e9007e5

Comments (0)

Files changed (3)

 2012-01-17_23-26-44_r25+.diff
 more_themes.diff
 themes3.diff
+themes4.diff
+themes5.diff
 # Placed by Bitbucket

File themes4.diff

+# HG changeset patch
+# Parent e5e2594ebc02fd71345bcf0b108a7395a7f920b4
+more themes
+
+diff --git a/docs_source/themes.rst b/docs_source/themes.rst
+--- a/docs_source/themes.rst
++++ b/docs_source/themes.rst
+@@ -5,6 +5,14 @@
+     The title of the site.
+ 
+ 
+-Custom themes:
++Theme-related settings:
+ 
+-Custom themes should be defined as a dictionary
+\ No newline at end of file
++ENGINEER_THEME
++    The module and name of the dictionary that contains the theme settings.
++    Defaults to ``engineer.themes.DarkRainbow``.
++    Custom themes should be defined as a dictionary containing the properties of the theme.
++
++ENGINEER_THEME_VARIABLES
++    Most themes have a bunch of variables that you can override. Dictionary.
++
++Site content
+\ No newline at end of file
+diff --git a/engineer/context_processors.py b/engineer/context_processors.py
+--- a/engineer/context_processors.py
++++ b/engineer/context_processors.py
+@@ -13,18 +13,16 @@
+ def site_variables(request):
+     static_url = path(settings.STATIC_URL)
+     engineer = {
+-        'site_title': settings.ENGINEER_SITE_TITLE,
+-        'meta_description': settings.ENGINEER_META_DESCRIPTION,
+-        'meta_author': settings.ENGINEER_META_AUTHOR,
+-        'typekit_url': settings.ENGINEER_TYPEKIT_URL,
+         'foundation_url': static_url / 'engineer/lib/foundation/',
+         'jquery_url': static_url / 'engineer/lib/jquery-1.6.2.min.js',
+         'modernizr_url': static_url / 'engineer/lib/modernizr-2.0.6.min.js',
+         'lesscss_url': static_url / 'engineer/lib/less-1.1.5.min.js',
+         'use_client_side_less': settings.ENGINEER_USE_CLIENT_SIDE_LESS,
+         }
++    theme =  get_class(settings.ENGINEER_THEME)
++    theme.update(settings.ENGINEER_THEME_VARIABLES)
+     return {
+         'engineer': engineer,
+-        'theme': get_class(settings.ENGINEER_THEME),
++        'theme': theme,
+         }
+ 
+diff --git a/engineer/models.py b/engineer/models.py
+--- a/engineer/models.py
++++ b/engineer/models.py
+@@ -7,7 +7,6 @@
+ from django.template.context import Context
+ from django.template.loader import get_template
+ from markitup.fields import MarkupField
+-from potpourri.functions import get_class
+ from taggit.managers import TaggableManager
+ from path import path
+ from yaml import dump
+@@ -35,15 +34,7 @@
+     FEED_MAX_ITEMS = 10
+ 
+     THEME = 'engineer.themes.DarkRainbow'
+-
+-    SITE_TITLE = None
+-    META_DESCRIPTION = None
+-    META_AUTHOR = None
+-
+-    TYPEKIT_URL = None
+-#
+-#    def configure_theme(self, value):
+-#        return get_class('engineer.themes.DarkRainbow') if value is None else value
++    THEME_VARIABLES = {}
+ 
+ 
+ class Series(models.Model):
+diff --git a/engineer/templates/engineer/_footer.html b/engineer/templates/engineer/_footer.html
+new file mode 100644
+--- /dev/null
++++ b/engineer/templates/engineer/_footer.html
+@@ -0,0 +1,8 @@
++{% extends theme.footer_base %}
++
++{# Default footer content. #}
++
++{% block footer_content %}
++    <p>&copy; 2002-2012 Tyler Butler. All rights reserved.</p>
++    <p>Powered by <a href="https://bitbucket.org/tylerbutler/django-engineer">engineer</a>.</p>
++{% endblock %}
+diff --git a/engineer/templates/engineer/themes/dark_rainbow/_primary_nav.html b/engineer/templates/engineer/_nav_primary.html
+rename from engineer/templates/engineer/themes/dark_rainbow/_primary_nav.html
+rename to engineer/templates/engineer/_nav_primary.html
+--- a/engineer/templates/engineer/themes/dark_rainbow/_primary_nav.html
++++ b/engineer/templates/engineer/_nav_primary.html
+@@ -1,16 +1,14 @@
++{% extends theme.nav_primary_base %}
++
+ {# Use the future Django 1.5 url tag behavior. #}
+ {% load url from future %}
+ 
+ {% load engineer %}
+ 
+-<ul>
+-    <li class="{% if_view 'home post' 'current' %}">
+-        <a href="{% url 'home' %}">stream</a>
+-    </li>
+-    <li class="{% if_view 'projects' 'current' %}">
+-        <a href="{% url 'projects' %}">projects</a>
+-    </li>
+-    <li class="{% if_view 'guides' 'current' %}">
+-        <a href="{% url 'guides' %}">guides</a>
+-    </li>
+-</ul>
++{% block nav_primary_content %}
++    <ul>
++        <li class="{% if_view 'home post' 'current' %}">
++            <a href="{% url 'home' %}">home</a>
++        </li>
++    </ul>
++{% endblock %}
+diff --git a/engineer/templates/engineer/_sidebar.html b/engineer/templates/engineer/_sidebar.html
+new file mode 100644
+--- /dev/null
++++ b/engineer/templates/engineer/_sidebar.html
+@@ -0,0 +1,5 @@
++{% extends theme.sidebar_base %}
++
++{% block sidebar_content %}
++    <p>You should customize the sidebar content by adding an 'engineer/_sidebar.html' template.</p>
++{% endblock %}
+diff --git a/engineer/templates/engineer/_base.html b/engineer/templates/engineer/themes/_base.html
+rename from engineer/templates/engineer/_base.html
+rename to engineer/templates/engineer/themes/_base.html
+--- a/engineer/templates/engineer/_base.html
++++ b/engineer/templates/engineer/themes/_base.html
+@@ -20,20 +20,20 @@
+     <!-- Set the viewport width to device width for mobile -->
+     <meta name="viewport" content="width=device-width"/>
+ 
+-    <title>{{ site_title }}</title>
++    <title>{{ theme.site_title }}</title>
+ 
+-    {% if meta_description %}
+-        <meta name="description" content="{{ meta_description }}">
+-    {% endif %}
+-
+-    {% if meta_author %}
+-        <meta name="author" content="{% block meta_author %}{% endblock %}">
+-    {% endif %}
++{#    {% if meta_description %}#}
++{#        <meta name="description" content="{{ engineer.meta_description }}">#}
++{#    {% endif %}#}
++{##}
++{#    {% if meta_author %}#}
++{#        <meta name="author" content="{% block meta_author %}{% endblock %}">#}
++{#    {% endif %}#}
+ 
+     <link rel="alternate" type="application/atom+xml"
+-          title="{{ site_title }} Atom Feed" href="{% url 'atom_feed' %}"/>
++          title="{{ theme.site_title }} Atom Feed" href="{% url 'atom_feed' %}"/>
+     <link rel="alternate" type="application/rss+xml"
+-          title="{{ site_title }} RSS Feed" href="{% url 'rss_feed' %}"/>
++          title="{{ theme.site_title }} RSS Feed" href="{% url 'rss_feed' %}"/>
+ 
+     {% if theme.use_foundation %}
+         {# FOUNDATION CSS #}
+diff --git a/engineer/templates/engineer/themes/dark_rainbow/_footer_base.html b/engineer/templates/engineer/themes/dark_rainbow/_footer_base.html
+new file mode 100644
+--- /dev/null
++++ b/engineer/templates/engineer/themes/dark_rainbow/_footer_base.html
+@@ -0,0 +1,8 @@
++{% block footer %}
++    <div class="row">
++        <footer class="{% block footer_class %}twelve columns centered{% endblock %}">
++            {% block footer_content %}
++            {% endblock %}
++        </footer>
++    </div>
++{% endblock %}
+\ No newline at end of file
+diff --git a/engineer/templates/engineer/themes/dark_rainbow/_nav_primary_base.html b/engineer/templates/engineer/themes/dark_rainbow/_nav_primary_base.html
+new file mode 100644
+--- /dev/null
++++ b/engineer/templates/engineer/themes/dark_rainbow/_nav_primary_base.html
+@@ -0,0 +1,4 @@
++<nav id="primary" class="{% block nav_primary_class %}six columns{% endblock %}">
++    {% block nav_primary_content %}
++    {% endblock %}
++</nav>
+diff --git a/engineer/templates/engineer/themes/dark_rainbow/_sidebar.html b/engineer/templates/engineer/themes/dark_rainbow/_sidebar.html
+deleted file mode 100644
+--- a/engineer/templates/engineer/themes/dark_rainbow/_sidebar.html
++++ /dev/null
+@@ -1,1 +0,0 @@
+-{% include "sidebar_content.html" %}
+diff --git a/engineer/templates/engineer/themes/dark_rainbow/_sidebar_base.html b/engineer/templates/engineer/themes/dark_rainbow/_sidebar_base.html
+new file mode 100644
+--- /dev/null
++++ b/engineer/templates/engineer/themes/dark_rainbow/_sidebar_base.html
+@@ -0,0 +1,5 @@
++{% block sidebar %}
++    <section id="sidebar" class="{% block sidebar_class %}three columns{% endblock %}">
++        {% block sidebar_content %}{% endblock %}
++    </section>
++{% endblock %}
+diff --git a/engineer/templates/engineer/themes/dark_rainbow/base.html b/engineer/templates/engineer/themes/dark_rainbow/base.html
+--- a/engineer/templates/engineer/themes/dark_rainbow/base.html
++++ b/engineer/templates/engineer/themes/dark_rainbow/base.html
+@@ -1,4 +1,4 @@
+-{% extends 'engineer/_base.html' %}
++{% extends 'engineer/themes/_base.html' %}
+ 
+ {# Use the future Django 1.5 url tag behavior. #}
+ {% load url from future %}
+@@ -15,7 +15,7 @@
+ 
+ {% block scripts_top %}
+     {# TYPEKIT #}
+-    <script type="text/javascript" src="{{ engineer.typekit_url }}"></script>
++    <script type="text/javascript" src="{{ theme.typekit_url }}"></script>
+     <script type="text/javascript">
+         try {
+             Typekit.load();
+@@ -27,33 +27,25 @@
+ 
+ {% block body %}
+     <div class="container">
++        <header id="top" class="row">
++            <h1 class="{% block top_header_class %}six columns{% endblock %}">
++                <a href="{% url 'home' %}">{{ theme.site_title }}</a>
++            </h1>
++            {% block nav_primary %}
++                {% include 'engineer/_nav_primary.html' %}
++            {% endblock %}
++        </header>
+         <div class="row">
+-            <header id="top" class="twelve columns">
+-                <h1 class=""><a href="{% url 'home' %}">{{ engineer.site_title }}</a></h1>
+-                <nav id="primary">
+-                    {% include 'engineer/themes/dark_rainbow/_primary_nav.html' %}
+-                </nav>
+-            </header>
+-        </div>
+-        <div class="row">
+-            <section id="main" class="nine columns" role="main">
++            <section id="main" class="{% block main_class %}nine columns{% endblock %}" role="main">
+                 {% block main %}{% endblock %}
+             </section>
+-            <section id="sidebar" class="three columns">
+-                {% block sidebar %}
+-                    {% include 'engineer/themes/dark_rainbow/_sidebar.html' %}
+-                {% endblock %}
+-            </section>
++            {% block sidebar %}
++                {% include 'engineer/_sidebar.html' %}
++            {% endblock %}
+         </div>
+-        <div class="row">
+-            <footer class="twelve columns centered">
+-                {% block footer %}
+-                    <p>&copy; 2002-2012 Tyler Butler. All rights reserved.</p>
+-                    <p>Powered by <a href="https://bitbucket.org/tylerbutler/django-engineer">engineer</a>
+-                        and unicorn tears.</p>
+-                {% endblock %}
+-            </footer>
+-        </div>
++        {% block footer %}
++            {% include 'engineer/_footer.html' %}
++        {% endblock %}
+     </div>
+ {% endblock body %}
+ 
+diff --git a/engineer/templates/engineer/themes/dark_rainbow/post.html b/engineer/templates/engineer/themes/dark_rainbow/post.html
+deleted file mode 100644
+--- a/engineer/templates/engineer/themes/dark_rainbow/post.html
++++ /dev/null
+@@ -1,1 +0,0 @@
+-{% extends 'engineer/themes/dark_rainbow/base.html' %}
+diff --git a/engineer/templates/engineer/themes/dark_rainbow/post_detail.html b/engineer/templates/engineer/themes/dark_rainbow/post_detail.html
+new file mode 100644
+--- /dev/null
++++ b/engineer/templates/engineer/themes/dark_rainbow/post_detail.html
+@@ -0,0 +1,15 @@
++{% extends 'engineer/themes/dark_rainbow/post_list.html' %}
++
++{% block main_class %}twelve columns{% endblock %}
++
++{% block main %}
++    {% include 'engineer/themes/dark_rainbow/_single_post.html' with post=post %}
++{% endblock %}
++
++{% block sidebar %}
++{#    {% if template_overrides.sidebar_template %}#}
++{#        {% include template_overrides.sidebar_template with post=post %}#}
++{#    {% else %}#}
++{#        {{ block.super }}#}
++{#    {% endif %}#}
++{% endblock %}
+diff --git a/engineer/templates/engineer/themes/dark_rainbow/post_list.html b/engineer/templates/engineer/themes/dark_rainbow/post_list.html
+--- a/engineer/templates/engineer/themes/dark_rainbow/post_list.html
++++ b/engineer/templates/engineer/themes/dark_rainbow/post_list.html
+@@ -11,10 +11,10 @@
+             {% endfor %}
+         </div>
+         {% if page_obj.has_previous %}
+-            <div class="button floatleft"><a href="{% url 'home' page=page_obj.previous_page_number %}">
++            <div class="button left"><a href="{% url 'home' page=page_obj.previous_page_number %}">
+                 ← newer posts</a></div>
+         {% endif %}
+-        <div class="button floatright">
++        <div class="button right">
+             {% if page_obj.has_next %}
+                 <a href="{% url 'home' page=page_obj.next_page_number %}">older posts →</a>
+             {% else %}
+diff --git a/engineer/themes.py b/engineer/themes.py
+--- a/engineer/themes.py
++++ b/engineer/themes.py
+@@ -8,14 +8,21 @@
+     theme = get_class(settings.ENGINEER_THEME)
+     return path(theme['template_root']) / template
+ 
++def theme_defaults():
++    return {
+ 
++    }
++
++dr_template_root = 'engineer/themes/dark_rainbow'
+ DarkRainbow = {
+     'name': 'Dark Rainbow',
+-    'template_root': 'engineer/themes/dark_rainbow',
++    'template_root': dr_template_root,
+     'static_root': path(settings.STATIC_URL) / 'engineer/themes/dark_rainbow',
+-    'typekit_url': settings.ENGINEER_TYPEKIT_URL,
++    'nav_primary_base': 'engineer/themes/dark_rainbow/_nav_primary_base.html',
++    'sidebar_base': 'engineer/themes/dark_rainbow/_sidebar_base.html',
++    'footer_base': 'engineer/themes/dark_rainbow/_footer_base.html',
+     'use_foundation': True,
+     'use_lesscss': True,
+     'use_modernizr': False,
+     'use_jquery': True,
+-}
++    }
+diff --git a/engineer/urls.py b/engineer/urls.py
+--- a/engineer/urls.py
++++ b/engineer/urls.py
+@@ -12,13 +12,13 @@
+     url(r'^page(?P<page>[0-9]+)/$', PostList.as_view(), name='home'),
+ 
+     # archives by month and year
+-    url(r'^archives/$', PostViewYearArchive.as_view(year=datetime.today().year), name='archives'),
+-    url(r'^(?P<year>\d{4})/$', PostViewYearArchive.as_view(), name='archives'),
+-    url(r'^(?P<year>\d{4})/(?P<month>\d{1,2})/$', PostViewMonthArchive.as_view()),
++    url(r'^archives/$', PostArchiveByYear.as_view(year=datetime.today().year), name='archives'),
++    url(r'^(?P<year>\d{4})/$', PostArchiveByYear.as_view(), name='archives'),
++    url(r'^(?P<year>\d{4})/(?P<month>\d{1,2})/$', PostListByMonth.as_view()),
+ 
+     # single post indexed by date and slug
+     url(r'^(?P<year>\d{4})/(?P<month>\d{1,2})/(?P<day>\d{1,2})/(?P<slug>[\w-]*)$',
+-        PostViewSingle.as_view(),
++        PostDetail.as_view(),
+         name='post'),
+ 
+     url(r'^links/$', PostList.as_view(queryset=Post.links.all())),
+diff --git a/engineer/views.py b/engineer/views.py
+--- a/engineer/views.py
++++ b/engineer/views.py
+@@ -1,6 +1,7 @@
+ from django.views.generic import  YearArchiveView
+ from django.views.generic.dates import DateDetailView, MonthMixin, YearMixin
+-from django.views.generic.list import ListView
++from django.views.generic.detail import SingleObjectMixin
++from django.views.generic.list import ListView, MultipleObjectMixin
+ from engineer.themes import theme_path
+ from models import Post
+ 
+@@ -16,6 +17,16 @@
+         return context
+ 
+ 
++class TemplateOverrideMixin(SingleObjectMixin, MultipleObjectMixin):
++    template_overrides = None
++
++    def get_context_data(self, **kwargs):
++        context = super(TemplateOverrideMixin, self).get_context_data(**kwargs)
++        if self.template_overrides:
++            context['template_overrides'] = self.template_overrides
++        return context
++
++
+ class PostList(ListView):
+     """
+     A view of the most recent 10 posts, paginated by 5.
+@@ -52,24 +63,24 @@
+         return context
+ 
+ 
+-class PostViewSingle(DateDetailView):
++class PostListByMonth(PostList, YearMixin, MonthMixin):
++    def get_queryset(self):
++        return Post.published.filter(
++            timestamp__year=self.get_year(),
++            timestamp__month=self.get_month()).order_by('timestamp')
++
++
++class PostDetail(DateDetailView, TemplateOverrideMixin):
+     model = Post
+     context_object_name = 'post'
+     date_field = 'timestamp'
+     year_format = '%Y'
+     month_format = '%m'
+     day_format = '%d'
+-    template_name = 'post_detail.html'
++    template_name = theme_path('post_detail.html')
+ 
+ 
+-class PostViewMonthArchive(PostList, YearMixin, MonthMixin):
+-    def get_queryset(self):
+-        return Post.published.filter(
+-            timestamp__year=self.get_year(),
+-            timestamp__month=self.get_month()).order_by('timestamp')
+-
+-
+-class PostViewYearArchive(_PostArchiveView):
++class PostArchiveByYear(_PostArchiveView):
+     allow_empty = True
+     template_name = 'archive.html'
+ 
+@@ -77,7 +88,7 @@
+         return Post.published.filter(timestamp__year=self.get_year()).order_by('timestamp')
+ 
+     def get_context_data(self, **kwargs):
+-        context = super(PostViewYearArchive, self).get_context_data(**kwargs)
++        context = super(PostArchiveByYear, self).get_context_data(**kwargs)
+         date_list = sorted(context['date_list'])
+         posts = self.get_queryset()
+         posts_by_month = []
+@@ -93,4 +104,4 @@
+ 
+ 
+ class ProjectDetail(PostList):
+-    template_name = 'projects.html'
+\ No newline at end of file
++    template_name = 'projects.html'

File themes5.diff

+# HG changeset patch
+# Parent 09185b6645bda4fd018f1cc022e4c94c9cf69b33
+more themes
+
+diff --git a/engineer/static/engineer/themes/dark_rainbow/scripts/highlight.js b/engineer/static/engineer/themes/dark_rainbow/scripts/highlight.js
+--- a/engineer/static/engineer/themes/dark_rainbow/scripts/highlight.js
++++ b/engineer/static/engineer/themes/dark_rainbow/scripts/highlight.js
+@@ -1,5 +1,5 @@
+ $(document).ready(function () {
+-    var header = $('header#top h1');
++    var header = $('header#top h1 a');
+     var headerText = header.text();
+     console.debug(headerText);
+     var headerTextArray = headerText.split(' ');
+diff --git a/engineer/static/engineer/themes/dark_rainbow/stylesheets/dark_rainbow.less b/engineer/static/engineer/themes/dark_rainbow/stylesheets/dark_rainbow.less
+--- a/engineer/static/engineer/themes/dark_rainbow/stylesheets/dark_rainbow.less
++++ b/engineer/static/engineer/themes/dark_rainbow/stylesheets/dark_rainbow.less
+@@ -10,6 +10,8 @@
+ ////////////////////
+ // ELEMENT STYLES //
+ ////////////////////
++.link-color(@green, @orange);
++
+ body {
+     background-color: @bg;
+     border-top: @border;
+@@ -26,7 +28,13 @@
+     font-family: @font-heading;
+ }
+ 
+-.link-color(@green, @orange);
++p, p + div, blockquote {
++    .font-size-default();
++}
++
++ul + p, ol + p {
++    .font-size-default(1, 1);
++}
+ 
+ ul {
+     padding-left: 21px;
+@@ -74,7 +82,9 @@
+     }
+ }
+ 
+-article, .archives {
++article {
++    .bulleted-list();
++
+     h1, h2, h3, h4, h5, h6 {
+         color: @green;
+     }
+@@ -83,6 +93,10 @@
+         .font-size-large(.8, .2);
+     }
+ 
++    header h1 {
++        .font-size-large(.5, .5);
++    }
++
+     h2 {
+         .font-size-medium(.8, .2);
+         //font-weight: bold;
+@@ -94,8 +108,43 @@
+     }
+ }
+ 
+-article, #sidebar div {
+-    .bulleted-list();
++// PYGMENTS / CODE
++.linenodiv {
++    color: @light;
++    font-weight: normal;
++    padding-right: 10px;
++}
++
++pre {
++    border: 1px solid @bg-accent;
++    border-left: 10px solid @bg-accent;
++    padding-left: 5px;
++    margin: 0 0 0 -15px;
++}
++
++pre, code {
++    .font-size-small();
++    font-family: @font-mono;
++    overflow: auto;
++}
++
++p > code {
++    .border-radius(1px);
++    border: 1px dotted @main-blue;
++    padding: 1px 3px;
++    white-space: nowrap;
++    .font-size-small();
++    margin: 0;
++}
++
++div.codehilite {
++    .margin-calc(@line-height-default, 0, 1, -1px, -1px);
++}
++
++div.codehilite, table.codehilitetable {
++    td {
++        padding: 5px;
++    }
+ }
+ 
+ // TOP HEADER
+@@ -129,17 +178,104 @@
+     border-bottom: @border;
+ }
+ 
++// POSTS
++@media only screen and (min-width: 767px) {
++    .post-info {
++        //margin-top: 10px;
++        font-family: museo-slab;
++        text-align: center;
++
++        .post-date {
++            .font-size-default(1, 0);
++            //margin-top: 10px;
++            //margin-bottom: 10px;
++            //padding-bottom: 10px;
++            text-transform: uppercase;
++            @calendar-border: 1px dotted @purple;
++            border-bottom: @calendar-border;
++
++            .day {
++                font-family: kulturista-web, museo-sans, deva-ideal, obliqua;
++                font-style: normal;
++                font-weight: 700;
++                font-size: 72px;
++                line-height: 75px;
++            }
++        }
++    }
++}
++
++@media only screen and (max-width: 767px) {
++    .post-info {
++        .margin-calc(@line-height-default, .5, .5, 0px, 0px);
++        padding-bottom: @line-height-default * .5;
++        border-bottom: 1px dotted @purple;
++
++        .post-date, .post-date div, div.attribution, .tags {
++            display: inline;
++        }
++
++        .post-date {
++            font-family: @font-heading;
++        }
++
++        .tags {
++            float: right;
++        }
++
++        .permalink, .attribution {
++            &:before{
++                content: " • ";
++            }
++        }
++    }
++
++    article {
++        header {
++            border-bottom: 1px dotted @purple;
++            h1 {
++                .font-size-xl(.5, .5);
++                .link-color(@green, @orange);
++            }
++        }
++    }
++}
++
++// SIDEBAR
++
+ #sidebar {
+     nav {
+         .horizontal-list(5px, 0);
+-        li:not(:last-child):after {
+-            content: "/";
+-            padding-left: 5px;
++        li:not(:last-child) {
++            &:after {
++                content: "/";
++                padding-left: 9px;
++            }
+         }
+     }
++
++    div {
++        .bulleted-list();
++    }
+ }
+ 
+ // FOOTER
+ footer {
++    border-top: 3px dotted @purple;
++    padding-top: .5 * @line-height-default;
++    .font-size-small(.5, .5);
+     text-align: center;
+ }
++
++// MISCELLANEOUS
++.permalink {
++    a {
++        font-family: Verdana, sans-serif;
++    }
++    .link-color(@purple, @orange);
++    font-size: 26px;
++}
++
++.attribution {
++    .link-color(@purple, @orange);
++}
+diff --git a/engineer/templates/engineer/themes/dark_rainbow/_nav_primary_base.html b/engineer/templates/engineer/themes/dark_rainbow/_nav_primary_base.html
+--- a/engineer/templates/engineer/themes/dark_rainbow/_nav_primary_base.html
++++ b/engineer/templates/engineer/themes/dark_rainbow/_nav_primary_base.html
+@@ -1,4 +1,4 @@
+-<nav id="primary" class="{% block nav_primary_class %}six columns{% endblock %}">
++<nav id="primary" class="{% block nav_primary_class %}six columns phone-one{% endblock %}">
+     {% block nav_primary_content %}
+     {% endblock %}
+ </nav>
+diff --git a/engineer/templates/engineer/themes/dark_rainbow/base.html b/engineer/templates/engineer/themes/dark_rainbow/base.html
+--- a/engineer/templates/engineer/themes/dark_rainbow/base.html
++++ b/engineer/templates/engineer/themes/dark_rainbow/base.html
+@@ -28,7 +28,7 @@
+ {% block body %}
+     <div class="container">
+         <header id="top" class="row">
+-            <h1 class="{% block top_header_class %}six columns{% endblock %}">
++            <h1 class="{% block top_header_class %}six columns phone-one{% endblock %}">
+                 <a href="{% url 'home' %}">{{ theme.site_title }}</a>
+             </h1>
+             {% block nav_primary %}