Changeset - c929e2fddd46
[Not reviewed]
Merge
0 7 1
Joshua Simmons - 7 years ago 2017-08-16 05:16:16
i@joshuasimmons.name
Merge branch 'master' of github.com:northbaypython/website
5 files changed with 51 insertions and 4 deletions:
0 comments (0 inline, 0 general)
pinaxcon/middleware.py
Show inline comments
 
new file 100644
 
import re
 
import warnings
 

	
 
from django import http
 
from django.conf import settings
 
from django.utils.deprecation import MiddlewareMixin
 

	
 
class UnprependWWWMiddleware(MiddlewareMixin):
 
    """ Unprepends www if necessary. """
 

	
 
    response_redirect_class = http.HttpResponsePermanentRedirect
 

	
 
    def process_request(self, request):
 
        """
 
        Rewrite the URL based on settings.UNPREPEND_WWW
 
        """
 

	
 
        unprepend_www = getattr(settings, "UNPREPEND_WWW", False)
 

	
 
        if not unprepend_www:
 
            return
 

	
 
        # Check for a redirect based on settings.UNPREPEND_WWW
 
        host = request.get_host()
 
        must_unprepend = unprepend_www and host and host.lower().startswith('www.')
 
        wwwless_host = host[4:]
 
        redirect_url = ('%s://%s' % (request.scheme, wwwless_host)) if must_unprepend else ''
 

	
 
        path = request.get_full_path()
 

	
 
        # Return a redirect if necessary
 
        if redirect_url or path != request.get_full_path():
 
            redirect_url += path
 
            return self.response_redirect_class(redirect_url)
pinaxcon/settings.py
Show inline comments
 
import os
 
import dj_database_url
 

	
 

	
 
PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir))
 
PACKAGE_ROOT = os.path.abspath(os.path.dirname(__file__))
 
BASE_DIR = PACKAGE_ROOT
 

	
 
DEBUG = bool(int(os.environ.get("DEBUG", "1")))
 

	
 
DATABASES = {
 
    "default": {
 
        "ENGINE": "django.db.backends.sqlite3",
 
        "NAME": os.path.join(PROJECT_ROOT, "dev.db"),
 
    }
 
}
 

	
 
UNPREPEND_WWW = bool(os.environ.get("DJANGO_UNPREPEND_WWW", False))
 

	
 
# HEROKU: Update database configuration with $DATABASE_URL.
 
import dj_database_url
 
db_from_env = dj_database_url.config()
 
DATABASES['default'].update(db_from_env)
 

	
 
ALLOWED_HOSTS = ["localhost", ".herokuapp.com", ".northbaypython.org"]
 
ALLOWED_HOSTS = [".localhost", ".herokuapp.com", ".northbaypython.org"]
 

	
 
# Local time zone for this installation. Choices can be found here:
 
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
 
# although not all choices may be available on all operating systems.
 
# On Unix systems, a value of None will cause Django to use the same
 
# timezone as the operating system.
 
# If running in a Windows environment this must be set to the same as your
 
# system time zone.
 
TIME_ZONE = os.environ.get("TZ", "America/Los_Angeles")
 

	
 

	
 
# Use SSLRedirectMiddleware
 
SSL_ON = os.environ.get("DJANGO_SSL_ON", True)
 
SSL_ALWAYS = os.environ.get("DJANGO_SSL_ALWAYS", False)
 

	
 
# Language code for this installation. All choices can be found here:
 
# http://www.i18nguy.com/unicode/language-identifiers.html
 
LANGUAGE_CODE = "en-us"
 

	
 
SITE_ID = int(os.environ.get("SITE_ID", 1))
 

	
 
# If you set this to False, Django will make some optimizations so as not
 
# to load the internationalization machinery.
 
USE_I18N = True
 

	
 
# If you set this to False, Django will not format dates, numbers and
 
# calendars according to the current locale.
 
USE_L10N = True
 

	
 
# If you set this to False, Django will not use timezone-aware datetimes.
 
USE_TZ = True
 

	
 
# Absolute filesystem path to the directory that will hold user-uploaded files.
 
# Example: "/home/media/media.lawrence.com/media/"
 
MEDIA_ROOT = os.path.join(PACKAGE_ROOT, "site_media", "media")
 

	
 
# URL that handles the media served from MEDIA_ROOT. Make sure to use a
 
# trailing slash.
 
# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
 
MEDIA_URL = "/site_media/media/"
 

	
 
# Absolute path to the directory static files should be collected to.
 
# Don"t put anything in this directory yourself; store your static files
 
# in apps" "static/" subdirectories and in STATICFILES_DIRS.
 
# Example: "/home/media/media.lawrence.com/static/"
 
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'staticfiles')
 

	
 
# URL prefix for static files.
 
# Example: "http://media.lawrence.com/static/"
 
STATIC_URL = '/static/'
 

	
 
# Additional locations of static files
 
STATICFILES_DIRS = (
 
    os.path.join(PROJECT_ROOT, 'static'),
 
)
 

	
 
# List of finder classes that know how to find static files in
 
# various locations.
 
STATICFILES_FINDERS = [
 
    "django.contrib.staticfiles.finders.FileSystemFinder",
 
    "django.contrib.staticfiles.finders.AppDirectoriesFinder",
 
    "compressor.finders.CompressorFinder",
 
]
 

	
 

	
 
# Amazon S3 setup
 
DEFAULT_FILE_STORAGE = os.environ.get("DJANGO_DEFAULT_FILE_STORAGE", 'django.core.files.storage.FileSystemStorage') # noqa
 
AWS_ACCESS_KEY_ID = os.environ.get("DJANGO_AWS_ACCESS_KEY_ID", None)
 
AWS_SECRET_ACCESS_KEY = os.environ.get("DJANGO_AWS_SECRET_ACCESS_KEY", None)
 
AWS_STORAGE_BUCKET_NAME = os.environ.get("DJANGO_AWS_STORAGE_BUCKET_NAME", None)
 

	
 

	
 
# Make this unique, and don't share it with anybody.
 
SECRET_KEY = "6r&z0i#!k-thu4nv^zzx!f$fbp(&#2i5mq_^%%@ihu_qxxotl_"
 

	
 
TEMPLATES = [
 
    {
 
        "BACKEND": "django.template.backends.django.DjangoTemplates",
 
        "DIRS": [
 
            os.path.join(PACKAGE_ROOT, "templates"),
 
        ],
 
        "APP_DIRS": True,
 
        "OPTIONS": {
 
            "debug": DEBUG,
 
            "context_processors": [
 
                "django.contrib.auth.context_processors.auth",
 
                "django.template.context_processors.debug",
 
                "django.template.context_processors.i18n",
 
                "django.template.context_processors.media",
 
                "django.template.context_processors.static",
 
                "django.template.context_processors.tz",
 
                "django.template.context_processors.request",
 
                "django.contrib.messages.context_processors.messages",
 
                "account.context_processors.account",
 
                "pinax_theme_bootstrap.context_processors.theme",
 
                "symposion.reviews.context_processors.reviews",
 
            ],
 
        },
 
    },
 
]
 

	
 
MIDDLEWARE_CLASSES = [
 
    "django.contrib.sessions.middleware.SessionMiddleware",
 
    "django.middleware.common.CommonMiddleware",
 
    "django.middleware.csrf.CsrfViewMiddleware",
 
    "django.contrib.auth.middleware.AuthenticationMiddleware",
 
    "django.contrib.auth.middleware.SessionAuthenticationMiddleware",
 
    "django.contrib.messages.middleware.MessageMiddleware",
 
    "reversion.middleware.RevisionMiddleware",
 
    "django.middleware.clickjacking.XFrameOptionsMiddleware",
 
    "ssl_redirect.middleware.SSLRedirectMiddleware",
 
    "pinaxcon.middleware.UnprependWWWMiddleware",
 

	
 
]
 

	
 
ROOT_URLCONF = "pinaxcon.urls"
 

	
 
# Python dotted path to the WSGI application used by Django's runserver.
 
WSGI_APPLICATION = "pinaxcon.wsgi.application"
 

	
 
INSTALLED_APPS = [
 
    "django.contrib.admin",
 
    "django.contrib.auth",
 
    "django.contrib.contenttypes",
 
    "django.contrib.messages",
 
    "django.contrib.sessions",
 
    "django.contrib.sites",
 
    "django.contrib.staticfiles",
 

	
 
    # theme
 
    "bootstrapform",
 
    "pinax_theme_bootstrap",
 

	
 
    # external
 
    "account",
 
    "easy_thumbnails",
 
    "taggit",
 
    "reversion",
 
    "metron",
 
    "sitetree",
 
    "pinax.boxes",
 
    "pinax.eventlog",
 
    "pinax.pages",
 
    "markdown_deux",
 

	
 
    # symposion
 
    "symposion",
 
    "symposion.conference",
 
    "symposion.proposals",
 
    "symposion.reviews",
 
    "symposion.schedule",
 
    "symposion.speakers",
 
    "symposion.sponsorship",
 
    "symposion.teams",
 

	
 
    # Registrasion
 
    "registrasion",
 
    "symposion_templates",
 

	
 
    # Registrasion-stipe
 
    "pinax.stripe",
 
    "django_countries",
 
    "registripe",
 

	
 
    #admin - required by registrasion ??
 
    "nested_admin",
 

	
 
    # project
 
    "pinaxcon",
 
    "pinaxcon.proposals",
 
    "pinaxcon.registrasion",
 

	
 
    #testing
 
    "django_nose",
 

	
 
    # stylesheets and js
 
    'compressor',
 
]
 

	
 
# A sample logging configuration. The only tangible logging
 
# performed by this configuration is to send an email to
 
# the site admins on every HTTP 500 error when DEBUG=False.
 
# See http://docs.djangoproject.com/en/dev/topics/logging for
 
# more details on how to customize your logging configuration.
 
LOGGING = {
 
    "version": 1,
 
    "disable_existing_loggers": False,
 
    "filters": {
 
        "require_debug_false": {
 
            "()": "django.utils.log.RequireDebugFalse"
 
        }
 
    },
 
    "handlers": {
 
        "mail_admins": {
 
            "level": "ERROR",
 
            "filters": ["require_debug_false"],
 
            "class": "django.utils.log.AdminEmailHandler"
 
        }
 
    },
 
    "loggers": {
 
        "django.request": {
 
            "handlers": ["mail_admins"],
 
            "level": "ERROR",
 
            "propagate": True,
 
        },
 
    }
 
}
 

	
pinaxcon/templates/static_pages/homepage.html
Show inline comments
...
 
@@ -21,149 +21,149 @@
 

	
 
      <div class="row">
 
        <div class="col-md-6">
 
          <h3>
 
            The Mystic Theatre</br>
 
            Petaluma, California
 
          </h3>
 

	
 
          <h4>
 
            December 2 &amp; 3, 2017<br/>
 
            Talk submissions open August 21
 
          </h4>
 
        </div>
 
        <div class="col-md-4 col-md-offset-2 email-signup-panel">
 
          <div class="panel panel-default">
 
            <div class="panel-heading">
 
              <h2 class="panel-title">Sign up for our low-volume announcements newsletter!</h4>
 
            </div>
 
            <div class="panel-body">
 
              <form
 
                class="form-inline"
 
                action="https://tinyletter.com/northbaypython" method="post" target="popupwindow" onsubmit="window.open('https://tinyletter.com/northbaypython', 'popupwindow', 'scrollbars=yes,width=800,height=600');return true">
 
                <div class="form-group">
 
                  <span>
 
                    <label style="display: none;" for="tlemail">Email address:</label>
 
                  </span>
 
                  <span>
 
                    <input class="form-control" type="email" name="email" id="tlemail" placeholder="E-mail address"/>
 
                  </span>
 
                </div>
 
                <span>
 
                  <input class="btn btn-primary" type="submit" value="Subscribe" />
 
                </span>
 

	
 
                <input type="hidden" value="1" name="embed"/>
 
              </form>
 
            </div>
 
          </div>
 
        </div>
 

	
 
      </div>
 

	
 
    </div>
 

	
 
    <div class="container homepage-block-footer">
 
      <div>
 
        <a class="btn btn-default btn-lg " href="https://twitter.com/northbaypython" title="North Bay Python on Twitter">Twitter</a>
 
        <a class="btn btn-default btn-lg" href="https://facebook.com/northbaypython" title="North Bay Python on Facebook">Facebook</a>
 
      </div>
 
    </div>
 
  </div>
 

	
 
  <div class="jumbotron homepage-block dark">
 
    <div class="homepage-block-bg mystic-background"></div>
 
    <div class="container homepage-block-content">
 
      <h1>Downtown Petaluma</h1>
 

	
 
      <p>North Bay Python's home is Petaluma, a delightfully quaint dairy town, nestled on a river at the edge of California's Wine Country. Here's what you can look forward to:</p>
 

	
 
      <ul>
 
        <li>An historic venue with countless restaurants and coffee shops in walking distance</li>
 
        <li>World-famous craft food and drink producers on your doorstep</li>
 
        <li>Charming small-town hotels, as close as one block away</li>
 
      </ul>
 

	
 
      <p>&hellip; and it's only an hour away from San Francisco (on a good day).</p>
 
    </div>
 

	
 
    <div class="homepage-block-footer full-width">
 
      <div class="container">
 
        <div class="row">
 
          <div class="btn-group col-md-4">
 
            <a class="btn btn-lg btn-primary btn-shadow" href="/about/north-bay-python" title="About North Bay Python">Learn More</a>
 
          </div>
 

	
 
          <div class="col-md-8 text-right photo-attribution">
 
            Image credit: <a href="https://www.instagram.com/p/BU-G5dGAkHt" title="Photo of the Mystic Theatre">Mystic Theatre</a>, &copy; 2017 Christopher Neugebauer (<a href="https://creativecommons.org/licenses/by-sa/2.0/" title="Creative Commons Attribute Share Alike 2.0 Generic License">CC BY-SA 2.0</a>)
 
          </div>
 
        </div>
 
      </div>
 
    </div>
 
  </div>
 

	
 
  <div class="jumbotron homepage-block white">
 
    <div class="container homepage-block-content">
 
      <h1>Sponsors</h1>
 

	
 
      {% load sponsorship_tags %}
 
      {% load thumbnail %}
 

	
 
      {% sponsor_levels as levels %}
 

	
 
      <div class="row sponsor-list">
 
      {% for level in levels %}
 
          {% if level.sponsors %}
 
              {% for sponsor in level.sponsors %}
 
                  <div class="col-md-3">
 
                  <div class="sponsor">
 
                      {% if sponsor.website_logo %}
 
                          <a href="{{ sponsor.external_url }}" title="{{ sponsor.name }}">
 
                              <img src="{% thumbnail sponsor.website_logo '600x360' %}" alt="{{ sponsor.name }}">
 
                          </a>
 
                      {% else %}
 
                          <a href="{{ sponsor.external_url }}" title="{{ sponsor.name }}">{{ sponsor.name }}</a>
 
                      {% endif %}
 
                  </div>
 
              {% endfor %}
 
          {% endif %}
 
      {% endfor %}
 
      </div>
 
    </div>
 

	
 
    <div class="container homepage-block-footer">
 
      <div class="btn-group">
 
        <a class="btn btn-lg btn-primary btn-shadow" href="/sponsors/become-a-sponsor" title="Become a Sponsor">Become a Sponsor</a>
 
      </div>
 
    </div>
 
  </div>
 

	
 
  <div class="jumbotron homepage-block dark">
 
    <div class="homepage-block-bg djangogirls-background"></div>
 
    <div class="container homepage-block-content">
 
      <h1>Inclusion and Diversity</h1>
 

	
 
      <p>North Bay Python is proud to be founded on a commitment to inclusion and diversity. Here's what we commit to:</p>
 

	
 
      <ul>
 
        <li>A strong Code of Conduct and enforcement policy built on the Python Software Foundation's PyCon US policy.</li>
 
        <li>Diversity targets for speakers and attendees.</li>
 
        <li>Financial assistance for speakers who need it.</li>
 
        <li>Low-cost tickets, with fees enthusiastically waived on request.</li>
 
      </ul>
 
    </div>
 

	
 
    <div class="homepage-block-footer full-width">
 
      <div class="container">
 
        <div class="row">
 
          <div class="btn-group col-md-4">
 
            <a class="btn btn-lg btn-primary btn-shadow" href="/code-of-conduct" title"North Bay Python Code of Conduct">Read the Code of Conduct</a>
 
          </div>
 

	
 
          <div class="col-md-8 text-right photo-attribution">
 
            Image credit: <a href="https://www.flickr.com/photos/richard_jones/14638274749" title="Photo from DjangoGirls Brisbane 2014">DjangoGirls Brisbane</a>, &copy; 2014 Richard Jones (<a href="https://creativecommons.org/licenses/by/2.0/" title="Creative Commons Attribute 2.0 Generic License">CC BY 2.0</a>)
 
          </div>
 
        </div>
 
      </div>
 
    </div>
 
  </div>
 

	
 
{% endblock %}
pinaxcon/urls.py
Show inline comments
 
from django.conf import settings
 
from django.conf.urls import include, url
 
from django.conf.urls.static import static
 
from django.contrib.staticfiles.templatetags.staticfiles import static as _static
 
from django.views.generic import TemplateView
 
from django.views.generic import RedirectView
 

	
 

	
 
from django.contrib import admin
 

	
 
import symposion.views
 

	
 

	
 
urlpatterns = [
 
    url(r"^$", TemplateView.as_view(template_name="static_pages/homepage.html"), name="home"),
 

	
 
    # about
 
    url(r"^about/north-bay-python$", TemplateView.as_view(template_name="static_pages/about/north_bay_python.html"), name="about/north-bay-python"),
 
    # TODO add /about/the-mystic
 
    # TODO add /about/petaluma
 
    url(r"^about/team$", TemplateView.as_view(template_name="static_pages/about/team.html"), name="about/team"),
 
    url(r"^about/colophon$", TemplateView.as_view(template_name="static_pages/about/colophon.html"), name="about/colophon"),
 

	
 
    # program
 
    # TODO add /program/sessions
 
    # TODO add /program/events
 
    url(r"^program/call-for-proposals$", TemplateView.as_view(template_name="static_pages/program/call_for_proposals.html"), name="program/call-for-proposals"),
 
    url(r"^program/selection-process$", TemplateView.as_view(template_name="static_pages/program/selection_process.html"), name="program/selection-process"),
 

	
 
    # attend
 
    # TODO add /attend/buy-a-ticket
 
    # TODO add /attend/volunteer
 
    # TODO add /attend/financial-assistance
 
    # TODO add /attend/how-to-pitch-your-manager
 
    # TODO add /attend/how-to-get-here
 
    # TODO add /attend/where-to-stay
 
    url(r"^code-of-conduct$", TemplateView.as_view(template_name="static_pages/code_of_conduct/code_of_conduct.html"), name="code-of-conduct"),
 
    url(r"^code-of-conduct/harassment-incidents$", TemplateView.as_view(template_name="static_pages/code_of_conduct/harassment_procedure_attendee.html"), name="code-of-conduct/harassment-incidents"),
 
    url(r"^code-of-conduct/harassment-staff-procedures$", TemplateView.as_view(template_name="static_pages/code_of_conduct/harassment_procedure_staff.html"), name="code-of-conduct/harassment-staff-procedures"),
 
    url(r"^terms-and-conditions$", TemplateView.as_view(template_name="static_pages/terms_and_conditions.html"), name="terms-and-conditions"),
 

	
 
    # sponsor
 
    url(r"^sponsors/prospectus$", RedirectView.as_view(url="/static/assets/northbaypython_prospectus.pdf"), name="sponsors/prospectus"),
 
    url(r"^northbaypython_prospectus.pdf$", RedirectView.as_view(url="/static/assets/northbaypython_prospectus.pdf"), name="northbaypython_prospectus.pdf"),
 
    url(r"^sponsors/prospectus$", RedirectView.as_view(url=_static("assets/northbaypython_prospectus.pdf")), name="sponsors/prospectus"),
 
    url(r"^northbaypython_prospectus.pdf$", RedirectView.as_view(url=_static("assets/northbaypython_prospectus.pdf")), name="northbaypython_prospectus.pdf"),
 
    url(r"^sponsors/become-a-sponsor$", TemplateView.as_view(template_name="static_pages/sponsors/become_a_sponsor.html"), name="sponsors/become-a-sponsor"),
 

	
 
    # news
 
    url(r"^news$", TemplateView.as_view(template_name="static_pages/news.html"), name="news"),
 

	
 
    # Django, Symposion, and Registrasion URLs
 

	
 
    url(r"^admin/", include(admin.site.urls)),
 

	
 
    url(r"^account/", include("account.urls")),
 

	
 
    url(r"^dashboard/", symposion.views.dashboard, name="dashboard"),
 

	
 
    url(r"^speaker/", include("symposion.speakers.urls")),
 
    url(r"^proposals/", include("symposion.proposals.urls")),
 
    url(r"^sponsors/", include("symposion.sponsorship.urls")),
 
    url(r"^reviews/", include("symposion.reviews.urls")),
 
    url(r"^schedule/", include("symposion.schedule.urls")),
 

	
 
    url(r"^teams/", include("symposion.teams.urls")),
 

	
 
    # Demo payment gateway and related features
 
    url(r"^register/pinaxcon/", include("pinaxcon.registrasion.urls")),
 

	
 
    # Demo payment gateway and related features
 
    url(r"^register/payments/", include("registripe.urls")),
 

	
 
    # Required by registrasion
 
    url(r'^register/', include('registrasion.urls')),
 
    url(r'^nested_admin/', include('nested_admin.urls')),
 

	
 
    # Catch-all MUST go last.
 
    #url(r"^", include("pinax.pages.urls")),
 
]
 

	
 
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
static/scss/custom.scss
Show inline comments
...
 
@@ -19,194 +19,202 @@ strong {
 

	
 
section {
 
  padding: 20px 0px;
 
}
 
.modal form {
 
  margin-bottom: 0px;
 
}
 

	
 
footer {
 
  padding-top: 40px;
 
  padding-bottom: 20px;
 
  text-shadow: 0px 0px 10px white;
 
}
 

	
 
p.login-signup {
 
    margin-top: 20px;
 
}
 

	
 
.feature-columns {
 
    @include make-row();
 

	
 
    > div {
 
        i.fa {
 
            margin-bottom: 0.2em;
 
        }
 
        @include make-sm-column(4);
 
        /*.text-center;
 
        margin: 2em 0;*/
 
    }
 
}
 

	
 
body.reviews.review-list .review-list,
 
body.reviews.voting-status .voting-status,
 
body.reviews.review-results .review-results {
 
    z-index: 2; // Place active items above their siblings for proper border styling
 
    color: $list-group-active-color;
 
    background-color: $list-group-active-bg;
 
    border-color: $list-group-active-border;
 
}
 

	
 
body.reviews.voting-status {
 
    &.positive a.positive,
 
    &.negative a.negative,
 
    &.indifferent a.indifferent,
 
    &.controversial a.controversial,
 
    &.too_few a.too_few {
 
        z-index: 2;
 
        color: #333;
 
        background-color: #e6e6e6;
 
        border-color: #adadad;
 
        outline: 0;
 
        background-image: none;
 
        box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
 
    }
 
}
 

	
 
#accountLogOutForm {
 
    display: none;
 
}
 

	
 
.sponsor-list h3 {
 
    margin-top: 3em;
 
}
 

	
 
.sponsor-list > div {
 
    margin: 10px 0;
 
}
 

	
 
body.auth .panel-heading .panel-title span.pull-right {
 
    margin: 0 auto;
 
}
 

	
 
.home {
 
  margin: 0;
 
  padding-top: $navbar-height - $navbar-padding-vertical - 8;
 
}
 

	
 
.home#content_body {
 
  margin: 0;
 
  padding: 0;
 
}
 

	
 
#content_body {
 
  background-color: $background-filter-transparent;
 
  box-shadow: 0px 0px 2em $background-filter; //, inset 0px -5px 1em rgba(0, 0, 0, 0.8);
 
}
 

	
 
$homepage-block-min-height: 480px;
 

	
 
.homepage-block {
 
  margin-top: 0;
 
  margin-bottom: 0;
 
  min-height: $homepage-block-min-height;
 
  position: relative;
 
  box-shadow: $box-shadow;
 
  z-index: 3;
 

	
 
  .sponsor {
 
    @include make-xs-column(6);
 
    @include make-sm-column(4);
 
    @include make-md-column(3);
 
    max-width: 600px;
 
  }
 
}
 

	
 

	
 
.homepage-block-content {
 
  min-height: ($homepage-block-min-height - 80px);
 
}
 

	
 
/* ??? */
 
.homepage-block-footer {
 

	
 
}
 

	
 
.homepage-block.light {
 
  background-color: $background-filter;
 
  z-index: 2;
 
}
 

	
 
.homepage-block.white {
 
  background-color: white;
 
  z-index: 1;
 
}
 

	
 
.homepage-block-bg {
 
  top: 0;
 
  bottom: 0;
 
  width: 100%;
 
  height: 100%;
 
  position: absolute;
 
  background-size: cover;
 
  background-position: center;
 
  opacity: 0.3;
 
  background-blend-mode: multiply;
 
  z-index: -9999;
 
  box-shadow: $box-shadow;
 
}
 

	
 
.homepage-block.dark {
 
  background: $gray-base;
 
  color: white;
 
  text-shadow: 1px 1px $gray-dark;
 

	
 
  a:not(.btn) {
 
    color: lighten($brand-primary, 20%);
 

	
 
    &:hover,
 
    &:focus,
 
    &:active {
 
      color: lighten($brand-primary, 15%);
 
    }
 
  }
 
}
 

	
 
.navbar {
 
  box-shadow: $box-shadow;
 
}
 

	
 
.navbar ul.navbar-nav > li > a,
 
.navbar-header a.navbar-brand {
 
  &:active,
 
  &:focus,
 
  &:hover {
 
    background-color: #004303;
 
  }
 
}
 

	
 
.tight-headings {
 

	
 
  h1, h2, h3, h4, h5, h6 {
 
    margin: 0.05em;
 
  }
 

	
 
}
 

	
 
.btn-shadow {
 
  box-shadow: 1px 1px 5px $gray-dark;
 
}
 

	
 
.hills {
 
  background-size: 100%;
 
  background-position: bottom;
 
  background-repeat: no-repeat;
 
  width: 50%;
 
  height: 100%;
 
  position: absolute;
 
  bottom: 0;
 
  right: 0;
 
  z-index: -9999;
 

	
 
  &.main {
 
    background-image: url("../images/hills.svg");
 
  }
 

	
 
  &.footer {
 
    background-image: url("../images/hills-footer.svg");
 
  }
 
}
 

	
 
.circle {
 
  position: relative;
0 comments (0 inline, 0 general)