diff --git a/.gitignore b/.gitignore index 4a693c5d3..dbc9545bc 100644 --- a/.gitignore +++ b/.gitignore @@ -9,8 +9,10 @@ ENV .DS_Store build deploy/last-update -logs/* -celerybeat.pid celerybeat-schedule .gitignore~ static/scss/*.css.map +.vagrant +venv +*.retry +*.pid diff --git a/README.md b/README.md index 5eaf79d25..491cf7815 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,31 @@ The partitioning between these modules is not as clean as would be ideal. `payme regluit was originally developed on Django 1.3 (python 2.7) and currently runs on Django 1.8. -Develop +Development (Vagrant + Virtualbox) +------- + +The recommended method for local development is to create a virtual machine with [Vagrant](https://www.vagrantup.com/) and [Virtualbox](https://www.virtualbox.org/wiki/Downloads). +With this method, the only requirements on the host machine are `virtualbox` and `vagrant`. +Vagrant will use the `ansible-local` provisioner, therefore installing python and ansible on the host machine is not necessary. + +__Instructions for Ubuntu 16:__ +1. Install virtualbox: `sudo apt-get install virtualbox` +2. Install vagrant: `sudo apt-get install vagrant` +3. Clone the `EbookFoundation/regluit` repository. +4. Navigate to the base directory of the cloned repo (where `Vagrantfile` is located). +5. Run `vagrant up` to create the VM, install dependencies, and start necessary services. + * Note: This step may take up to 15 minutes to complete. +6. Once the VM has been created, run `vagrant ssh` to log in to the virtual machine you just created. If provisioning was successful, you should see a success message upon login. + * If virtualenv doesn't activate upon login, you can do it manually by running `cd /opt/regluit && source venv/bin/activate` +7. Within the VM, run `./manage.py runserver 0.0.0.0:8000` to start the Django development server. +8. On your host machine, open your web browser of choice and navigate to `http://127.0.0.1:8000` + +__Instructions for other platforms (Windows/OSX):__ +* Steps are essentially the same, except for the installation of Vagrant and Virtualbox. Refer to each package's documentation for specific installation instructions. + +_NOTE:_ If running Windows on your host machine, ensure you are running `vagrant up` from an elevated command prompt, e.g. right click on Command Prompt -> Run As Administrator. + +Development (Host Machine) ------- Here are some instructions for setting up regluit for development on diff --git a/Vagrantfile b/Vagrantfile new file mode 100644 index 000000000..0ad9cdbc6 --- /dev/null +++ b/Vagrantfile @@ -0,0 +1,56 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +# All Vagrant configuration is done below. The "2" in Vagrant.configure +# configures the configuration version (we support older styles for +# backwards compatibility). Please don't change it unless you know what +# you're doing. +Vagrant.configure("2") do |config| + # The most common configuration options are documented and commented below. + # For a complete reference, please see the online documentation at + # https://docs.vagrantup.com. + # Every Vagrant development environment requires a box. You can search for + # boxes at https://vagrantcloud.com/search. + config.vm.box = "ubuntu/xenial64" + + # Disable automatic box update checking. If you disable this, then + # boxes will only be checked for updates when the user runs + # `vagrant box outdated`. This is not recommended. + config.vm.box_check_update = false + + # Setup specific for local machine + config.vm.define "regluit-local", primary: true do |local| + # Create a private network + local.vm.network "private_network", type: "dhcp" + local.vm.hostname = "regluit-local" + + # VirtuaLBox provider settings for running locally with Oracle VirtualBox + # --uartmode1 disconnected is necessary to disable serial interface, which + # is known to cause issues with Ubuntu 16 VM's + local.vm.provider "virtualbox" do |vb| + vb.name = "regluit-local" + vb.memory = 1024 + vb.cpus = 2 + vb.customize [ "modifyvm", :id, "--uartmode1", "disconnected" ] + end + + end + + config.vm.synced_folder ".", "/vagrant", disabled: true + config.vm.synced_folder ".", "/opt/regluit" + + config.vm.network "forwarded_port", guest: 8000, host: 8000 + + # Provision node with Ansible running on the Vagrant host + # This requires you have Ansible installed locally + # Vagrant autogenerates an ansible inventory file to use + config.vm.provision "ansible_local" do |ansible| + ansible.playbook = "/opt/regluit/provisioning/setup-regluit.yml" + ansible.provisioning_path = "/opt/regluit" + ansible.verbose = true + ansible.install = true + end + + config.vm.post_up_message = "Successfully created regluit-local VM. Run 'vagrant ssh' to log in and start the development server." + +end diff --git a/core/models/__init__.py b/core/models/__init__.py index 37917b8b4..eedab01d9 100755 --- a/core/models/__init__.py +++ b/core/models/__init__.py @@ -45,7 +45,7 @@ TRANSACTION_STATUS_FAILED, TRANSACTION_STATUS_INCOMPLETE ) -from regluit.utils import crypto +from regluit.utils import encryption as crypto from regluit.utils.localdatetime import now, date_today from regluit.core.parameters import ( @@ -244,8 +244,8 @@ def get_archive(self): return r except IOError: logger.error(u'could not open {}'.format(self.url)) - - + + def ebook(self): return self.mock_ebook(self) @@ -364,7 +364,7 @@ def ahead(self): STATUS_CHOICES = ( ('INITIALIZED','INITIALIZED'), - ('ACTIVE', 'ACTIVE'), + ('ACTIVE', 'ACTIVE'), ('SUSPENDED', 'SUSPENDED'), ('WITHDRAWN', 'WITHDRAWN'), ('SUCCESSFUL', 'SUCCESSFUL'), @@ -388,7 +388,7 @@ class Campaign(models.Model): work = models.ForeignKey("Work", related_name="campaigns", null=False) managers = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name="campaigns", null=False) # status: INITIALIZED, ACTIVE, SUSPENDED, WITHDRAWN, SUCCESSFUL, UNSUCCESSFUL - status = models.CharField( max_length=15, null=True, blank=False, default="INITIALIZED", + status = models.CharField( max_length=15, null=True, blank=False, default="INITIALIZED", db_index=True, choices=STATUS_CHOICES) type = models.PositiveSmallIntegerField(null=False, default=REWARDS, choices=((REWARDS, 'Pledge-to-unglue campaign'), @@ -962,7 +962,7 @@ def add_ask_to_ebfs(self, position=0): new_epub_ebf.save() new_epub_ebf.version = version new_ebfs.append(new_epub_ebf) - + # now make the mobi file new_mobi_ebf = EbookFile.objects.create(edition=edition, format='mobi', asking=True) new_mobi_ebf.file.save(path_for_file('ebf', None), ContentFile(mobi.convert_to_mobi(new_epub_ebf.file.url))) @@ -992,7 +992,7 @@ def add_ask_to_ebfs(self, position=0): old_ebf.ebook.deactivate() old_ebf.file.delete() old_ebf.delete() - + for non_asking in self.work.ebookfiles().filter(asking=False, ebook__active=True): non_asking.ebook.deactivate() @@ -1003,7 +1003,7 @@ def revert_asks(self): format_versions = [] for ebf in EbookFile.objects.filter(edition__work=self.work).exclude(file='').exclude(ebook=None).order_by('-created'): format_version = '{}_{}'.format(ebf.format, ebf.ebook.version_label) - if ebf.asking: + if ebf.asking: ebf.ebook.deactivate() elif format_version in format_versions: # this ebook file has the wrong "asking" @@ -1157,7 +1157,7 @@ class UserProfile(models.Model): librarything_id = models.CharField(max_length=31, blank=True) badges = models.ManyToManyField('Badge', related_name='holders', blank=True) kindle_email = models.EmailField(max_length=254, blank=True) - + # keep track of work the user adds works = models.ManyToManyField('Work', related_name='contributors', blank=True) diff --git a/provisioning/host_vars/regluit-local b/provisioning/host_vars/regluit-local new file mode 100644 index 000000000..d3f5a12fa --- /dev/null +++ b/provisioning/host_vars/regluit-local @@ -0,0 +1 @@ + diff --git a/provisioning/roles/regluit_common/defaults/main.yml b/provisioning/roles/regluit_common/defaults/main.yml new file mode 100644 index 000000000..5821bcfb0 --- /dev/null +++ b/provisioning/roles/regluit_common/defaults/main.yml @@ -0,0 +1,21 @@ +project_path: "/opt/regluit" +django_settings_module: "regluit.settings.me" +virtualenv_name: "venv" + +# MySQL +mysql_db_name: "regluit" +mysql_db_user: "regluit" +mysql_db_pass: "password123" +mysql_db_host: "localhost" +mysql_db_port: 3306 + +# Task Broker +broker_transport: "redis" +broker_host: "localhost" +broker_port: 6379 +broker_vhost: "0" + +# Common.py defaults +boxstream_api_key: "012345678901234567890123456789" +boxstream_api_user: "user" +dropbox_key: "012345678901234" diff --git a/provisioning/roles/regluit_common/files/celerybeat b/provisioning/roles/regluit_common/files/celerybeat new file mode 100644 index 000000000..34b9ad6a4 --- /dev/null +++ b/provisioning/roles/regluit_common/files/celerybeat @@ -0,0 +1,154 @@ +#!/bin/bash +# ========================================================= +# celerybeat - Starts the Celery periodic task scheduler. +# ========================================================= +# +# :Usage: /etc/init.d/celerybeat {start|stop|force-reload|restart|try-restart|status} +# :Configuration file: /etc/default/celerybeat or /etc/default/celeryd +# +# See http://docs.celeryq.org/en/latest/cookbook/daemonizing.html#init-script-celerybeat +# This file is copied from https://github.com/ask/celery/blob/2.4/contrib/generic-init.d/celerybeat + +### BEGIN INIT INFO +# Provides: celerybeat +# Required-Start: $network $local_fs $remote_fs +# Required-Stop: $network $local_fs $remote_fs +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: celery periodic task scheduler +### END INIT INFO + +# Cannot use set -e/bash -e since the kill -0 command will abort +# abnormally in the absence of a valid process ID. +#set -e + +DEFAULT_PID_FILE="/var/run/celerybeat.pid" +DEFAULT_LOG_FILE="/var/log/celerybeat.log" +DEFAULT_LOG_LEVEL="INFO" +DEFAULT_CELERYBEAT="celerybeat" + +# /etc/init.d/ssh: start and stop the celery task worker daemon. + +if test -f /etc/default/celeryd; then + . /etc/default/celeryd +fi + +if test -f /etc/default/celerybeat; then + . /etc/default/celerybeat +fi + +CELERYBEAT=${CELERYBEAT:-$DEFAULT_CELERYBEAT} +CELERYBEAT_PID_FILE=${CELERYBEAT_PID_FILE:-${CELERYBEAT_PIDFILE:-$DEFAULT_PID_FILE}} +CELERYBEAT_LOG_FILE=${CELERYBEAT_LOG_FILE:-${CELERYBEAT_LOGFILE:-$DEFAULT_LOG_FILE}} +CELERYBEAT_LOG_LEVEL=${CELERYBEAT_LOG_LEVEL:-${CELERYBEAT_LOGLEVEL:-$DEFAULT_LOG_LEVEL}} + +export CELERY_LOADER + +CELERYBEAT_OPTS="$CELERYBEAT_OPTS -f $CELERYBEAT_LOG_FILE -l $CELERYBEAT_LOG_LEVEL" + +if [ -n "$2" ]; then + CELERYBEAT_OPTS="$CELERYBEAT_OPTS $2" +fi + +CELERYBEAT_LOG_DIR=`dirname $CELERYBEAT_LOG_FILE` +CELERYBEAT_PID_DIR=`dirname $CELERYBEAT_PID_FILE` +if [ ! -d "$CELERYBEAT_LOG_DIR" ]; then + mkdir -p $CELERYBEAT_LOG_DIR +fi +if [ ! -d "$CELERYBEAT_PID_DIR" ]; then + mkdir -p $CELERYBEAT_PID_DIR +fi + +# Extra start-stop-daemon options, like user/group. +if [ -n "$CELERYBEAT_USER" ]; then + DAEMON_OPTS="$DAEMON_OPTS --uid $CELERYBEAT_USER" + chown "$CELERYBEAT_USER" $CELERYBEAT_LOG_DIR $CELERYBEAT_PID_DIR +fi +if [ -n "$CELERYBEAT_GROUP" ]; then + DAEMON_OPTS="$DAEMON_OPTS --gid $CELERYBEAT_GROUP" + chgrp "$CELERYBEAT_GROUP" $CELERYBEAT_LOG_DIR $CELERYBEAT_PID_DIR +fi + +CELERYBEAT_CHDIR=${CELERYBEAT_CHDIR:-$CELERYD_CHDIR} +if [ -n "$CELERYBEAT_CHDIR" ]; then + DAEMON_OPTS="$DAEMON_OPTS --workdir $CELERYBEAT_CHDIR" +fi + + +export PATH="${PATH:+$PATH:}/usr/sbin:/sbin" + +check_dev_null() { + if [ ! -c /dev/null ]; then + echo "/dev/null is not a character device!" + exit 1 + fi +} + +wait_pid () { + pid=$1 + forever=1 + i=0 + while [ $forever -gt 0 ]; do + kill -0 $pid 1>/dev/null 2>&1 + if [ $? -eq 1 ]; then + echo "OK" + forever=0 + else + kill -TERM "$pid" + i=$((i + 1)) + if [ $i -gt 60 ]; then + echo "ERROR" + echo "Timed out while stopping (30s)" + forever=0 + else + sleep 0.5 + fi + fi + done +} + + +stop_beat () { + echo -n "Stopping celerybeat... " + if [ -f "$CELERYBEAT_PID_FILE" ]; then + wait_pid $(cat "$CELERYBEAT_PID_FILE") + else + echo "NOT RUNNING" + fi +} + +start_beat () { + echo "Starting celerybeat..." + if [ -n "$VIRTUALENV" ]; then + source $VIRTUALENV/bin/activate + fi + $CELERYBEAT $CELERYBEAT_OPTS $DAEMON_OPTS --detach \ + --pidfile="$CELERYBEAT_PID_FILE" +} + + + +case "$1" in + start) + check_dev_null + start_beat + ;; + stop) + stop_beat + ;; + reload|force-reload) + echo "Use start+stop" + ;; + restart) + echo "Restarting celery periodic task scheduler" + stop_beat + check_dev_null + start_beat + ;; + + *) + echo "Usage: /etc/init.d/celerybeat {start|stop|restart}" + exit 1 +esac + +exit 0 \ No newline at end of file diff --git a/provisioning/roles/regluit_common/files/celeryd b/provisioning/roles/regluit_common/files/celeryd new file mode 100644 index 000000000..12ff8445e --- /dev/null +++ b/provisioning/roles/regluit_common/files/celeryd @@ -0,0 +1,217 @@ +#!/bin/bash +# ============================================ +# celeryd - Starts the Celery worker daemon. +# ============================================ +# +# :Usage: /etc/init.d/celeryd {start|stop|force-reload|restart|try-restart|status} +# +# :Configuration file: /etc/default/celeryd +# +# To configure celeryd you probably need to tell it where to chdir. +# +# EXAMPLE CONFIGURATION +# ===================== +# +# this is an example configuration for a Python project: +# +# /etc/default/celeryd: +# +# # List of nodes to start +# CELERYD_NODES="worker1 worker2 worker3"k +# # ... can also be a number of workers +# CELERYD_NODES=3 +# +# # Where to chdir at start. +# CELERYD_CHDIR="/opt/Myproject/" +# +# # Extra arguments to celeryd +# CELERYD_OPTS="--time-limit=300" +# +# # Name of the celery config module.# +# CELERY_CONFIG_MODULE="celeryconfig" +# +# EXAMPLE DJANGO CONFIGURATION +# ============================ +# +# # Where the Django project is. +# CELERYD_CHDIR="/opt/Project/" +# +# # Name of the projects settings module. +# export DJANGO_SETTINGS_MODULE="settings" +# +# # Path to celeryd +# CELERYD="/opt/Project/manage.py celeryd" +# +# AVAILABLE OPTIONS +# ================= +# +# * CELERYD_NODES +# +# A space separated list of nodes, or a number describing the number of +# nodes, to start +# +# * CELERYD_OPTS +# Additional arguments to celeryd-multi, see `celeryd-multi --help` +# and `celeryd --help` for help. +# +# * CELERYD_CHDIR +# Path to chdir at start. Default is to stay in the current directory. +# +# * CELERYD_PIDFILE +# Full path to the pidfile. Default is /var/run/celeryd.pid. +# +# * CELERYD_LOGFILE +# Full path to the celeryd logfile. Default is /var/log/celeryd.log +# +# * CELERYD_LOG_LEVEL +# Log level to use for celeryd. Default is INFO. +# +# * CELERYD +# Path to the celeryd program. Default is `celeryd`. +# You can point this to an virtualenv, or even use manage.py for django. +# +# * CELERYD_USER +# User to run celeryd as. Default is current user. +# +# * CELERYD_GROUP +# Group to run celeryd as. Default is current user. + +# VARIABLE EXPANSION +# ================== +# +# The following abbreviations will be expanded +# +# * %n -> node name +# * %h -> host name + + +### BEGIN INIT INFO +# Provides: celeryd +# Required-Start: $network $local_fs $remote_fs +# Required-Stop: $network $local_fs $remote_fs +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: celery task worker daemon +### END INIT INFO + +#set -e + +DEFAULT_PID_FILE="/var/run/celeryd@%n.pid" +DEFAULT_LOG_FILE="/var/log/celeryd@%n.log" +DEFAULT_LOG_LEVEL="INFO" +DEFAULT_NODES="celery" +DEFAULT_CELERYD="-m celery.bin.celeryd_detach" + +# /etc/init.d/celeryd: start and stop the celery task worker daemon. + +CELERY_DEFAULTS=${CELERY_DEFAULTS:-"/etc/default/celeryd"} + +test -f "$CELERY_DEFAULTS" && . "$CELERY_DEFAULTS" +if [ -f "/etc/default/celeryd" ]; then + . /etc/default/celeryd +fi + +if [ -f $VIRTUALENV_ACTIVATE ]; then + echo "activating virtualenv $VIRTUALENV_ACTIVATE" + source "$VIRTUALENV_ACTIVATE" +fi + +CELERYD_PID_FILE=${CELERYD_PID_FILE:-${CELERYD_PIDFILE:-$DEFAULT_PID_FILE}} +CELERYD_LOG_FILE=${CELERYD_LOG_FILE:-${CELERYD_LOGFILE:-$DEFAULT_LOG_FILE}} +CELERYD_LOG_LEVEL=${CELERYD_LOG_LEVEL:-${CELERYD_LOGLEVEL:-$DEFAULT_LOG_LEVEL}} +CELERYD_MULTI=${CELERYD_MULTI:-"celeryd-multi"} +CELERYD=${CELERYD:-$DEFAULT_CELERYD} +CELERYD_NODES=${CELERYD_NODES:-$DEFAULT_NODES} + +export CELERY_LOADER + +if [ -n "$2" ]; then + CELERYD_OPTS="$CELERYD_OPTS $2" +fi + +# Extra start-stop-daemon options, like user/group. +if [ -n "$CELERYD_USER" ]; then + DAEMON_OPTS="$DAEMON_OPTS --uid=$CELERYD_USER" +fi +if [ -n "$CELERYD_GROUP" ]; then + DAEMON_OPTS="$DAEMON_OPTS --gid=$CELERYD_GROUP" +fi + +if [ -n "$CELERYD_CHDIR" ]; then + DAEMON_OPTS="$DAEMON_OPTS --workdir=\"$CELERYD_CHDIR\"" +fi + + +check_dev_null() { + if [ ! -c /dev/null ]; then + echo "/dev/null is not a character device!" + exit 1 + fi +} + + +export PATH="${PATH:+$PATH:}/usr/sbin:/sbin" + + +stop_workers () { + $CELERYD_MULTI stop $CELERYD_NODES --pidfile="$CELERYD_PID_FILE" +} + + +start_workers () { + $CELERYD_MULTI start $CELERYD_NODES $DAEMON_OPTS \ + --pidfile="$CELERYD_PID_FILE" \ + --logfile="$CELERYD_LOG_FILE" \ + --loglevel="$CELERYD_LOG_LEVEL" \ + --cmd="$CELERYD" \ + $CELERYD_OPTS +} + + +restart_workers () { + $CELERYD_MULTI restart $CELERYD_NODES $DAEMON_OPTS \ + --pidfile="$CELERYD_PID_FILE" \ + --logfile="$CELERYD_LOG_FILE" \ + --loglevel="$CELERYD_LOG_LEVEL" \ + --cmd="$CELERYD" \ + $CELERYD_OPTS +} + + + +case "$1" in + start) + check_dev_null + start_workers + ;; + + stop) + check_dev_null + stop_workers + ;; + + reload|force-reload) + echo "Use restart" + ;; + + status) + celeryctl status + ;; + + restart) + check_dev_null + restart_workers + ;; + + try-restart) + check_dev_null + restart_workers + ;; + + *) + echo "Usage: /etc/init.d/celeryd {start|stop|restart|try-restart|kill}" + exit 1 + ;; +esac + +exit 0 diff --git a/provisioning/roles/regluit_common/tasks/celery.yml b/provisioning/roles/regluit_common/tasks/celery.yml new file mode 100644 index 000000000..1789b0fb1 --- /dev/null +++ b/provisioning/roles/regluit_common/tasks/celery.yml @@ -0,0 +1,37 @@ +--- +# Tasks for Celeryd and Celerybeat processes +- name: Create /var/log/celery + become: true + file: + path: "/var/log/celery" + state: directory + #owner: celery + #group: celery + mode: 0775 + +- name: Create /var/run/celery + become: true + file: + path: "/var/run/celery" + state: directory + #owner: celery + #group: celery + mode: 0775 + +- name: Copy celery init.d scripts + become: true + copy: + src: "{{ item }}" + dest: "/etc/init.d/{{ item }}" + with_items: + - 'celeryd' + - 'celerybeat' + +- name: Copy celery config files + become: true + template: + src: "celery/{{ item }}.j2" + dest: "/etc/default/{{ item }}" + with_items: + - 'celeryd' + - 'celerybeat' diff --git a/provisioning/roles/regluit_common/tasks/main.yml b/provisioning/roles/regluit_common/tasks/main.yml new file mode 100644 index 000000000..0f93cd0d1 --- /dev/null +++ b/provisioning/roles/regluit_common/tasks/main.yml @@ -0,0 +1,85 @@ +--- +# Need to install python2.7 and pip first so Ansible will function +# This is due to Ubuntu 16 shipping with Python3 by default +- name: Install python2.7 and pip + become: true + raw: bash -c "apt -qqy update && apt install -qqy python2.7-dev python-pip" + register: output + changed_when: output.stdout != "" + +- name: Gathering Facts + setup: + +- name: Install base regluit dependencies + become: true + apt: + name: "{{ item }}" + update_cache: true + state: present + with_items: + - 'git' + - 'python-setuptools' + - 'python-lxml' + - 'build-essential' + - 'libssl-dev' + - 'libffi-dev' + - 'libxml2-dev' + - 'libxslt-dev' + - 'mysql-server' + - 'mysql-client' + - 'libmysqlclient-dev' + - 'python-mysqldb' + +- name: Install virtualenv + pip: + name: "virtualenv" + state: present + +- name: Install python packages to virtualenv + pip: + requirements: "{{ project_path }}/requirements_versioned.pip" + state: present + virtualenv: "{{ project_path }}/venv" + +- name: Add project to PYTHONPATH of virtualenv + template: + src: "{{ item }}.j2" + dest: "{{ project_path }}/venv/lib/python2.7/site-packages/{{ item }}" + with_items: + - 'regluit.pth' + - 'opt.pth' + +- name: Create keys directory + file: + path: "{{ project_path}}/settings/keys" + state: directory + +- name: Copy keys files + copy: + src: "{{ project_path }}/settings/dummy/__init__.py" + dest: "{{ project_path }}/settings/keys/__init__.py" + remote_src: yes + +- name: Copy django settings template + template: + src: me.py.j2 + dest: "{{ project_path }}/settings/me.py" + +- name: Copy key templates to keys directory + template: + src: "{{ item }}.j2" + dest: "{{ project_path }}/settings/keys/{{ item }}" + with_items: + - 'common.py' + - 'host.py' + +- name: MySQL setup + become: true + import_tasks: mysql.yml + +- name: Redis setup + become: true + import_tasks: redis.yml + +# - name: Celery setup +# import_tasks: celery.yml diff --git a/provisioning/roles/regluit_common/tasks/mysql.yml b/provisioning/roles/regluit_common/tasks/mysql.yml new file mode 100644 index 000000000..8c1194e7d --- /dev/null +++ b/provisioning/roles/regluit_common/tasks/mysql.yml @@ -0,0 +1,12 @@ +--- +- name: Create MySQL database + mysql_db: + name: "{{ mysql_db_name }}" + state: present + +- name: Create MySQL user + mysql_user: + name: "{{ mysql_db_user }}" + password: "{{ mysql_db_pass }}" + priv: '*.*:ALL' + state: present diff --git a/provisioning/roles/regluit_common/tasks/redis.yml b/provisioning/roles/regluit_common/tasks/redis.yml new file mode 100644 index 000000000..0b6b61ac2 --- /dev/null +++ b/provisioning/roles/regluit_common/tasks/redis.yml @@ -0,0 +1,11 @@ +--- +- name: Install Redis + apt: + name: "redis-server" + state: present + +- name: Ensure Redis is started + service: + name: "redis-server" + state: started + enabled: yes diff --git a/provisioning/roles/regluit_common/templates/celery/celerybeat.j2 b/provisioning/roles/regluit_common/templates/celery/celerybeat.j2 new file mode 100644 index 000000000..d459ad8b7 --- /dev/null +++ b/provisioning/roles/regluit_common/templates/celery/celerybeat.j2 @@ -0,0 +1,35 @@ +# http://docs.celeryproject.org/en/latest/cookbook/daemonizing.html#generic-initd-celerybeat-example +# to be placed at /etc/defaults/celerybeat + +# Where to chdir at start. +CELERYBEAT_CHDIR="{{ project_path }}t/" + +# Extra arguments to celerybeat +#CELERYBEAT_OPTS="--schedule=/var/run/celerybeat-schedule" + +# Name of the celery config module.# +CELERY_CONFIG_MODULE="celeryconfig" + +# Name of the projects settings module. +export DJANGO_SETTINGS_MODULE="{{ django_settings_module }}" + +# Path to celerybeat +CELERYBEAT="{{ project_path }}/{{ virtualenv_name }}/bin/django-admin.py celerybeat" + +# virtualenv to use +VIRTUALENV="{{ project_path }}/{{ virtualenv_name }}" + +#Full path to the PID file. Default is /var/run/celeryd.pid +CELERYBEAT_PIDFILE="/var/log/celerybeat/celerybeat.pid" + +#Full path to the celeryd log file. Default is /var/log/celeryd.log +CELERYBEAT_LOGFILE="/var/log/celerybeat/celerybeat.log" + +#Log level to use for celeryd. Default is INFO. +CELERYBEAT_LOG_LEVEL="INFO" + +#User to run celeryd as. Default is current user. +#CELERYBEAT_USER + +#Group to run celeryd as. Default is current user. +#CELERYBEAT_GROUP diff --git a/provisioning/roles/regluit_common/templates/celery/celeryd.j2 b/provisioning/roles/regluit_common/templates/celery/celeryd.j2 new file mode 100644 index 000000000..c918efb4a --- /dev/null +++ b/provisioning/roles/regluit_common/templates/celery/celeryd.j2 @@ -0,0 +1,9 @@ +CELERYD_NODES="w1" +CELERYD_CHDIR="{{ project_path }}/" +CELERYD_LOG_FILE="/var/log/celery/%n.log" +CELERYD_PID_FILE="/var/log/celery/%n.pid" +CELERYD="{{ project_path }}/{{ virtualenv_name }}/bin/django-admin.py celeryd" +CELERYD_MULTI="{{ project_path }}/{{ virtualenv_name }}/bin/django-admin.py celeryd_multi" + +VIRTUALENV_ACTIVATE="{{ project_path }}/{{ virtualenv_name }}/bin/activate" +export DJANGO_SETTINGS_MODULE="{{ django_settings_module }}" diff --git a/provisioning/roles/regluit_common/templates/common.py.j2 b/provisioning/roles/regluit_common/templates/common.py.j2 new file mode 100644 index 000000000..d835f1c8f --- /dev/null +++ b/provisioning/roles/regluit_common/templates/common.py.j2 @@ -0,0 +1,13 @@ +import os + +# all the COMMON_KEYS +# copy this file to settings/keys/ and replace the dummy values with real ones +BOOXTREAM_API_KEY = os.environ.get('BOOXTREAM_API_KEY', '{{ boxstream_api_key }}') +BOOXTREAM_API_USER = os.environ.get('BOOXTREAM_API_USER', '{{ boxstream_api_user }}') +DROPBOX_KEY = os.environ.get('DROPBOX_KEY', '{{ dropbox_key }}') +GITHUB_PUBLIC_TOKEN = os.environ.get('GITHUB_PUBLIC_TOKEN', None) # 40 chars; null has lower limit +MAILCHIMP_API_KEY = os.environ.get('MAILCHIMP_API_KEY', '-us2') # [32chars]-xx# +MAILCHIMP_NEWS_ID = os.environ.get('MAILCHIMP_NEWS_ID', '0123456789') +MOBIGEN_PASSWORD = os.environ.get('MOBIGEN_PASSWORD', '012345678901234') +MOBIGEN_URL = os.environ.get('MOBIGEN_URL', '') # https://host/mobigen +MOBIGEN_USER_ID = os.environ.get('MOBIGEN_USER_ID', 'user') diff --git a/provisioning/roles/regluit_common/templates/host.py.j2 b/provisioning/roles/regluit_common/templates/host.py.j2 new file mode 100644 index 000000000..9819dc7f9 --- /dev/null +++ b/provisioning/roles/regluit_common/templates/host.py.j2 @@ -0,0 +1,47 @@ +# host.py +# copy this file to settings/keys/ and replace the dummy values with real ones +# or generate it from the ansible vault +import os + +# you can use this to generate a key: http://www.miniwebtool.com/django-secret-key-generator/ +SECRET_KEY = os.environ.get("SECRET_KEY", '01234567890123456789012345678901234567890123456789') + +# you'll need to register a GoogleBooks API key +# https://code.google.com/apis/console +GOOGLE_BOOKS_API_KEY = os.environ.get("GOOGLE_BOOKS_API_KEY", "012345678901234567890123456789012345678") + +# +GOODREADS_API_KEY = os.environ.get("GOODREADS_API_KEY", "01234567890123456789") +GOODREADS_API_SECRET = os.environ.get("GOODREADS_API_SECRET", None) #43 chars + +# Amazon SES +# create with https://console.aws.amazon.com/ses/home?region=us-east-1#smtp-settings: +EMAIL_HOST_USER = os.environ.get("EMAIL_HOST_USER", '01234567890123456789') +EMAIL_HOST_PASSWORD = os.environ.get("EMAIL_HOST_PASSWORD", '01234567890123456789012345678901234567890123') + +# twitter auth +# you'll need to create a new Twitter application to fill in these blanks +# https://dev.twitter.com/apps/new +SOCIAL_AUTH_TWITTER_KEY = os.environ.get("SOCIAL_AUTH_TWITTER_KEY", '0123456789012345678901234') +SOCIAL_AUTH_TWITTER_SECRET = os.environ.get("SOCIAL_AUTH_TWITTER_SECRET", '01234567890123456789012345678901234567890123456789') + +# support@icontact.nl +BOOXTREAM_API_KEY = os.environ.get("BOOXTREAM_API_KEY", None) # 30 chars +BOOXTREAM_API_USER = os.environ.get("BOOXTREAM_API_USER", 'user') + +# you'll need to create a new Facebook application to fill in these blanks +# https://developers.facebook.com/apps/ +SOCIAL_AUTH_FACEBOOK_KEY = os.environ.get("SOCIAL_AUTH_FACEBOOK_KEY", '012345678901234') +SOCIAL_AUTH_FACEBOOK_SECRET = os.environ.get("SOCIAL_AUTH_FACEBOOK_SECRET", '01234567890123456789012345678901') + +# https://console.developers.google.com/apis/credentials/oauthclient/ +# unglue.it (prod) SOCIAL_AUTH_GOOGLE_OAUTH2_KEY #2 +SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = os.environ.get("_KEY", '012345678901-01234567890123456789012345678901.apps.googleusercontent.com') +SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = os.environ.get("_SECRET", '012345678901234567890123') + +AWS_ACCESS_KEY_ID = os.environ.get("AWS_ACCESS_KEY_ID", '01234567890123456789') +AWS_SECRET_ACCESS_KEY = os.environ.get("AWS_SECRET_ACCESS_KEY", '') # 40 chars + +DATABASE_USER = os.environ.get("DATABASE_USER", 'root') +DATABASE_PASSWORD = os.environ.get("DATABASE_PASSWORD", '') +DATABASE_HOST = os.environ.get("DATABASE_HOST", '') diff --git a/provisioning/roles/regluit_common/templates/me.py.j2 b/provisioning/roles/regluit_common/templates/me.py.j2 new file mode 100644 index 000000000..b82ede1bd --- /dev/null +++ b/provisioning/roles/regluit_common/templates/me.py.j2 @@ -0,0 +1,90 @@ +# coding=utf-8 +from .common import * +try: + from .keys.host import * +except ImportError: + from .dummy.host import * + +DEBUG = True +TEMPLATES[0]['OPTIONS']['debug'] = DEBUG + +# if you're doing development work, you'll want this to be zero +IS_PREVIEW = False + +# SITE_ID for your particular site -- must be configured in /core/fixtures/initial_data.json +SITE_ID = 3 + +ADMINS = ( + ('Raymond Yee', 'rdhyee+ungluebugs@gluejar.com'), + ('Eric Hellman', 'eric@gluejar.com'), +) + +MANAGERS = ADMINS + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.mysql', + 'NAME': '{{ mysql_db_name }}', + 'USER': '{{ mysql_db_user }}', + 'PASSWORD': '{{ mysql_db_pass }}', + 'HOST': '{{ mysql_db_host }}', + 'PORT': '{{ mysql_db_port }} ', + 'TEST_CHARSET': 'utf8', + } +} + +STATIC_ROOT = '/var/www/static' +CKEDITOR_UPLOAD_PATH = '/var/www/static/media/' + + +TIME_ZONE = 'America/New_York' + +# settings for outbout email +# if you have a gmail account you can use your email address and password + +EMAIL_USE_TLS = True +EMAIL_HOST = 'smtp.gmail.com' +# EMAIL_HOST_USER is in keys/host +# EMAIL_HOST_PASSWORD is in keys/host +EMAIL_PORT = 587 +DEFAULT_FROM_EMAIL = 'info@ebookfoundation.org' + +# for use with test google account only +GOOGLE_DISPLAY_NAME = 'Unglue.It' +REDIRECT_IS_HTTPS = False + + +#BASE_URL = 'http://0.0.0.0' +BASE_URL_SECURE = 'https://0.0.0.0' + +# use redis as queuing service +BROKER_TRANSPORT = "{{ broker_transport }}" +BROKER_HOST = "{{ broker_host }}" +BROKER_PORT = {{ broker_port }} +BROKER_VHOST = "{{ broker_vhost }}" + +# send celery log to Python logging +CELERYD_HIJACK_ROOT_LOGGER = False + +# a debug_toolbar setting +INTERNAL_IPS = ('127.0.0.1',) + +CELERYD_LOG_LEVEL = "INFO" + +# decide which of the period tasks to add to the schedule +#CELERYBEAT_SCHEDULE['send_test_email'] = SEND_TEST_EMAIL_JOB +#CELERYBEAT_SCHEDULE['refresh_acqs'] = REFRESH_ACQS_JOB + +# if you're doing development work, you'll want this to be zero +IS_PREVIEW = False + +# username, password to pass to LIVE_SERVER_TEST_URL + +UNGLUEIT_TEST_USER = None +UNGLUEIT_TEST_PASSWORD = None + +# local settings for maintenance mode +MAINTENANCE_MODE = False + +# assume that CSS will get generated on dev +SASS_OUTPUT_STYLE = 'compressed' diff --git a/provisioning/roles/regluit_common/templates/opt.pth.j2 b/provisioning/roles/regluit_common/templates/opt.pth.j2 new file mode 100644 index 000000000..9705e0599 --- /dev/null +++ b/provisioning/roles/regluit_common/templates/opt.pth.j2 @@ -0,0 +1 @@ +/opt/ diff --git a/provisioning/roles/regluit_common/templates/regluit.pth.j2 b/provisioning/roles/regluit_common/templates/regluit.pth.j2 new file mode 100644 index 000000000..97d30ede2 --- /dev/null +++ b/provisioning/roles/regluit_common/templates/regluit.pth.j2 @@ -0,0 +1 @@ +{{ project_path }}/ diff --git a/provisioning/roles/regluit_dev/defaults/main.yml b/provisioning/roles/regluit_dev/defaults/main.yml new file mode 100644 index 000000000..e17fdf012 --- /dev/null +++ b/provisioning/roles/regluit_dev/defaults/main.yml @@ -0,0 +1,5 @@ +django_settings_module: "regluit.settings.me" +project_path: "/opt/regluit" +virtualenv_name: "venv" +django_server_ip: "0.0.0.0" +django_server_port: 8000 diff --git a/provisioning/roles/regluit_dev/tasks/main.yml b/provisioning/roles/regluit_dev/tasks/main.yml new file mode 100644 index 000000000..f6b9207ce --- /dev/null +++ b/provisioning/roles/regluit_dev/tasks/main.yml @@ -0,0 +1,48 @@ +--- +- name: Migrate databse + django_manage: + app_path: "{{ project_path }}" + command: "migrate --noinput" + virtualenv: "{{ project_path }}/venv" + settings: "{{ django_settings_module }}" + +- name: Import fixtures + django_manage: + app_path: "{{ project_path }}" + command: "loaddata" + virtualenv: "{{ project_path }}/venv" + settings: "{{ django_settings_module }}" + fixtures: "core/fixtures/initial_data.json core/fixtures/bookloader.json" + +- name: Start Celery Worker + django_manage: + app_path: "{{ project_path }}" + command: "celery worker --detach --loglevel=INFO" + virtualenv: "{{ project_path }}/venv" + settings: "{{ django_settings_module }}" + +- name: Start Celery Beat + django_manage: + app_path: "{{ project_path }}" + command: "celery beat --detach --loglevel=INFO" + virtualenv: "{{ project_path }}/venv" + settings: "{{ django_settings_module }}" + +- name: Copy activation script + template: + src: "activate_venv.sh.j2" + dest: "/home/{{ ansible_user }}/activate_venv.sh" + owner: "{{ ansible_user }}" + mode: "u=rx,g=rx,o=rwx" + +- name: Source activation script in bash profile + blockinfile: + path: "/home/{{ ansible_user }}/.profile" + block: | + if [ -f ~/activate_venv.sh ]; then + source ~/activate_venv.sh + fi + marker: "# {mark} SOURCE REGLUIT ACTIVATION SCRIPT ON LOGIN" + +- debug: + msg: "Successfully provisioned regluit development environment." diff --git a/provisioning/roles/regluit_dev/templates/activate_venv.sh.j2 b/provisioning/roles/regluit_dev/templates/activate_venv.sh.j2 new file mode 100644 index 000000000..22418412d --- /dev/null +++ b/provisioning/roles/regluit_dev/templates/activate_venv.sh.j2 @@ -0,0 +1,7 @@ +#!/bin/bash +cd {{ project_path }} +source {{ virtualenv_name }}/bin/activate +echo Local setup of Regluit complete! +echo To start the django development server, run: +echo ./manage.py runserver {{ django_server_ip }}:{{ django_server_port }} +echo Then leave this session running and access the site on your host machine at http://127.0.0.1:{{ django_server_port }} diff --git a/provisioning/setup-regluit.yml b/provisioning/setup-regluit.yml new file mode 100644 index 000000000..bff9702b5 --- /dev/null +++ b/provisioning/setup-regluit.yml @@ -0,0 +1,6 @@ +--- +- hosts: regluit-local + gather_facts: false + roles: + - regluit_common + - regluit_dev diff --git a/requirements_versioned.pip b/requirements_versioned.pip index e064166db..790628bf8 100644 --- a/requirements_versioned.pip +++ b/requirements_versioned.pip @@ -30,7 +30,6 @@ django-contrib-comments==1.7.1 django-endless-pagination==2.0 django-extensions==1.6.1 django-jsonfield==1.0.0 -#django-kombu==0.9.4 django-maintenancemode==0.11.2 django-mptt==0.8.5 #django-nose-selenium==0.7.3 @@ -85,9 +84,6 @@ sorl-thumbnail==12.3 ssh==1.7.14 stevedore==1.12.0 stripe==1.9.1 -virtualenv==1.4.9 -# virtualenv-clone==0.2.4 not sure why I have this in my env -#virtualenvwrapper==3.6 wsgiref==0.1.2 xhtml2pdf==0.0.6 #for urllib3 secure diff --git a/static/scss/book_list.css b/static/scss/book_list.css index 5009731e3..dd91931a4 100644 --- a/static/scss/book_list.css +++ b/static/scss/book_list.css @@ -1,3 +1,3 @@ .panelborders{border-width:1px 0px;border-style:solid none;border-color:#FFFFFF}.row1 .book-list.listview{background:#f6f9f9}.row1 .book-list.listview .book-name:hover{background:#f6f9f9}.row2 .book-list.listview{background:#fff}.row2 .book-list.listview .book-name:hover{background:#fff}div.book-list.listview{clear:both;display:block;vertical-align:middle;height:43px;line-height:43px;margin:0 5px 0 0;padding:7px 0;position:relative}div.book-list.listview div.unglue-this{float:left}div.book-list.listview div.book-thumb{margin-right:5px;float:left}div.book-list.listview div.book-name{width:235px;margin-right:10px;background:url("/static/images/booklist/booklist-vline.png") right center no-repeat;float:left}div.book-list.listview div.book-name .title{display:block;line-height:normal;overflow:hidden;height:19px;line-height:19px;margin-bottom:5px;font-weight:bold}div.book-list.listview div.book-name .listview.author{overflow:hidden;display:block;line-height:normal;height:19px;line-height:19px}div.book-list.listview div.book-name.listview:hover{overflow:visible;width:auto;min-width:219px;margin-top:-1px;padding-right:15px;border:1px solid #d6dde0;-moz-border-radius:0 10px 10px 0;-webkit-border-radius:0 10px 10px 0;border-radius:0 10px 10px 0;border-left:none}div.book-list.listview div.book-name.listview{z-index:100;position:absolute;left:42px}div.book-list.listview div.add-wishlist,div.book-list.listview div.remove-wishlist,div.book-list.listview div.on-wishlist,div.book-list.listview div.create-account,div.book-list.listview div.pledge{margin-right:10px;padding-right:10px;width:136px;background:url("/static/images/booklist/booklist-vline.png") right center no-repeat;margin-left:255px;float:left}div.book-list.listview div.add-wishlist span,div.book-list.listview div.remove-wishlist span,div.book-list.listview div.on-wishlist span,div.book-list.listview div.create-account span,div.book-list.listview div.pledge span{font-weight:normal;color:#3d4e53;text-transform:none;padding-left:20px}div.book-list.listview div.add-wishlist span.booklist_pledge,div.book-list.listview div.remove-wishlist span.booklist_pledge,div.book-list.listview div.on-wishlist span.booklist_pledge,div.book-list.listview div.create-account span.booklist_pledge,div.book-list.listview div.pledge span.booklist_pledge{padding-left:18px}div.book-list.listview div.pledge span.booklist_pledge{padding-left:0}div.book-list.listview div.add-wishlist span,div.book-list.listview div.create-account span{background:url("/static/images/booklist/add-wishlist.png") left center no-repeat}div.book-list.listview div.add-wishlist span.booklist_pledge{background:none}div.book-list.listview div.remove-wishlist span{background:url("/static/images/booklist/remove-wishlist-blue.png") left center no-repeat}div.book-list.listview div.on-wishlist>span,div.book-list.listview div>span.on-wishlist{background:url("/static/images/checkmark_small.png") left center no-repeat}div.book-list.listview div.booklist-status{margin-right:85px;float:left}div.add-wishlist,div.remove-wishlist{cursor:pointer}.booklist-status.listview span.booklist-status-label{display:none}.booklist-status.listview span.booklist-status-text{float:left;display:block;padding-right:5px;max-width:180px;overflow:hidden}.booklist-status.listview .read_itbutton{margin-top:4px}div.unglue-this a{text-transform:uppercase;color:#3d4e53;font-size:11px;font-weight:bold}div.unglue-this.complete .unglue-this-inner1{background:url("/static/images/booklist/bg.png") 0 -84px no-repeat;height:42px}div.unglue-this.complete .unglue-this-inner2{background:url("/static/images/booklist/bg.png") 100% -126px no-repeat;margin-left:29px;height:42px;padding-right:10px}div.unglue-this.complete a{color:#fff;display:block}div.unglue-this.processing .unglue-this-inner1{background:url("/static/images/booklist/bg.png") 0 0 no-repeat;height:42px}div.unglue-this.processing .unglue-this-inner2{background:url("/static/images/booklist/bg.png") 100% -42px no-repeat;margin-left:25px;height:42px;padding-right:10px}ul.book-list-view{padding:0;margin:15px;float:right;list-style:none}ul.book-list-view li{float:left;margin-right:10px;display:block;vertical-align:middle;line-height:22px}ul.book-list-view li:hover{color:#6994a3}ul.book-list-view li.view-list a{filter:alpha(opacity=30);-moz-opacity:.3;-khtml-opacity:.3;opacity:.3}ul.book-list-view li.view-list a:hover{filter:alpha(opacity=100);-moz-opacity:1;-khtml-opacity:1;opacity:1}ul.book-list-view li.view-list a.chosen{filter:alpha(opacity=100);-moz-opacity:1;-khtml-opacity:1;opacity:1}ul.book-list-view li.view-list a.chosen:hover{text-decoration:none}div.navigation{float:left;clear:both;width:100%;color:#37414d}ul.navigation{float:right;padding:0;margin:0;list-style:none}ul.navigation li{float:left;line-height:normal;margin-right:5px}ul.navigation li a{color:#37414d;font-weight:normal}ul.navigation li.arrow-l a{background:url("/static/images/booklist/bg.png") 0 -168px no-repeat;width:10px;height:15px;display:block;text-indent:-10000px}ul.navigation li.arrow-r a{background:url("/static/images/booklist/bg.png") -1px -185px no-repeat;width:10px;height:15px;display:block;text-indent:-10000px}ul.navigation li a:hover,ul.navigation li.active a{color:#8ac3d7;text-decoration:underline}.unglue-button{display:block;border:0}.book-thumb.listview a{display:block;height:50px;width:32px;overflow:hidden;position:relative;z-index:1}.book-thumb.listview a:hover{overflow:visible;z-index:1000;border:none}.book-thumb.listview a img{position:absolute}.listview.icons{position:absolute;right:31px}.listview.icons .booklist-status-img{-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;background-color:#fff;margin-top:4px;height:37px}.listview.icons .booklist-status-img img{padding:5px}.listview.icons .booklist-status-label{display:none}.listview.icons .boolist-ebook img{margin-top:6px}div#content-block-content{padding-bottom:10px}.listview.panelback,.listview.panelback div{display:none}.nobold{font-weight:normal}div#libtools{margin-left:15px;margin-bottom:1em;border:1px solid #d6dde0;border-radius:10px;padding:10px}div#libtools p{margin-top:0px}div#libtools div{margin-top:0px;margin-left:2em}#facet_block div{background:url("/static/images/bg.png") 100% -223px no-repeat;padding:7px 7px 15px 7px}#facet_block div p{padding:0 10px 0 10px;font-size:smaller}#facet_block div p:first-child{font-size:larger;margin-top:5px}#facet_block div p:first-child img{float:left;padding-right:0.5em} -/*# sourceMappingURL=../../../../../static/scss/book_list.css.map */ \ No newline at end of file +/*# sourceMappingURL=../../../../static/scss/book_list.css.map */ \ No newline at end of file diff --git a/static/scss/book_panel2.css b/static/scss/book_panel2.css index dcf1c0e36..994184625 100644 --- a/static/scss/book_panel2.css +++ b/static/scss/book_panel2.css @@ -1,3 +1,3 @@ .panelborders{border-width:1px 0px;border-style:solid none;border-color:#FFFFFF}.buyit{font-size:13pt;color:#8dc63f}#main-wrapper{height:100%;width:725px;margin:0px;padding:0px 0px}.panelview.tabs{padding:5px 0px;margin:0px;width:142px;float:left}.panelview.tabs span.active{padding:15px;margin:15px 0px;font-weight:bold}.panelview.book-list{font-size:12px;width:120px;line-height:16px;margin:auto;padding:0px 5px 5px 5px;height:300px;background-color:#ffffff;color:#3d4e53;border:5px solid #edf3f4;position:relative}.panelview.book-list:hover{color:#3d4e53}.panelview.book-list img{padding:5px 0px;margin:0px}.panelview.book-list .pledge.side1{display:none}.panelview.remove-wishlist,.panelview.on-wishlist,.panelview.create-account,.panelview.add-wishlist{display:none}.panelview.book-name div{font-size:12px;line-height:16px;max-height:32px;color:#3d4e53;overflow:hidden}.panelview.book-name div a{color:#6994a3}.panelview.booklist-status{display:none}.panelview.icons{position:absolute;bottom:-3px;width:140px}.panelview.icons .booklist-status-img{float:left}.panelview.icons .booklist-status-label{position:absolute;color:#8dc63f;padding-left:5px;left:40px;bottom:5px;font-size:17px;margin-bottom:3px}.panelview.icons .panelnope{display:none}.panelview.icons .rounded{margin-bottom:7px}span.rounded{border:1px solid #d4d4d4;-moz-border-radius:7px;-webkit-border-radius:7px;border-radius:7px;padding:1px;color:#fff;margin:0 8px 0 0;display:inline-block}span.rounded>span{padding:7px 7px;min-width:15px;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;text-align:center;display:inline-block}span.rounded>span .hovertext{display:none}span.rounded>span:hover .hovertext{display:inline}span.grey{background:#bacfd6 url("/static/images/header-button-grey.png") left bottom repeat-x}.panelview.boolist-ebook a{display:none}div.panelview.side1{display:visible}div.panelview.side2{display:none}.panelback{position:relative}.greenpanel2{font-size:12px;width:120px;line-height:16px;margin:0;padding:10px;height:295px;background-color:#8dc63f;color:#fff;position:absolute;top:-5px;left:-10px}.greenpanel_top{height:135px}.greenpanel2 .button_text{height:30px;line-height:30px}.greenpanel2 .bottom_button{position:absolute;bottom:0px;height:26px}.greenpanel2 .add_button{position:absolute;bottom:60px;height:26px}.unglued_white{font-size:12px;margin:0px auto 10px auto;padding:5px 0 10px 0;height:58px}.unglued_white p{margin:0}.read_itbutton{width:118px;height:35px;line-height:35px;padding:0px 0px;background:#FFF;margin:0px;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;border:1px solid #81bb38;display:block}.read_itbutton span{height:35px;line-height:35px;font-size:11px;background-repeat:no-repeat;background-position:10px auto;font-weight:bold;text-decoration:none;text-transform:uppercase;padding:0px 0px 0px 30px;color:#73a334;background:url("/static/images/book-panel/book_icon.png") no-repeat 10% center}.read_itbutton span:hover{text-decoration:none}.read_itbutton span:hover{text-decoration:none;color:#3d4e53}.read_itbutton.pledge{background-image:url("/static/images/icons/pledgearrow-green.png");background-repeat:no-repeat;background-position:90% center}.read_itbutton.pledge span{height:35px;line-height:35px;font-size:11px;background-repeat:no-repeat;background-position:10px auto;font-weight:bold;text-decoration:none;text-transform:uppercase;padding:0px 0px 0px 25px;color:#73a334;background:none}.read_itbutton.pledge span:hover{text-decoration:none}.read_itbutton.pledge span:hover{text-decoration:none;color:#3d4e53}.read_itbutton_fail{width:118px;height:35px;line-height:35px;padding:0px 0px;background:#FFF;margin:0px;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;border:1px solid #81bb38}.read_itbutton_fail span{height:35px;line-height:35px;font-size:11px;background-repeat:no-repeat;background-position:10px auto;font-weight:bold;text-decoration:none;text-transform:uppercase;padding:0px 0px 0px 15px;color:#73a334;background:none}.read_itbutton_fail span:hover{text-decoration:none}.panelview.panelfront.icons .read_itbutton{margin-bottom:7px;height:30px;line-height:30px}.Unglue_itbutton{width:118px;height:35px;line-height:35px;padding:0px 0px;background:#FFF;margin:0px;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;border:1px solid #81bb38}.Unglue_itbutton a{background-image:url("/static/images/book-panel/unglue_icon.png");height:40px;line-height:40px;font-size:11px;background-repeat:no-repeat;background-position:10px auto;font-weight:bold;text-decoration:none;text-transform:uppercase;padding:0px 0px 0px 25px;color:#73a334}.Unglue_itbutton a:hover{text-decoration:none}.moreinfo.add-wishlist,.moreinfo.create-account{width:120px;height:30px;padding:0px;margin:0 0 0 0;border-top-width:1px;border-bottom-width:1px;border-top-style:solid;border-bottom-style:solid;border-top-color:#FFF;border-bottom-color:#FFF;background:url("/static/images/book-panel/add_wish_icon.png") no-repeat left center;padding-right:0}.moreinfo.add-wishlist a,.moreinfo.add-wishlist span,.moreinfo.create-account a,.moreinfo.create-account span{height:30px;line-height:30px;font-size:11px;background-repeat:no-repeat;background-position:left auto;font-weight:bold;text-decoration:none;text-transform:uppercase;padding:0 5px 0 21px;color:#FFF}.moreinfo.add-wishlist a:hover,.moreinfo.add-wishlist span:hover,.moreinfo.create-account a:hover,.moreinfo.create-account span:hover{text-decoration:none;color:#3d4e53}.moreinfo.remove-wishlist{width:120px;height:30px;padding:0px;margin:0 0 0 0;border-top-width:1px;border-bottom-width:1px;border-top-style:solid;border-bottom-style:solid;border-top-color:#FFF;border-bottom-color:#FFF;background:url("/static/images/booklist/remove-wishlist-white.png") no-repeat left center}.moreinfo.remove-wishlist a,.moreinfo.remove-wishlist span{height:30px;line-height:30px;font-size:11px;background-repeat:no-repeat;background-position:left auto;font-weight:bold;text-decoration:none;text-transform:uppercase;padding:0 5px 0 21px;color:#FFF}.moreinfo.remove-wishlist a:hover,.moreinfo.remove-wishlist span:hover{text-decoration:none;color:#3d4e53}.moreinfo.on-wishlist{width:120px;height:30px;padding:0px;margin:0 0 0 0;border-top-width:1px;border-bottom-width:1px;border-top-style:solid;border-bottom-style:solid;border-top-color:#FFF;border-bottom-color:#FFF;background:url("/static/images/checkmark_small-white.png") no-repeat left center}.moreinfo.on-wishlist a,.moreinfo.on-wishlist span{height:30px;line-height:30px;font-size:11px;background-repeat:no-repeat;background-position:left auto;font-weight:bold;text-decoration:none;text-transform:uppercase;padding:0 5px 0 21px;color:#FFF}.moreinfo.on-wishlist a:hover,.moreinfo.on-wishlist span:hover{text-decoration:none;color:#3d4e53}.white_text{width:120px;height:60px;padding:15px 0px;margin:0px}.white_text a{color:#FFF;text-decoration:none}.white_text a:hover{text-decoration:none;color:#3d4e53}.white_text p{line-height:16px;max-height:32px;overflow:hidden;margin:0 0 5px 0}.moreinfo{width:120px;height:30px;padding:0px;margin:0 0 0 0;border-top-width:1px;border-bottom-width:1px;border-top-style:solid;border-bottom-style:solid;border-top-color:#FFF;border-bottom-color:#FFF;background:url("/static/images/book-panel/more_icon.png") no-repeat left center;cursor:pointer}.moreinfo a,.moreinfo span{height:30px;line-height:30px;font-size:11px;background-repeat:no-repeat;background-position:left auto;font-weight:bold;text-decoration:none;text-transform:uppercase;padding:0 0 0 21px;color:#FFF}.moreinfo a:hover,.moreinfo span:hover{text-decoration:none;color:#3d4e53}.moreinfo>div{height:30px;line-height:30px;padding-bottom:8px}.read{margin:15px auto 5px auto;padding:0px;width:140px;color:#8dc63f;height:40px;line-height:25px;float:left;position:absolute;bottom:-15px}.read p{margin:0px;padding:10px 3px;width:50px;font-size:10pt;float:left}.read img{padding:5px 0px;margin:0px;float:left}.read2{margin:15px auto;padding:0px;width:130px;color:#8dc63f;height:40px;line-height:25px}.read2 p{margin:0px;padding:10px 3px;width:50px;font-size:10pt;float:left}.read2 img{padding:0px;margin:0px;float:left}.right_add{padding:10px;margin:0px;float:right}.panelview.book-thumb{position:relative;margin:0px;padding:0px;left:0px}.panelview.book-thumb img{z-index:100;width:120px;height:182px}.panelview.book-thumb span{position:absolute;bottom:0;left:-10px;top:-5px;z-index:1000;height:auto} -/*# sourceMappingURL=../../../../../static/scss/book_panel2.css.map */ \ No newline at end of file +/*# sourceMappingURL=../../../../static/scss/book_panel2.css.map */ \ No newline at end of file diff --git a/static/scss/campaign2.css b/static/scss/campaign2.css index 2ec0be119..d642feeec 100644 --- a/static/scss/campaign2.css +++ b/static/scss/campaign2.css @@ -1,3 +1,3 @@ .panelborders{border-width:1px 0px;border-style:solid none;border-color:#FFFFFF}#tabs{border-bottom:4px solid #6994a3;clear:both;float:left;margin-top:10px;width:100%}#tabs ul.book-list-view{margin-bottom:4px !important}#tabs-1,#tabs-2,#tabs-3,#tabs-4{display:none}#tabs-1.active,#tabs-2.active,#tabs-3.active,#tabs-4.active{display:inherit}#tabs-2 textarea{width:95%}ul.tabs{float:left;padding:0;margin:0;list-style:none;width:100%}ul.tabs li{float:left;height:46px;line-height:20px;padding-right:2px;width:116px;background:none;margin:0;padding:0 2px 0 0}ul.tabs li.tabs4{padding-right:0px}ul.tabs li a{height:41px;line-height:18px;display:block;text-align:center;padding:0 10px;min-width:80px;-moz-border-radius:7px 7px 0 0;-webkit-border-radius:7px 7px 0 0;border-radius:7px 7px 0 0;background:#d6dde0;color:#3d4e53;padding-top:5px}ul.tabs li a:hover{text-decoration:none}ul.tabs li a div{padding-top:8px}ul.tabs li a:hover,ul.tabs li.active a{background:#6994a3;color:#fff}.panelborders{border-width:1px 0px;border-style:solid none;border-color:#FFFFFF}.book-detail{float:left;width:100%;clear:both;display:block}.book-cover{float:left;margin-right:10px;width:151px}.book-cover img{padding:5px;border:solid 5px #edf3f4}.mediaborder{padding:5px;border:solid 5px #edf3f4}.book-detail-info{float:left;width:309px}.book-detail-info h2.book-name,.book-detail-info h3.book-author,.book-detail-info h3.book-year{padding:0;margin:0;line-height:normal}.book-detail-info h2.book-name{font-size:19px;font-weight:bold;color:#3d4e53}.book-detail-info h3.book-author,.book-detail-info h3.book-year{font-size:13px;font-weight:normal;color:#3d4e53}.book-detail-info h3.book-author span a,.book-detail-info h3.book-year span a{font-size:13px;font-weight:normal;color:#6994a3}.book-detail-info>div{width:100%;clear:both;display:block;overflow:hidden;border-top:1px solid #edf3f4;padding:10px 0}.book-detail-info>div.layout{border:none;padding:0}.book-detail-info>div.layout div.pubinfo{float:left;width:auto;padding-bottom:7px}.book-detail-info .btn_wishlist span{text-align:right}.book-detail-info .find-book label{float:left;line-height:31px}.book-detail-info .find-link{float:right}.book-detail-info .find-link img{padding:2px;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.book-detail-info .pledged-info{padding:10px 0;position:relative}.book-detail-info .pledged-info.noborder{border-top:none;padding-top:0}.book-detail-info .pledged-info .campaign-status-info{float:left;width:50%;margin-top:13px}.book-detail-info .pledged-info .campaign-status-info span{font-size:15px;color:#6994a3;font-weight:bold}.book-detail-info .thermometer{-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px;border:solid 2px #d6dde0;width:291px;padding:7px;position:relative;overflow:visible;background:-webkit-gradient(linear, left top, right top, from(#8dc63f), to(#CF6944));background:-webkit-linear-gradient(left, #CF6944, #8dc63f);background:-moz-linear-gradient(left, #CF6944, #8dc63f);background:-ms-linear-gradient(left, #CF6944, #8dc63f);background:-o-linear-gradient(left, #CF6944, #8dc63f);background:linear-gradient(left, #CF6944, #8dc63f);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='$alert', endColorstr='$call-to-action');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr='$alert', endColorstr='$call-to-action')"}.book-detail-info .thermometer.successful{border-color:#8ac3d7;background:#edf3f4}.book-detail-info .thermometer .cover{position:absolute;right:0;-moz-border-radius:0 10px 10px 0;-webkit-border-radius:0 10px 10px 0;border-radius:0 10px 10px 0;width:50px;height:14px;margin-top:-7px;background:#f3f5f6}.book-detail-info .thermometer span{display:none}.book-detail-info .thermometer:hover span{display:block;position:absolute;z-index:200;right:0;top:-7px;font-size:19px;color:#6994a3;background:white;border:2px solid #d6dde0;-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px;padding:5px}.book-detail-info .explainer span.explanation{display:none}.book-detail-info .explainer:hover span.explanation{display:block;position:absolute;z-index:200;right:0;top:12px;font-size:13px;font-weight:normal;color:#3d4e53;background:white;border:2px solid #d6dde0;-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px;padding:5px}.book-detail-info .status{position:absolute;top:50%;right:0%;height:25px;margin-top:-12px}.panelborders{border-width:1px 0px;border-style:solid none;border-color:#FFFFFF}ul.social a:hover{text-decoration:none}ul.social li{padding:5px 0 5px 30px !important;height:28px;line-height:28px !important;margin:0 !important;-moz-border-radius:0px;-webkit-border-radius:0px;border-radius:0px}ul.social li.facebook{background:url("/static/images/icons/facebook.png") 10px center no-repeat;cursor:pointer}ul.social li.facebook span{padding-left:10px}ul.social li.facebook:hover{background:#8dc63f url("/static/images/icons/facebook-hover.png") 10px center no-repeat}ul.social li.facebook:hover span{color:#fff}ul.social li.twitter{background:url("/static/images/icons/twitter.png") 10px center no-repeat;cursor:pointer}ul.social li.twitter span{padding-left:10px}ul.social li.twitter:hover{background:#8dc63f url("/static/images/icons/twitter-hover.png") 10px center no-repeat}ul.social li.twitter:hover span{color:#fff}ul.social li.email{background:url("/static/images/icons/email.png") 10px center no-repeat;cursor:pointer}ul.social li.email span{padding-left:10px}ul.social li.email:hover{background:#8dc63f url("/static/images/icons/email-hover.png") 10px center no-repeat}ul.social li.email:hover span{color:#fff}ul.social li.embed{background:url("/static/images/icons/embed.png") 10px center no-repeat;cursor:pointer}ul.social li.embed span{padding-left:10px}ul.social li.embed:hover{background:#8dc63f url("/static/images/icons/embed-hover.png") 10px center no-repeat}ul.social li.embed:hover span{color:#fff}#js-page-wrap{overflow:hidden}#main-container{margin-top:20px}#js-leftcol .jsmodule,.pledge.jsmodule{margin-bottom:10px}#js-leftcol .jsmodule.rounded .jsmod-content,.pledge.jsmodule.rounded .jsmod-content{-moz-border-radius:20px;-webkit-border-radius:20px;border-radius:20px;background:#edf3f4;color:#3d4e53;padding:10px 20px;font-weight:bold;border:none;margin:0;line-height:16px}#js-leftcol .jsmodule.rounded .jsmod-content.ACTIVE,.pledge.jsmodule.rounded .jsmod-content.ACTIVE{background:#8dc63f;color:white;font-size:19px;font-weight:normal;line-height:20px}#js-leftcol .jsmodule.rounded .jsmod-content.No.campaign.yet,.pledge.jsmodule.rounded .jsmod-content.No.campaign.yet{background:#e18551;color:white}#js-leftcol .jsmodule.rounded .jsmod-content span,.pledge.jsmodule.rounded .jsmod-content span{display:inline-block;vertical-align:middle}#js-leftcol .jsmodule.rounded .jsmod-content span.spacer,.pledge.jsmodule.rounded .jsmod-content span.spacer{visibility:none}#js-leftcol .jsmodule.rounded .jsmod-content span.findtheungluers,.pledge.jsmodule.rounded .jsmod-content span.findtheungluers{cursor:pointer}.jsmodule.pledge{float:left;margin-left:10px}#js-slide .jsmodule{width:660px !important}#js-search{margin:0 15px 0 15px !important}.alert>.errorlist{list-style-type:none;font-size:15px;border:none;text-align:left;font-weight:normal;font-size:13px}.alert>.errorlist>li{margin-bottom:14px}.alert>.errorlist .errorlist{margin-top:7px}.alert>.errorlist .errorlist li{width:auto;height:auto;padding-left:32px;padding-right:32px;font-size:13px}#js-maincol{float:left;width:470px;margin:0 10px}#js-maincol div#content-block{background:none;padding:0}.status{font-size:19px;color:#8dc63f}.add-wishlist,.add-wishlist-workpage,.remove-wishlist-workpage,.remove-wishlist,.on-wishlist,.create-account{float:right;cursor:pointer}.add-wishlist span,.add-wishlist-workpage span,.remove-wishlist-workpage span,.remove-wishlist span,.on-wishlist span,.create-account span{font-weight:normal;color:#3d4e53;text-transform:none;padding-left:20px}.add-wishlist span.on-wishlist,.add-wishlist-workpage span.on-wishlist,.remove-wishlist-workpage span.on-wishlist,.remove-wishlist span.on-wishlist,.on-wishlist span.on-wishlist,.create-account span.on-wishlist{background:url("/static/images/checkmark_small.png") left center no-repeat;cursor:default}.btn_wishlist .add-wishlist span,.add-wishlist-workpage span,.create-account span{background:url("/static/images/booklist/add-wishlist.png") left center no-repeat}.remove-wishlist-workpage span,.remove-wishlist span{background:url("/static/images/booklist/remove-wishlist-blue.png") left center no-repeat}div#content-block-content{padding-left:5px}div#content-block-content a{color:#6994a3}div#content-block-content #tabs-1 img{padding:5px;border:solid 5px #edf3f4}div#content-block-content #tabs-3{margin-left:-5px}.tabs-content{padding-right:5px}.tabs-content iframe{padding:5px;border:solid 5px #edf3f4}.tabs-content form{margin-left:-5px}.tabs-content .clearfix{margin-bottom:10px;border-bottom:2px solid #d6dde0}.work_supporter{height:auto;min-height:50px;margin-top:5px;vertical-align:middle}.work_supporter_avatar{float:left;margin-right:5px}.work_supporter_avatar img{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.work_supporter_name{height:50px;line-height:50px;float:left}.work_supporter_nocomment{height:50px;margin-top:5px;vertical-align:middle;min-width:235px;float:left}.show_supporter_contact_form{display:block;margin-left:5px;float:right}.supporter_contact_form{display:none;margin-left:5px}.contact_form_result{display:block;margin-left:5px}.work_supporter_wide{display:block;height:65px;margin-top:5px;float:none;margin-left:5px}.info_for_managers{display:block}.show_supporter_contact_form{cursor:pointer;opacity:0.5}.show_supporter_contact_form:hover{cursor:pointer;opacity:1}.official{border:3px #8ac3d7 solid;padding:3px;margin-left:-5px}.editions div{float:left;padding-bottom:5px;margin-bottom:5px}.editions .image{width:60px;overflow:hidden}.editions .metadata{display:block;overflow:hidden;margin-left:5px}.editions a:hover{text-decoration:underline}.show_more_edition,.show_more_ebooks{cursor:pointer}.show_more_edition{text-align:right}.show_more_edition:hover{text-decoration:underline}.more_edition{display:none;clear:both;padding-bottom:10px;padding-left:60px}.more_ebooks{display:none}.show_more_ebooks:hover{text-decoration:underline}#js-rightcol .add-wishlist,#js-rightcol .on-wishlist,#js-rightcol .create-account{float:none}#js-rightcol .on-wishlist{margin-left:20px}#js-rightcol,#pledge-rightcol{float:right;width:235px;margin-bottom:20px}#js-rightcol h3.jsmod-title,#pledge-rightcol h3.jsmod-title{background:#a7c1ca;-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px;padding:10px;height:auto;font-style:normal;font-size:15px;margin:0 0 10px 0;color:white}#js-rightcol h3.jsmod-title span,#pledge-rightcol h3.jsmod-title span{padding:0;color:#fff;font-style:normal;height:22px;line-height:22px}#js-rightcol .jsmodule,#pledge-rightcol .jsmodule{margin-bottom:10px}#js-rightcol .jsmodule a:hover,#pledge-rightcol .jsmodule a:hover{text-decoration:none}#pledge-rightcol{margin-top:7px}.js-rightcol-pad{border:1px solid #d6dde0;-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px;padding:10px}#widgetcode{display:none;border:1px solid #d6dde0;-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px;padding:10px}ul.support li{border-bottom:1px solid #d6dde0;padding:10px 5px 10px 10px;background:url("/static/images/icons/pledgearrow.png") 98% center no-repeat}ul.support li.no_link{background:none}ul.support li.last{border-bottom:none}ul.support li span{display:block;padding-right:10px}ul.support li span.menu-item-price{font-size:19px;float:left;display:inline;margin-bottom:3px}ul.support li span.menu-item-desc{float:none;clear:both;font-size:15px;font-weight:normal;line-height:19.5px}ul.support li:hover{color:#fff;background:#8dc63f url("/static/images/icons/pledgearrow-hover.png") 98% center no-repeat}ul.support li:hover a{color:#fff;text-decoration:none}ul.support li:hover.no_link{background:#fff;color:#8dc63f}.you_pledged{float:left;line-height:21px;font-weight:normal;color:#3d4e53;padding-left:20px;background:url("/static/images/checkmark_small.png") left center no-repeat}.thank-you{font-size:19px;font-weight:bold;margin:20px auto}div#libtools{border:1px solid #d6dde0;-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px;padding:10px;margin-left:0px;margin-top:1em;padding:10px}div#libtools p{margin-top:0px;margin-bottom:0px}div#libtools span{margin-top:0px;margin-left:0.5em;display:inline-block}div#libtools input[type="submit"]{margin-left:4em} -/*# sourceMappingURL=../../../../../static/scss/campaign2.css.map */ \ No newline at end of file +/*# sourceMappingURL=../../../../static/scss/campaign2.css.map */ \ No newline at end of file diff --git a/static/scss/landingpage4.css b/static/scss/landingpage4.css index 98425ddb1..4c0cb2e66 100644 --- a/static/scss/landingpage4.css +++ b/static/scss/landingpage4.css @@ -1,3 +1,3 @@ .panelborders{border-width:1px 0px;border-style:solid none;border-color:#FFFFFF}.panelborders{border-width:1px 0px;border-style:solid none;border-color:#FFFFFF}.user-block{width:100%;clear:both}#user-block1{width:100%}#user-block1 a#readon{float:left}.user-block-hide .quicktour.last{background:none}.learnmore_block{float:left;width:100%;clear:both;border-top:solid 1px #8ac3d7;margin-top:20px}.learnmore_block .learnmore_row{border-bottom:dashed 2px #8ac3d7;clear:left;width:68%}.learnmore_block .arrow{font-size:24pt;color:#8ac3d7;line-height:48pt;float:left;padding-right:8px;padding-left:8px;padding-top:20px;font-size:24pt}.learnmore_block .quicktour{width:20%;float:left;font-style:italic;line-height:20px;font-size:13px;margin-top:0;text-align:center;min-height:64px}.learnmore_block .quicktour .highlight{font-weight:bold}.learnmore_block .quicktour .programlink{margin-top:20px}.learnmore_block .quicktour .panelback{margin-top:21px}.learnmore_block .quicktour .panelfront{font-size:48pt;line-height:48pt;font-style:normal}.learnmore_block .quicktour .panelfront .makeaskgive{position:relative;z-index:1;font-size:40pt;top:10px;right:10pt;text-shadow:4px 2px 4px white}.learnmore_block .quicktour .panelfront .qtbutton{position:relative;z-index:0;opacity:0.8}.learnmore_block .quicktour .panelfront .make{line-height:10pt;color:red;font-size:12pt;top:0;left:50px}.learnmore_block .quicktour .panelfront .qtreadit{line-height:0;position:relative;height:34px}.learnmore_block .quicktour .panelfront .qtreadittext{top:-15px;left:50px;line-height:10pt}.learnmore_block .quicktour .panelfront input{line-height:10pt;display:inherit;font-size:10pt;padding:.7em 1em;top:-15px}.learnmore_block .quicktour.last{padding-left:10px;font-size:20px;width:28%;padding-top:20px}.learnmore_block .quicktour.last .signup{color:#8dc63f;font-weight:bold;margin-top:10px}.learnmore_block .quicktour.last .signup img{margin-left:5px;vertical-align:middle;margin-bottom:3px}.learnmore_block .quicktour.right{float:right}input[type="submit"].qtbutton{float:none;margin:0}#block-intro-text div{display:none;line-height:25px;padding-bottom:10px}#block-intro-text div#active{display:inherit}#expandable{display:none}#main-container.main-container-fl .js-main{width:968px;background:#fff url("/static/images/landingpage/container-top.png") top center no-repeat}#js-maincol-fl{padding:30px 30px 0 30px;overflow:hidden}#js-maincol-fl #content-block{background:none;padding:0}#js-maincol-fl #js-main-container{float:left;width:672px}#js-maincol-fl .js-main-container-inner{padding-right:40px}#js-maincol-fl h2.page-heading{margin:0 0 20px 0;color:#3d4e53;font-size:19px;font-weight:bold}#user-block1,.user-block2{float:left}#user-block1 #block-intro-text{float:left;width:702px;font-size:19px}#user-block1 a#readon{font-size:15px}#js-rightcol,#js-rightcol2{float:right;width:230px}#js-rightcol .jsmodule,#js-rightcol2 .jsmodule{float:left;width:208px;background:#edf3f4;border:1px solid #d6dde0;-moz-border-radius:12px;-webkit-border-radius:12px;border-radius:12px;margin-bottom:10px;padding:0 10px 10px 10px}#js-rightcol .jsmodule input,#js-rightcol2 .jsmodule input{border:none;height:36px;line-height:36px;width:90%;outline:none;padding-left:16px;font-size:15px}#js-rightcol .jsmodule input.signup,#js-rightcol2 .jsmodule input.signup{border:medium none;cursor:pointer;display:inline-block;overflow:hidden;padding:0 31px 0 11px;width:111px;margin-bottom:10px}#js-rightcol .jsmodule input.donate,#js-rightcol2 .jsmodule input.donate{cursor:pointer;display:inline-block;overflow:hidden;padding:0 31px 0 11px;width:50%}#js-rightcol .jsmodule .donate_amount,#js-rightcol2 .jsmodule .donate_amount{text-align:center}#js-rightcol .jsmodule div,#js-rightcol2 .jsmodule div{padding:0px;margin:0px}#js-rightcol div.button,#js-rightcol2 div.button{padding-top:10px;text-align:center;color:#FFF}#js-rightcol #donatesubmit,#js-rightcol2 #donatesubmit{font-size:15px}#js-rightcol label,#js-rightcol2 label{width:100%;display:block;clear:both;padding:10px 0 5px 0}.js-rightcol-padd{margin:0px}h3.heading{color:#3d4e53;font-weight:bold}ul.ungluingwhat{list-style:none;padding:0;margin:0 -10px}ul.ungluingwhat li{margin-bottom:3px;background:#fff;padding:10px;display:block;overflow:hidden}ul.ungluingwhat li>span{float:left}ul.ungluingwhat .user-avatar{width:43px}ul.ungluingwhat .user-avatar img{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}ul.ungluingwhat .user-book-info{margin-left:5px;width:160px;word-wrap:break-word;font-size:13px;line-height:16.9px}ul.ungluingwhat .user-book-info a{font-weight:normal}div.typo2{background:#edf3f4;-moz-border-radius:12px;-webkit-border-radius:12px;border-radius:12px;padding:10px;font-style:italic}div.signup_btn{display:block;overflow:hidden}div.signup_btn a{background:url("/static/images/bg.png") no-repeat scroll right top transparent;color:#fff;display:block;font-size:13px;font-weight:bold;height:36px;line-height:36px;letter-spacing:1px;text-decoration:none;text-transform:capitalize;float:left}div.signup_btn a span{background:url("/static/images/bg.png") no-repeat scroll -770px -36px transparent;display:block;margin-right:29px;padding:0 5px 0 15px}.have-content-right-module .item-content{float:left;width:364px;font-size:15px;height:132px;border-bottom:7px solid #8ac3d7}.have-content-right-module .item-content p{margin-bottom:20px;line-height:135%}.have-content-right-module .item-content h2.page-heading{padding-right:97px;line-height:43px;padding-bottom:4px;padding-top:5px}.have-content-right-module .content-right-module{width:268px;float:right}.have-content-right-module .content-right-module h3{color:#8ac3d7;text-transform:uppercase;font-size:24px;font-weight:normal;padding:0;margin:0 0 16px 0}h2.page-heading{color:#3c4e52;font-size:28px !important;font-style:italic;font-weight:normal !important}#js-maincontainer-faq{clear:both;overflow:hidden;margin:15px 0;width:100%}.js-maincontainer-faq-inner{float:right;color:#3d4e53;font-size:15px;padding-right:60px}.js-maincontainer-faq-inner a{font-weight:normal;color:#3d4e53;text-decoration:underline}h3.module-title{padding:10px 0;font-size:19px;font-weight:normal;margin:0}.landingheader{border-bottom:solid 5px #6994a3;float:left;height:134px}h3.featured_books{clear:both;font-weight:normal;background:#edf3f4;-moz-border-radius:10px 10px 0 0;-webkit-border-radius:10px 10px 0 0;border-radius:10px 10px 0 0;padding:10px;-webkit-margin-before:0}a.more_featured_books{float:right;width:57px;height:305px;margin:5px 0;border:5px solid white;line-height:305px;text-align:center}a.more_featured_books:hover{cursor:pointer;border-color:#edf3f4;color:#8dc63f}a.more_featured_books.short{height:85px;line-height:85px}.spacer{height:15px;width:100%;clear:both}ul#as_seen_on{margin:15px 0;position:relative;height:80px;padding:0px}ul#as_seen_on li{float:left;list-style-type:none;padding:10px;line-height:80px}ul#as_seen_on li:hover{background:#8ac3d7}ul#as_seen_on li img{vertical-align:middle;max-width:131px}.speech_bubble{position:relative;margin:1em 0;border:5px solid #6994a3;color:#3d4e53;-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px;background:#fff;font-size:19px;padding:1.5em}.speech_bubble:before{content:"";position:absolute;top:-20px;bottom:auto;left:auto;right:60px;border-width:0 20px 20px;border-style:solid;border-color:#6994a3 transparent;display:block;width:0}.speech_bubble:after{content:"";position:absolute;top:-13px;bottom:auto;left:auto;right:67px;border-width:0 13px 13px;border-style:solid;border-color:#fff transparent;display:block;width:0}.speech_bubble span{padding-left:1em}.speech_bubble span:before{position:absolute;top:.75em;left:.75em;font-size:38px;content:"\201C"}.speech_bubble span:after{position:absolute;top:.75em;font-size:38px;content:"\201D"}#footer{clear:both;margin-top:30px} -/*# sourceMappingURL=../../../../../static/scss/landingpage4.css.map */ \ No newline at end of file +/*# sourceMappingURL=../../../../static/scss/landingpage4.css.map */ \ No newline at end of file diff --git a/static/scss/search.css b/static/scss/search.css index cf07a8a74..4b5f3cd2d 100644 --- a/static/scss/search.css +++ b/static/scss/search.css @@ -1,3 +1,3 @@ .panelborders{border-width:1px 0px;border-style:solid none;border-color:#FFFFFF}span.rounded{border:1px solid #d4d4d4;-moz-border-radius:7px;-webkit-border-radius:7px;border-radius:7px;padding:1px;color:#fff;margin:0 8px 0 0;display:inline-block}span.rounded>span{padding:7px 7px;min-width:15px;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;text-align:center;display:inline-block}span.rounded>span .hovertext{display:none}span.rounded>span:hover .hovertext{display:inline}span.grey{background:#bacfd6 url("/static/images/header-button-grey.png") left bottom repeat-x}.listview .rounded{line-height:normal;margin-right:0} -/*# sourceMappingURL=../../../../../static/scss/search.css.map */ \ No newline at end of file +/*# sourceMappingURL=../../../../static/scss/search.css.map */ \ No newline at end of file diff --git a/static/scss/searchandbrowse2.css b/static/scss/searchandbrowse2.css index d95e82897..4051e176c 100644 --- a/static/scss/searchandbrowse2.css +++ b/static/scss/searchandbrowse2.css @@ -1,3 +1,3 @@ .panelborders{border-width:1px 0px;border-style:solid none;border-color:#FFFFFF}#js-maincontainer-bot-block{clear:both;overflow:visible;margin-top:55px}#js-maincontainer-bot-block #js-search{-moz-border-radius:64px;-webkit-border-radius:64px;border-radius:64px;background-color:#8dc63f;width:652px;height:80px;overflow:hidden;clear:both;color:#fff}#js-maincontainer-bot-block #js-search label{line-height:80px;font-size:19px;float:left;padding:0;width:auto;padding:0 15px 0 30px}#js-maincontainer-bot-block #js-search form{float:left;width:210px;background:url("/static/images/landingpage/search-box-two.png") 0 0 no-repeat;height:36px;display:block;overflow:hidden;margin-top:22px}#js-slideshow{padding:0 30px;position:relative}#js-slideshow a.prev{text-indent:-10000px;font-size:0;width:15px;height:22px;display:block;position:absolute;top:45%;background:url("/static/images/landingpage/arrow-left.png") 0 0 no-repeat;left:0}#js-slideshow a.next{text-indent:-10000px;font-size:0;width:15px;height:22px;display:block;position:absolute;top:45%;background:url("/static/images/landingpage/arrow-right.png") 0 0 no-repeat;right:0}.spacer{float:left;margin:0 4px}#js-search input.inputbox{border:none;color:#66942e;height:26px;line-height:26px;font-size:13px;float:left;padding:0;margin:5px 0 5px 20px;width:149px;outline:none}#js-search input.greenbutton{background:url("/static/images/landingpage/search-button-two.png") 0 0 no-repeat;width:40px;height:40px;padding:0;margin:0;border:none;display:block;float:right;text-indent:-10000px;font-size:0}#js-slide .jsmodule>h3{background:url("/static/images/landingpage/bg-slide.png") bottom center no-repeat;padding-bottom:7px;padding-left:35px}#js-slide .jsmodule>h3 span{background:#8ac3d7;color:#fff;padding:10px 20px;-moz-border-radius:10px 10px 0 0;-webkit-border-radius:10px 10px 0 0;border-radius:10px 10px 0 0;font-size:19px;overflow:hidden;display:inline-block;font-weight:normal} -/*# sourceMappingURL=../../../../../static/scss/searchandbrowse2.css.map */ \ No newline at end of file +/*# sourceMappingURL=../../../../static/scss/searchandbrowse2.css.map */ \ No newline at end of file diff --git a/static/scss/sitewide4.css b/static/scss/sitewide4.css index db0b1adcc..35634d594 100644 --- a/static/scss/sitewide4.css +++ b/static/scss/sitewide4.css @@ -1,3 +1,3 @@ @import url(font-awesome.min.css);.panelborders{border-width:1px 0px;border-style:solid none;border-color:#FFFFFF}.panelborders{border-width:1px 0px;border-style:solid none;border-color:#FFFFFF}.panelborders{border-width:1px 0px;border-style:solid none;border-color:#FFFFFF}ul.social a:hover{text-decoration:none}ul.social li{padding:5px 0 5px 30px !important;height:28px;line-height:28px !important;margin:0 !important;-moz-border-radius:0px;-webkit-border-radius:0px;border-radius:0px}ul.social li.facebook{background:url("/static/images/icons/facebook.png") 10px center no-repeat;cursor:pointer}ul.social li.facebook span{padding-left:10px}ul.social li.facebook:hover{background:#8dc63f url("/static/images/icons/facebook-hover.png") 10px center no-repeat}ul.social li.facebook:hover span{color:#fff}ul.social li.twitter{background:url("/static/images/icons/twitter.png") 10px center no-repeat;cursor:pointer}ul.social li.twitter span{padding-left:10px}ul.social li.twitter:hover{background:#8dc63f url("/static/images/icons/twitter-hover.png") 10px center no-repeat}ul.social li.twitter:hover span{color:#fff}ul.social li.email{background:url("/static/images/icons/email.png") 10px center no-repeat;cursor:pointer}ul.social li.email span{padding-left:10px}ul.social li.email:hover{background:#8dc63f url("/static/images/icons/email-hover.png") 10px center no-repeat}ul.social li.email:hover span{color:#fff}ul.social li.embed{background:url("/static/images/icons/embed.png") 10px center no-repeat;cursor:pointer}ul.social li.embed span{padding-left:10px}ul.social li.embed:hover{background:#8dc63f url("/static/images/icons/embed-hover.png") 10px center no-repeat}ul.social li.embed:hover span{color:#fff}.download_container{width:75%;margin:auto}#lightbox_content a{color:#6994a3}#lightbox_content .signuptoday a{color:white}#lightbox_content h2,#lightbox_content h3,#lightbox_content h4{margin-top:15px}#lightbox_content h2 a{font-size:18.75px}#lightbox_content .ebook_download a{margin:auto 5px auto 0;font-size:15px}#lightbox_content .ebook_download img{vertical-align:middle}#lightbox_content .logo{font-size:15px}#lightbox_content .logo img{-moz-border-radius:7px;-webkit-border-radius:7px;border-radius:7px;height:50px;width:50px;margin-right:5px}#lightbox_content .one_click,#lightbox_content .ebook_download_container{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;margin-left:-.25%;padding:0.5%;padding-bottom:15px;margin-bottom:5px;width:74%}#lightbox_content .one_click h3,#lightbox_content .ebook_download_container h3{margin-top:5px}#lightbox_content .one_click{border:solid 2px #8dc63f}#lightbox_content .ebook_download_container{border:solid 2px #d6dde0}#lightbox_content a.add-wishlist .on-wishlist,#lightbox_content a.success,a.success:hover{text-decoration:none;color:#3d4e53}#lightbox_content a.success,a.success:hover{cursor:default}#lightbox_content ul{padding-left:50px}#lightbox_content ul li{margin-bottom:4px}.border{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;border:solid 2px #d6dde0;margin:5px auto;padding-right:5px;padding-left:5px}.sharing{float:right;padding:0.5% !important;width:23% !important;min-width:105px}.sharing ul{padding:0.5% !important}.sharing .jsmod-title{-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px;height:auto}.sharing .jsmod-title span{padding:5% !important;color:white !important;font-style:normal}#widgetcode2{display:none;border:1px solid #d6dde0;-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px;padding:10px}#widgetcode2 textarea{max-width:90%}.btn_support.kindle{height:40px}.btn_support.kindle a{width:auto;font-size:15px}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn.focus,.btn:active:focus,.btn:active.focus,.btn.active:focus,.btn.active.focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],.btn fieldset[disabled]{cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn a.disabled,.btn a fieldset[disabled]{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:focus,.btn-default.focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.btn-default.dropdown-toggle{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active:hover,.btn-default:active:focus,.btn-default:active.focus,.btn-default.active:hover,.btn-default.active:focus,.btn-default.active.focus,.open>.btn-default.dropdown-toggle:hover,.open>.btn-default.dropdown-toggle:focus,.open>.btn-default.dropdown-toggle.focus{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default:active,.btn-default.active,.open>.btn-default.dropdown-toggle{background-image:none}.btn-default.disabled:hover,.btn-default.disabled:focus,.btn-default.disabled.focus,.btn-default[disabled]:hover,.btn-default[disabled]:focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default:hover,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default.focus{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary:focus,.btn-primary.focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary:active,.btn-primary.active,.open>.btn-primary.dropdown-toggle{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary:active:hover,.btn-primary:active:focus,.btn-primary:active.focus,.btn-primary.active:hover,.btn-primary.active:focus,.btn-primary.active.focus,.open>.btn-primary.dropdown-toggle:hover,.open>.btn-primary.dropdown-toggle:focus,.open>.btn-primary.dropdown-toggle.focus{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary:active,.btn-primary.active,.open>.btn-primary.dropdown-toggle{background-image:none}.btn-primary.disabled:hover,.btn-primary.disabled:focus,.btn-primary.disabled.focus,.btn-primary[disabled]:hover,.btn-primary[disabled]:focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary:hover,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary.focus{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:focus,.btn-success.focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.btn-success.dropdown-toggle{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active:hover,.btn-success:active:focus,.btn-success:active.focus,.btn-success.active:hover,.btn-success.active:focus,.btn-success.active.focus,.open>.btn-success.dropdown-toggle:hover,.open>.btn-success.dropdown-toggle:focus,.open>.btn-success.dropdown-toggle.focus{color:#fff;background-color:#398439;border-color:#255625}.btn-success:active,.btn-success.active,.open>.btn-success.dropdown-toggle{background-image:none}.btn-success.disabled:hover,.btn-success.disabled:focus,.btn-success.disabled.focus,.btn-success[disabled]:hover,.btn-success[disabled]:focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success:hover,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success.focus{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:focus,.btn-info.focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.btn-info.dropdown-toggle{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active:hover,.btn-info:active:focus,.btn-info:active.focus,.btn-info.active:hover,.btn-info.active:focus,.btn-info.active.focus,.open>.btn-info.dropdown-toggle:hover,.open>.btn-info.dropdown-toggle:focus,.open>.btn-info.dropdown-toggle.focus{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info:active,.btn-info.active,.open>.btn-info.dropdown-toggle{background-image:none}.btn-info.disabled:hover,.btn-info.disabled:focus,.btn-info.disabled.focus,.btn-info[disabled]:hover,.btn-info[disabled]:focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info:hover,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info.focus{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:focus,.btn-warning.focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.btn-warning.dropdown-toggle{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active:hover,.btn-warning:active:focus,.btn-warning:active.focus,.btn-warning.active:hover,.btn-warning.active:focus,.btn-warning.active.focus,.open>.btn-warning.dropdown-toggle:hover,.open>.btn-warning.dropdown-toggle:focus,.open>.btn-warning.dropdown-toggle.focus{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning:active,.btn-warning.active,.open>.btn-warning.dropdown-toggle{background-image:none}.btn-warning.disabled:hover,.btn-warning.disabled:focus,.btn-warning.disabled.focus,.btn-warning[disabled]:hover,.btn-warning[disabled]:focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning:hover,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning.focus{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:focus,.btn-danger.focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.btn-danger.dropdown-toggle{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active:hover,.btn-danger:active:focus,.btn-danger:active.focus,.btn-danger.active:hover,.btn-danger.active:focus,.btn-danger.active.focus,.open>.btn-danger.dropdown-toggle:hover,.open>.btn-danger.dropdown-toggle:focus,.open>.btn-danger.dropdown-toggle.focus{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger:active,.btn-danger.active,.open>.btn-danger.dropdown-toggle{background-image:none}.btn-danger.disabled:hover,.btn-danger.disabled:focus,.btn-danger.disabled.focus,.btn-danger[disabled]:hover,.btn-danger[disabled]:focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger:hover,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger.focus{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#6994a3;font-weight:normal;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],.btn-link fieldset[disabled]{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#496b77;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus,.btn-link fieldset[disabled]:hover,.btn-link fieldset[disabled]:focus{color:#777;text-decoration:none}.btn-lg{padding:10px 16px;font-size:18px;line-height:1.33333;border-radius:6px}.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.btn-social{position:relative;padding-left:44px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.btn-social>:first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)}.btn-social.btn-lg{padding-left:61px}.btn-social.btn-lg :first-child{line-height:45px;width:45px;font-size:1.8em}.btn-social.btn-sm{padding-left:38px}.btn-social.btn-sm :first-child{line-height:28px;width:28px;font-size:1.4em}.btn-social.btn-xs{padding-left:30px}.btn-social.btn-xs :first-child{line-height:20px;width:20px;font-size:1.2em}.btn-social-icon{position:relative;padding-left:44px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;height:34px;width:34px;padding:0}.btn-social-icon>:first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)}.btn-social-icon.btn-lg{padding-left:61px}.btn-social-icon.btn-lg :first-child{line-height:45px;width:45px;font-size:1.8em}.btn-social-icon.btn-sm{padding-left:38px}.btn-social-icon.btn-sm :first-child{line-height:28px;width:28px;font-size:1.4em}.btn-social-icon.btn-xs{padding-left:30px}.btn-social-icon.btn-xs :first-child{line-height:20px;width:20px;font-size:1.2em}.btn-social-icon :first-child{border:none;text-align:center;width:100% !important}.btn-social-icon.btn-lg{height:45px;width:45px;padding-left:0;padding-right:0}.btn-social-icon.btn-sm{height:30px;width:30px;padding-left:0;padding-right:0}.btn-social-icon.btn-xs{height:22px;width:22px;padding-left:0;padding-right:0}.btn-adn{background-color:#d87a68;color:#fff;background-color:#d87a68;border-color:rgba(0,0,0,0.2)}.btn-adn:focus,.btn-adn.focus{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)}.btn-adn:hover{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)}.btn-adn:active,.btn-adn.active,.open>.btn-adn.dropdown-toggle{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)}.btn-adn:active:hover,.btn-adn:active:focus,.btn-adn:active.focus,.btn-adn.active:hover,.btn-adn.active:focus,.btn-adn.active.focus,.open>.btn-adn.dropdown-toggle:hover,.open>.btn-adn.dropdown-toggle:focus,.open>.btn-adn.dropdown-toggle.focus{color:#fff;background-color:#b94630;border-color:rgba(0,0,0,0.2)}.btn-adn:active,.btn-adn.active,.open>.btn-adn.dropdown-toggle{background-image:none}.btn-adn.disabled:hover,.btn-adn.disabled:focus,.btn-adn.disabled.focus,.btn-adn[disabled]:hover,.btn-adn[disabled]:focus,.btn-adn[disabled].focus,fieldset[disabled] .btn-adn:hover,fieldset[disabled] .btn-adn:focus,fieldset[disabled] .btn-adn.focus{background-color:#d87a68;border-color:rgba(0,0,0,0.2)}.btn-adn .badge{color:#d87a68;background-color:#fff}.btn-bitbucket{background-color:#205081;color:#fff;background-color:#205081;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:focus,.btn-bitbucket.focus{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:hover{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:active,.btn-bitbucket.active,.open>.btn-bitbucket.dropdown-toggle{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:active:hover,.btn-bitbucket:active:focus,.btn-bitbucket:active.focus,.btn-bitbucket.active:hover,.btn-bitbucket.active:focus,.btn-bitbucket.active.focus,.open>.btn-bitbucket.dropdown-toggle:hover,.open>.btn-bitbucket.dropdown-toggle:focus,.open>.btn-bitbucket.dropdown-toggle.focus{color:#fff;background-color:#0f253c;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:active,.btn-bitbucket.active,.open>.btn-bitbucket.dropdown-toggle{background-image:none}.btn-bitbucket.disabled:hover,.btn-bitbucket.disabled:focus,.btn-bitbucket.disabled.focus,.btn-bitbucket[disabled]:hover,.btn-bitbucket[disabled]:focus,.btn-bitbucket[disabled].focus,fieldset[disabled] .btn-bitbucket:hover,fieldset[disabled] .btn-bitbucket:focus,fieldset[disabled] .btn-bitbucket.focus{background-color:#205081;border-color:rgba(0,0,0,0.2)}.btn-bitbucket .badge{color:#205081;background-color:#fff}.btn-dropbox{background-color:#1087dd;color:#fff;background-color:#1087dd;border-color:rgba(0,0,0,0.2)}.btn-dropbox:focus,.btn-dropbox.focus{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)}.btn-dropbox:hover{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)}.btn-dropbox:active,.btn-dropbox.active,.open>.btn-dropbox.dropdown-toggle{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)}.btn-dropbox:active:hover,.btn-dropbox:active:focus,.btn-dropbox:active.focus,.btn-dropbox.active:hover,.btn-dropbox.active:focus,.btn-dropbox.active.focus,.open>.btn-dropbox.dropdown-toggle:hover,.open>.btn-dropbox.dropdown-toggle:focus,.open>.btn-dropbox.dropdown-toggle.focus{color:#fff;background-color:#0a568c;border-color:rgba(0,0,0,0.2)}.btn-dropbox:active,.btn-dropbox.active,.open>.btn-dropbox.dropdown-toggle{background-image:none}.btn-dropbox.disabled:hover,.btn-dropbox.disabled:focus,.btn-dropbox.disabled.focus,.btn-dropbox[disabled]:hover,.btn-dropbox[disabled]:focus,.btn-dropbox[disabled].focus,fieldset[disabled] .btn-dropbox:hover,fieldset[disabled] .btn-dropbox:focus,fieldset[disabled] .btn-dropbox.focus{background-color:#1087dd;border-color:rgba(0,0,0,0.2)}.btn-dropbox .badge{color:#1087dd;background-color:#fff}.btn-facebook{background-color:#3b5998;color:#fff;background-color:#3b5998;border-color:rgba(0,0,0,0.2)}.btn-facebook:focus,.btn-facebook.focus{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)}.btn-facebook:hover{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)}.btn-facebook:active,.btn-facebook.active,.open>.btn-facebook.dropdown-toggle{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)}.btn-facebook:active:hover,.btn-facebook:active:focus,.btn-facebook:active.focus,.btn-facebook.active:hover,.btn-facebook.active:focus,.btn-facebook.active.focus,.open>.btn-facebook.dropdown-toggle:hover,.open>.btn-facebook.dropdown-toggle:focus,.open>.btn-facebook.dropdown-toggle.focus{color:#fff;background-color:#23345a;border-color:rgba(0,0,0,0.2)}.btn-facebook:active,.btn-facebook.active,.open>.btn-facebook.dropdown-toggle{background-image:none}.btn-facebook.disabled:hover,.btn-facebook.disabled:focus,.btn-facebook.disabled.focus,.btn-facebook[disabled]:hover,.btn-facebook[disabled]:focus,.btn-facebook[disabled].focus,fieldset[disabled] .btn-facebook:hover,fieldset[disabled] .btn-facebook:focus,fieldset[disabled] .btn-facebook.focus{background-color:#3b5998;border-color:rgba(0,0,0,0.2)}.btn-facebook .badge{color:#3b5998;background-color:#fff}.btn-flickr{background-color:#ff0084;color:#fff;background-color:#ff0084;border-color:rgba(0,0,0,0.2)}.btn-flickr:focus,.btn-flickr.focus{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)}.btn-flickr:hover{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)}.btn-flickr:active,.btn-flickr.active,.open>.btn-flickr.dropdown-toggle{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)}.btn-flickr:active:hover,.btn-flickr:active:focus,.btn-flickr:active.focus,.btn-flickr.active:hover,.btn-flickr.active:focus,.btn-flickr.active.focus,.open>.btn-flickr.dropdown-toggle:hover,.open>.btn-flickr.dropdown-toggle:focus,.open>.btn-flickr.dropdown-toggle.focus{color:#fff;background-color:#a80057;border-color:rgba(0,0,0,0.2)}.btn-flickr:active,.btn-flickr.active,.open>.btn-flickr.dropdown-toggle{background-image:none}.btn-flickr.disabled:hover,.btn-flickr.disabled:focus,.btn-flickr.disabled.focus,.btn-flickr[disabled]:hover,.btn-flickr[disabled]:focus,.btn-flickr[disabled].focus,fieldset[disabled] .btn-flickr:hover,fieldset[disabled] .btn-flickr:focus,fieldset[disabled] .btn-flickr.focus{background-color:#ff0084;border-color:rgba(0,0,0,0.2)}.btn-flickr .badge{color:#ff0084;background-color:#fff}.btn-foursquare{background-color:#f94877;color:#fff;background-color:#f94877;border-color:rgba(0,0,0,0.2)}.btn-foursquare:focus,.btn-foursquare.focus{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)}.btn-foursquare:hover{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)}.btn-foursquare:active,.btn-foursquare.active,.open>.btn-foursquare.dropdown-toggle{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)}.btn-foursquare:active:hover,.btn-foursquare:active:focus,.btn-foursquare:active.focus,.btn-foursquare.active:hover,.btn-foursquare.active:focus,.btn-foursquare.active.focus,.open>.btn-foursquare.dropdown-toggle:hover,.open>.btn-foursquare.dropdown-toggle:focus,.open>.btn-foursquare.dropdown-toggle.focus{color:#fff;background-color:#e30742;border-color:rgba(0,0,0,0.2)}.btn-foursquare:active,.btn-foursquare.active,.open>.btn-foursquare.dropdown-toggle{background-image:none}.btn-foursquare.disabled:hover,.btn-foursquare.disabled:focus,.btn-foursquare.disabled.focus,.btn-foursquare[disabled]:hover,.btn-foursquare[disabled]:focus,.btn-foursquare[disabled].focus,fieldset[disabled] .btn-foursquare:hover,fieldset[disabled] .btn-foursquare:focus,fieldset[disabled] .btn-foursquare.focus{background-color:#f94877;border-color:rgba(0,0,0,0.2)}.btn-foursquare .badge{color:#f94877;background-color:#fff}.btn-github{background-color:#444;color:#fff;background-color:#444;border-color:rgba(0,0,0,0.2)}.btn-github:focus,.btn-github.focus{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)}.btn-github:hover{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)}.btn-github:active,.btn-github.active,.open>.btn-github.dropdown-toggle{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)}.btn-github:active:hover,.btn-github:active:focus,.btn-github:active.focus,.btn-github.active:hover,.btn-github.active:focus,.btn-github.active.focus,.open>.btn-github.dropdown-toggle:hover,.open>.btn-github.dropdown-toggle:focus,.open>.btn-github.dropdown-toggle.focus{color:#fff;background-color:#191919;border-color:rgba(0,0,0,0.2)}.btn-github:active,.btn-github.active,.open>.btn-github.dropdown-toggle{background-image:none}.btn-github.disabled:hover,.btn-github.disabled:focus,.btn-github.disabled.focus,.btn-github[disabled]:hover,.btn-github[disabled]:focus,.btn-github[disabled].focus,fieldset[disabled] .btn-github:hover,fieldset[disabled] .btn-github:focus,fieldset[disabled] .btn-github.focus{background-color:#444;border-color:rgba(0,0,0,0.2)}.btn-github .badge{color:#444;background-color:#fff}.btn-google-plus{background-color:#dd4b39;color:#fff;background-color:#dd4b39;border-color:rgba(0,0,0,0.2)}.btn-google-plus:focus,.btn-google-plus.focus{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)}.btn-google-plus:hover{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)}.btn-google-plus:active,.btn-google-plus.active,.open>.btn-google-plus.dropdown-toggle{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)}.btn-google-plus:active:hover,.btn-google-plus:active:focus,.btn-google-plus:active.focus,.btn-google-plus.active:hover,.btn-google-plus.active:focus,.btn-google-plus.active.focus,.open>.btn-google-plus.dropdown-toggle:hover,.open>.btn-google-plus.dropdown-toggle:focus,.open>.btn-google-plus.dropdown-toggle.focus{color:#fff;background-color:#a32b1c;border-color:rgba(0,0,0,0.2)}.btn-google-plus:active,.btn-google-plus.active,.open>.btn-google-plus.dropdown-toggle{background-image:none}.btn-google-plus.disabled:hover,.btn-google-plus.disabled:focus,.btn-google-plus.disabled.focus,.btn-google-plus[disabled]:hover,.btn-google-plus[disabled]:focus,.btn-google-plus[disabled].focus,fieldset[disabled] .btn-google-plus:hover,fieldset[disabled] .btn-google-plus:focus,fieldset[disabled] .btn-google-plus.focus{background-color:#dd4b39;border-color:rgba(0,0,0,0.2)}.btn-google-plus .badge{color:#dd4b39;background-color:#fff}.btn-instagram{background-color:#3f729b;color:#fff;background-color:#3f729b;border-color:rgba(0,0,0,0.2)}.btn-instagram:focus,.btn-instagram.focus{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)}.btn-instagram:hover{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)}.btn-instagram:active,.btn-instagram.active,.open>.btn-instagram.dropdown-toggle{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)}.btn-instagram:active:hover,.btn-instagram:active:focus,.btn-instagram:active.focus,.btn-instagram.active:hover,.btn-instagram.active:focus,.btn-instagram.active.focus,.open>.btn-instagram.dropdown-toggle:hover,.open>.btn-instagram.dropdown-toggle:focus,.open>.btn-instagram.dropdown-toggle.focus{color:#fff;background-color:#26455d;border-color:rgba(0,0,0,0.2)}.btn-instagram:active,.btn-instagram.active,.open>.btn-instagram.dropdown-toggle{background-image:none}.btn-instagram.disabled:hover,.btn-instagram.disabled:focus,.btn-instagram.disabled.focus,.btn-instagram[disabled]:hover,.btn-instagram[disabled]:focus,.btn-instagram[disabled].focus,fieldset[disabled] .btn-instagram:hover,fieldset[disabled] .btn-instagram:focus,fieldset[disabled] .btn-instagram.focus{background-color:#3f729b;border-color:rgba(0,0,0,0.2)}.btn-instagram .badge{color:#3f729b;background-color:#fff}.btn-linkedin{background-color:#007bb6;color:#fff;background-color:#007bb6;border-color:rgba(0,0,0,0.2)}.btn-linkedin:focus,.btn-linkedin.focus{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)}.btn-linkedin:hover{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)}.btn-linkedin:active,.btn-linkedin.active,.open>.btn-linkedin.dropdown-toggle{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)}.btn-linkedin:active:hover,.btn-linkedin:active:focus,.btn-linkedin:active.focus,.btn-linkedin.active:hover,.btn-linkedin.active:focus,.btn-linkedin.active.focus,.open>.btn-linkedin.dropdown-toggle:hover,.open>.btn-linkedin.dropdown-toggle:focus,.open>.btn-linkedin.dropdown-toggle.focus{color:#fff;background-color:#00405f;border-color:rgba(0,0,0,0.2)}.btn-linkedin:active,.btn-linkedin.active,.open>.btn-linkedin.dropdown-toggle{background-image:none}.btn-linkedin.disabled:hover,.btn-linkedin.disabled:focus,.btn-linkedin.disabled.focus,.btn-linkedin[disabled]:hover,.btn-linkedin[disabled]:focus,.btn-linkedin[disabled].focus,fieldset[disabled] .btn-linkedin:hover,fieldset[disabled] .btn-linkedin:focus,fieldset[disabled] .btn-linkedin.focus{background-color:#007bb6;border-color:rgba(0,0,0,0.2)}.btn-linkedin .badge{color:#007bb6;background-color:#fff}.btn-microsoft{background-color:#2672ec;color:#fff;background-color:#2672ec;border-color:rgba(0,0,0,0.2)}.btn-microsoft:focus,.btn-microsoft.focus{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)}.btn-microsoft:hover{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)}.btn-microsoft:active,.btn-microsoft.active,.open>.btn-microsoft.dropdown-toggle{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)}.btn-microsoft:active:hover,.btn-microsoft:active:focus,.btn-microsoft:active.focus,.btn-microsoft.active:hover,.btn-microsoft.active:focus,.btn-microsoft.active.focus,.open>.btn-microsoft.dropdown-toggle:hover,.open>.btn-microsoft.dropdown-toggle:focus,.open>.btn-microsoft.dropdown-toggle.focus{color:#fff;background-color:#0f4bac;border-color:rgba(0,0,0,0.2)}.btn-microsoft:active,.btn-microsoft.active,.open>.btn-microsoft.dropdown-toggle{background-image:none}.btn-microsoft.disabled:hover,.btn-microsoft.disabled:focus,.btn-microsoft.disabled.focus,.btn-microsoft[disabled]:hover,.btn-microsoft[disabled]:focus,.btn-microsoft[disabled].focus,fieldset[disabled] .btn-microsoft:hover,fieldset[disabled] .btn-microsoft:focus,fieldset[disabled] .btn-microsoft.focus{background-color:#2672ec;border-color:rgba(0,0,0,0.2)}.btn-microsoft .badge{color:#2672ec;background-color:#fff}.btn-openid{background-color:#f7931e;color:#fff;background-color:#f7931e;border-color:rgba(0,0,0,0.2)}.btn-openid:focus,.btn-openid.focus{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)}.btn-openid:hover{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)}.btn-openid:active,.btn-openid.active,.open>.btn-openid.dropdown-toggle{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)}.btn-openid:active:hover,.btn-openid:active:focus,.btn-openid:active.focus,.btn-openid.active:hover,.btn-openid.active:focus,.btn-openid.active.focus,.open>.btn-openid.dropdown-toggle:hover,.open>.btn-openid.dropdown-toggle:focus,.open>.btn-openid.dropdown-toggle.focus{color:#fff;background-color:#b86607;border-color:rgba(0,0,0,0.2)}.btn-openid:active,.btn-openid.active,.open>.btn-openid.dropdown-toggle{background-image:none}.btn-openid.disabled:hover,.btn-openid.disabled:focus,.btn-openid.disabled.focus,.btn-openid[disabled]:hover,.btn-openid[disabled]:focus,.btn-openid[disabled].focus,fieldset[disabled] .btn-openid:hover,fieldset[disabled] .btn-openid:focus,fieldset[disabled] .btn-openid.focus{background-color:#f7931e;border-color:rgba(0,0,0,0.2)}.btn-openid .badge{color:#f7931e;background-color:#fff}.btn-pinterest{background-color:#cb2027;color:#fff;background-color:#cb2027;border-color:rgba(0,0,0,0.2)}.btn-pinterest:focus,.btn-pinterest.focus{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)}.btn-pinterest:hover{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)}.btn-pinterest:active,.btn-pinterest.active,.open>.btn-pinterest.dropdown-toggle{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)}.btn-pinterest:active:hover,.btn-pinterest:active:focus,.btn-pinterest:active.focus,.btn-pinterest.active:hover,.btn-pinterest.active:focus,.btn-pinterest.active.focus,.open>.btn-pinterest.dropdown-toggle:hover,.open>.btn-pinterest.dropdown-toggle:focus,.open>.btn-pinterest.dropdown-toggle.focus{color:#fff;background-color:#801419;border-color:rgba(0,0,0,0.2)}.btn-pinterest:active,.btn-pinterest.active,.open>.btn-pinterest.dropdown-toggle{background-image:none}.btn-pinterest.disabled:hover,.btn-pinterest.disabled:focus,.btn-pinterest.disabled.focus,.btn-pinterest[disabled]:hover,.btn-pinterest[disabled]:focus,.btn-pinterest[disabled].focus,fieldset[disabled] .btn-pinterest:hover,fieldset[disabled] .btn-pinterest:focus,fieldset[disabled] .btn-pinterest.focus{background-color:#cb2027;border-color:rgba(0,0,0,0.2)}.btn-pinterest .badge{color:#cb2027;background-color:#fff}.btn-reddit{background-color:#eff7ff;color:#000;background-color:#eff7ff;border-color:rgba(0,0,0,0.2)}.btn-reddit:focus,.btn-reddit.focus{color:#000;background-color:#bcdeff;border-color:rgba(0,0,0,0.2)}.btn-reddit:hover{color:#000;background-color:#bcdeff;border-color:rgba(0,0,0,0.2)}.btn-reddit:active,.btn-reddit.active,.open>.btn-reddit.dropdown-toggle{color:#000;background-color:#bcdeff;border-color:rgba(0,0,0,0.2)}.btn-reddit:active:hover,.btn-reddit:active:focus,.btn-reddit:active.focus,.btn-reddit.active:hover,.btn-reddit.active:focus,.btn-reddit.active.focus,.open>.btn-reddit.dropdown-toggle:hover,.open>.btn-reddit.dropdown-toggle:focus,.open>.btn-reddit.dropdown-toggle.focus{color:#000;background-color:#98ccff;border-color:rgba(0,0,0,0.2)}.btn-reddit:active,.btn-reddit.active,.open>.btn-reddit.dropdown-toggle{background-image:none}.btn-reddit.disabled:hover,.btn-reddit.disabled:focus,.btn-reddit.disabled.focus,.btn-reddit[disabled]:hover,.btn-reddit[disabled]:focus,.btn-reddit[disabled].focus,fieldset[disabled] .btn-reddit:hover,fieldset[disabled] .btn-reddit:focus,fieldset[disabled] .btn-reddit.focus{background-color:#eff7ff;border-color:rgba(0,0,0,0.2)}.btn-reddit .badge{color:#eff7ff;background-color:#000}.btn-soundcloud{background-color:#f50;color:#fff;background-color:#f50;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:focus,.btn-soundcloud.focus{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:hover{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:active,.btn-soundcloud.active,.open>.btn-soundcloud.dropdown-toggle{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:active:hover,.btn-soundcloud:active:focus,.btn-soundcloud:active.focus,.btn-soundcloud.active:hover,.btn-soundcloud.active:focus,.btn-soundcloud.active.focus,.open>.btn-soundcloud.dropdown-toggle:hover,.open>.btn-soundcloud.dropdown-toggle:focus,.open>.btn-soundcloud.dropdown-toggle.focus{color:#fff;background-color:#a83800;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:active,.btn-soundcloud.active,.open>.btn-soundcloud.dropdown-toggle{background-image:none}.btn-soundcloud.disabled:hover,.btn-soundcloud.disabled:focus,.btn-soundcloud.disabled.focus,.btn-soundcloud[disabled]:hover,.btn-soundcloud[disabled]:focus,.btn-soundcloud[disabled].focus,fieldset[disabled] .btn-soundcloud:hover,fieldset[disabled] .btn-soundcloud:focus,fieldset[disabled] .btn-soundcloud.focus{background-color:#f50;border-color:rgba(0,0,0,0.2)}.btn-soundcloud .badge{color:#f50;background-color:#fff}.btn-tumblr{background-color:#2c4762;color:#fff;background-color:#2c4762;border-color:rgba(0,0,0,0.2)}.btn-tumblr:focus,.btn-tumblr.focus{color:#fff;background-color:#1c2e3f;border-color:rgba(0,0,0,0.2)}.btn-tumblr:hover{color:#fff;background-color:#1c2e3f;border-color:rgba(0,0,0,0.2)}.btn-tumblr:active,.btn-tumblr.active,.open>.btn-tumblr.dropdown-toggle{color:#fff;background-color:#1c2e3f;border-color:rgba(0,0,0,0.2)}.btn-tumblr:active:hover,.btn-tumblr:active:focus,.btn-tumblr:active.focus,.btn-tumblr.active:hover,.btn-tumblr.active:focus,.btn-tumblr.active.focus,.open>.btn-tumblr.dropdown-toggle:hover,.open>.btn-tumblr.dropdown-toggle:focus,.open>.btn-tumblr.dropdown-toggle.focus{color:#fff;background-color:#111c26;border-color:rgba(0,0,0,0.2)}.btn-tumblr:active,.btn-tumblr.active,.open>.btn-tumblr.dropdown-toggle{background-image:none}.btn-tumblr.disabled:hover,.btn-tumblr.disabled:focus,.btn-tumblr.disabled.focus,.btn-tumblr[disabled]:hover,.btn-tumblr[disabled]:focus,.btn-tumblr[disabled].focus,fieldset[disabled] .btn-tumblr:hover,fieldset[disabled] .btn-tumblr:focus,fieldset[disabled] .btn-tumblr.focus{background-color:#2c4762;border-color:rgba(0,0,0,0.2)}.btn-tumblr .badge{color:#2c4762;background-color:#fff}.btn-twitter{background-color:#55acee;color:#fff;background-color:#55acee;border-color:rgba(0,0,0,0.2)}.btn-twitter:focus,.btn-twitter.focus{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)}.btn-twitter:hover{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)}.btn-twitter:active,.btn-twitter.active,.open>.btn-twitter.dropdown-toggle{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)}.btn-twitter:active:hover,.btn-twitter:active:focus,.btn-twitter:active.focus,.btn-twitter.active:hover,.btn-twitter.active:focus,.btn-twitter.active.focus,.open>.btn-twitter.dropdown-toggle:hover,.open>.btn-twitter.dropdown-toggle:focus,.open>.btn-twitter.dropdown-toggle.focus{color:#fff;background-color:#1583d7;border-color:rgba(0,0,0,0.2)}.btn-twitter:active,.btn-twitter.active,.open>.btn-twitter.dropdown-toggle{background-image:none}.btn-twitter.disabled:hover,.btn-twitter.disabled:focus,.btn-twitter.disabled.focus,.btn-twitter[disabled]:hover,.btn-twitter[disabled]:focus,.btn-twitter[disabled].focus,fieldset[disabled] .btn-twitter:hover,fieldset[disabled] .btn-twitter:focus,fieldset[disabled] .btn-twitter.focus{background-color:#55acee;border-color:rgba(0,0,0,0.2)}.btn-twitter .badge{color:#55acee;background-color:#fff}.btn-vimeo{background-color:#1ab7ea;color:#fff;background-color:#1ab7ea;border-color:rgba(0,0,0,0.2)}.btn-vimeo:focus,.btn-vimeo.focus{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)}.btn-vimeo:hover{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)}.btn-vimeo:active,.btn-vimeo.active,.open>.btn-vimeo.dropdown-toggle{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)}.btn-vimeo:active:hover,.btn-vimeo:active:focus,.btn-vimeo:active.focus,.btn-vimeo.active:hover,.btn-vimeo.active:focus,.btn-vimeo.active.focus,.open>.btn-vimeo.dropdown-toggle:hover,.open>.btn-vimeo.dropdown-toggle:focus,.open>.btn-vimeo.dropdown-toggle.focus{color:#fff;background-color:#0f7b9f;border-color:rgba(0,0,0,0.2)}.btn-vimeo:active,.btn-vimeo.active,.open>.btn-vimeo.dropdown-toggle{background-image:none}.btn-vimeo.disabled:hover,.btn-vimeo.disabled:focus,.btn-vimeo.disabled.focus,.btn-vimeo[disabled]:hover,.btn-vimeo[disabled]:focus,.btn-vimeo[disabled].focus,fieldset[disabled] .btn-vimeo:hover,fieldset[disabled] .btn-vimeo:focus,fieldset[disabled] .btn-vimeo.focus{background-color:#1ab7ea;border-color:rgba(0,0,0,0.2)}.btn-vimeo .badge{color:#1ab7ea;background-color:#fff}.btn-vk{background-color:#587ea3;color:#fff;background-color:#587ea3;border-color:rgba(0,0,0,0.2)}.btn-vk:focus,.btn-vk.focus{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)}.btn-vk:hover{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)}.btn-vk:active,.btn-vk.active,.open>.btn-vk.dropdown-toggle{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)}.btn-vk:active:hover,.btn-vk:active:focus,.btn-vk:active.focus,.btn-vk.active:hover,.btn-vk.active:focus,.btn-vk.active.focus,.open>.btn-vk.dropdown-toggle:hover,.open>.btn-vk.dropdown-toggle:focus,.open>.btn-vk.dropdown-toggle.focus{color:#fff;background-color:#3a526b;border-color:rgba(0,0,0,0.2)}.btn-vk:active,.btn-vk.active,.open>.btn-vk.dropdown-toggle{background-image:none}.btn-vk.disabled:hover,.btn-vk.disabled:focus,.btn-vk.disabled.focus,.btn-vk[disabled]:hover,.btn-vk[disabled]:focus,.btn-vk[disabled].focus,fieldset[disabled] .btn-vk:hover,fieldset[disabled] .btn-vk:focus,fieldset[disabled] .btn-vk.focus{background-color:#587ea3;border-color:rgba(0,0,0,0.2)}.btn-vk .badge{color:#587ea3;background-color:#fff}.btn-yahoo{background-color:#720e9e;color:#fff;background-color:#720e9e;border-color:rgba(0,0,0,0.2)}.btn-yahoo:focus,.btn-yahoo.focus{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)}.btn-yahoo:hover{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)}.btn-yahoo:active,.btn-yahoo.active,.open>.btn-yahoo.dropdown-toggle{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)}.btn-yahoo:active:hover,.btn-yahoo:active:focus,.btn-yahoo:active.focus,.btn-yahoo.active:hover,.btn-yahoo.active:focus,.btn-yahoo.active.focus,.open>.btn-yahoo.dropdown-toggle:hover,.open>.btn-yahoo.dropdown-toggle:focus,.open>.btn-yahoo.dropdown-toggle.focus{color:#fff;background-color:#39074e;border-color:rgba(0,0,0,0.2)}.btn-yahoo:active,.btn-yahoo.active,.open>.btn-yahoo.dropdown-toggle{background-image:none}.btn-yahoo.disabled:hover,.btn-yahoo.disabled:focus,.btn-yahoo.disabled.focus,.btn-yahoo[disabled]:hover,.btn-yahoo[disabled]:focus,.btn-yahoo[disabled].focus,fieldset[disabled] .btn-yahoo:hover,fieldset[disabled] .btn-yahoo:focus,fieldset[disabled] .btn-yahoo.focus{background-color:#720e9e;border-color:rgba(0,0,0,0.2)}.btn-yahoo .badge{color:#720e9e;background-color:#fff}.launch_top{border:solid 3px #e35351;-moz-border-radius:7px;-webkit-border-radius:7px;border-radius:7px;clear:both;padding:5px 10px;font-size:13px;width:90%;border-color:#8dc63f;margin:10px auto 0 auto;font-size:15px;line-height:22.5px}.launch_top a{color:#8dc63f}.launch_top.pale{border-color:#d6dde0;font-size:13px}.launch_top.alert{border-color:#e35351;font-size:13px}.preview_content{border:solid 3px #e35351;-moz-border-radius:7px;-webkit-border-radius:7px;border-radius:7px;clear:both;padding:5px 10px;font-size:13px;width:90%;width:80%;margin:10px auto}.preview_content a{color:#8dc63f}html,body{height:100%}body{background:url("/static/images/bg-body.png") 0 0 repeat-x;padding:0 0 20px 0;margin:0;font-size:13px;line-height:16.9px;font-family:"Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Arial, Helvetica, sans-serif;color:#3d4e53}#feedback{position:fixed;bottom:10%;right:0;z-index:500}#feedback p{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);white-space:nowrap;display:block;bottom:0;width:160px;height:32px;-moz-border-radius:0 0 10px 10px;-webkit-border-radius:0 0 10px 10px;border-radius:0 0 10px 10px;background:#8dc63f;margin-bottom:0;text-align:center;margin-right:-67px;line-height:normal}#feedback p a{color:white;font-size:24px;font-weight:normal}#feedback p a:hover{color:#3d4e53}a{font-weight:bold;font-size:inherit;text-decoration:none;cursor:pointer;color:#6994a3}a:hover{text-decoration:underline}h1{font-size:22.5px}h2{font-size:18.75px}h3{font-size:17.55px}h4{font-size:15px}img{border:none}img.user-avatar{float:left;margin-right:10px;-moz-border-radius:7px;-webkit-border-radius:7px;border-radius:7px}input,textarea,a.fakeinput{border:2px solid #d6dde0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}input:focus,textarea:focus,a.fakeinput:focus{border:2px solid #8dc63f;outline:none}a.fakeinput:hover{text-decoration:none}.js-search input{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}h2.content-heading{padding:15px;margin:0;font-size:19px;font-weight:normal;color:#3d4e53;float:left;width:50%}h2.content-heading span{font-style:italic}h3.jsmod-title{-moz-border-radius:8px 8px 0 0;-webkit-border-radius:8px 8px 0 0;border-radius:8px 8px 0 0;background:#edf3f4;padding:0;margin:0;height:2.3em}h3.jsmod-title span{font-size:19px;font-style:italic;color:#3d4e53;padding:0.7em 2em 0.5em 2em;display:block}input[type="submit"],a.fakeinput{background:#8dc63f;color:white;font-weight:bold;padding:0.5em 1em;cursor:pointer}.loader-gif[disabled="disabled"],.loader-gif.show-loading{background:url("/static/images/loading.gif") center no-repeat !important}.js-page-wrap{position:relative;min-height:100%}.js-main{width:960px;margin:0 auto;clear:both;padding:0}.bigger{font-size:15px}ul.menu{list-style:none;padding:0;margin:0}.errorlist{-moz-border-radius:16px;-webkit-border-radius:16px;border-radius:16px;border:solid #e35351 3px;clear:both;width:90%;height:auto;line-height:16px;padding:7px 0;font-weight:bold;font-size:13px;text-align:center}.errorlist li{list-style:none;border:none}.errorlist+input{border:2px solid #e35351 !important}.errorlist+input:focus{border:1px solid #8dc63f !important}.errorlist+textarea{border:2px solid #e35351 !important}.errorlist+textarea:focus{border:2px solid #8dc63f !important}.p_form .errorlist{-moz-border-radius:16px;-webkit-border-radius:16px;border-radius:16px;border:none;color:#e35351;clear:none;width:100%;height:auto;line-height:16px;padding:0;font-weight:normal;text-align:left;display:inline}.p_form .errorlist li{display:inline}.clearfix:after{content:".";display:block;height:0;clear:both;visibility:hidden}#js-header{height:90px}.js-logo{float:left;padding-top:10px}.js-logo a img{border:none}.js-topmenu{float:right;margin-top:25px;font-size:15px}.js-topmenu#authenticated{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;height:36px}.js-topmenu#authenticated:hover,.js-topmenu#authenticated.highlight{background:#d6dde0;cursor:pointer;position:relative}.js-topmenu ul#user_menu{white-space:nowrap;display:none;z-index:100;position:absolute;top:36px;left:0;padding:0;overflow:visible;margin:0}.js-topmenu ul#user_menu li{border-top:1px solid white;list-style-type:none;float:none;background:#d6dde0;padding:7px 10px}.js-topmenu ul#user_menu li:hover{background:#8dc63f}.js-topmenu ul#user_menu li:hover a{color:white}.js-topmenu ul#user_menu li:hover #i_haz_notifications{border-color:white;background-color:white;color:#3d4e53}.js-topmenu ul#user_menu li a{height:auto;line-height:26.25px}.js-topmenu ul#user_menu li span{margin-right:10px}.js-topmenu ul li{float:left;position:relative;z-index:50}.js-topmenu ul li .notbutton{color:#3d4e53;line-height:36px}.js-topmenu ul li a{display:block;text-decoration:none;font-weight:bold;letter-spacing:-.05em}.js-topmenu ul li span#welcome{display:block;text-decoration:none;font-weight:bold;letter-spacing:-.05em;padding:0 10px}.js-topmenu ul li img{padding:0;margin:0}.js-topmenu ul li.last{padding-left:20px}.js-topmenu ul li.last a span{-moz-border-radius:32px 0 0 32px;-webkit-border-radius:32px 0 0 32px;border-radius:32px 0 0 32px;background-color:#8dc63f;margin-right:29px;display:block;padding:0 5px 0 15px;color:white}.js-topmenu ul .unseen_count{border:solid 2px;-moz-border-radius:700px;-webkit-border-radius:700px;border-radius:700px;padding:3px;line-height:16px;width:16px;cursor:pointer;text-align:center}.js-topmenu ul .unseen_count#i_haz_notifications{background-color:#8dc63f;color:white;border-color:white}.js-topmenu ul .unseen_count#no_notifications_for_you{border-color:#edf3f4;background-color:#edf3f4;color:#3d4e53}.btn-signup{color:#fff;background-color:#8dc63f;border-color:#ccc}.btn-signup:focus,.btn-signup.focus{color:#fff;background-color:#72a230;border-color:#8c8c8c}.btn-signup:hover{color:#fff;background-color:#72a230;border-color:#adadad}.btn-signup:active,.btn-signup.active,.open>.btn-signup.dropdown-toggle{color:#fff;background-color:#72a230;border-color:#adadad}.btn-signup:active:hover,.btn-signup:active:focus,.btn-signup:active.focus,.btn-signup.active:hover,.btn-signup.active:focus,.btn-signup.active.focus,.open>.btn-signup.dropdown-toggle:hover,.open>.btn-signup.dropdown-toggle:focus,.open>.btn-signup.dropdown-toggle.focus{color:#fff;background-color:#5f8628;border-color:#8c8c8c}.btn-signup:active,.btn-signup.active,.open>.btn-signup.dropdown-toggle{background-image:none}.btn-signup.disabled:hover,.btn-signup.disabled:focus,.btn-signup.disabled.focus,.btn-signup[disabled]:hover,.btn-signup[disabled]:focus,.btn-signup[disabled].focus,fieldset[disabled] .btn-signup:hover,fieldset[disabled] .btn-signup:focus,fieldset[disabled] .btn-signup.focus{background-color:#8dc63f;border-color:#ccc}.btn-signup .badge{color:#8dc63f;background-color:#fff}.btn-readon{color:#fff;background-color:#8ac3d7;border-color:#ccc}.btn-readon:focus,.btn-readon.focus{color:#fff;background-color:#64b0ca;border-color:#8c8c8c}.btn-readon:hover{color:#fff;background-color:#64b0ca;border-color:#adadad}.btn-readon:active,.btn-readon.active,.open>.btn-readon.dropdown-toggle{color:#fff;background-color:#64b0ca;border-color:#adadad}.btn-readon:active:hover,.btn-readon:active:focus,.btn-readon:active.focus,.btn-readon.active:hover,.btn-readon.active:focus,.btn-readon.active.focus,.open>.btn-readon.dropdown-toggle:hover,.open>.btn-readon.dropdown-toggle:focus,.open>.btn-readon.dropdown-toggle.focus{color:#fff;background-color:#49a2c1;border-color:#8c8c8c}.btn-readon:active,.btn-readon.active,.open>.btn-readon.dropdown-toggle{background-image:none}.btn-readon.disabled:hover,.btn-readon.disabled:focus,.btn-readon.disabled.focus,.btn-readon[disabled]:hover,.btn-readon[disabled]:focus,.btn-readon[disabled].focus,fieldset[disabled] .btn-readon:hover,fieldset[disabled] .btn-readon:focus,fieldset[disabled] .btn-readon.focus{background-color:#8ac3d7;border-color:#ccc}.btn-readon .badge{color:#8ac3d7;background-color:#fff}#i_haz_notifications_badge{-moz-border-radius:700px;-webkit-border-radius:700px;border-radius:700px;font-size:13px;border:solid 2px white;margin-left:-7px;margin-top:-10px;padding:3px;background:#8dc63f;color:white;position:absolute;line-height:normal}form.login label,#login form label{display:block;line-height:20px;font-size:15px}form.login input,#login form input{width:90%;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;border:1px solid #d6dde0;height:18px;line-height:18px;margin-bottom:6px}form.login input[type=submit],#login form input[type=submit]{text-decoration:capitalize;width:auto;height:36px;line-height:36px;background:#8dc63f;border:1px solid transparent;color:white;cursor:pointer;font-size:13px;font-weight:normal;padding:0 15px;margin:5px 0}form.login input:focus,#login form input:focus{border:solid 1px #8dc63f}form.login input[type="text"],form.login input[type="password"],#login form input[type="text"],#login form input[type="password"]{height:22.75px;line-height:22.75px;margin-bottom:13px;border-width:2px}form.login input[type="submit"],#login form input[type="submit"]{font-size:15px}form.login span.helptext,#login form span.helptext{display:block;margin-top:-11px;font-style:italic;font-size:13px}#lightbox_content a.btn{color:#FFF}.js-search{float:left;padding-top:25px;margin-left:81px}.js-search input{float:left}.js-search .inputbox{padding:0 0 0 15px;margin:0;border-top:solid 4px #8ac3d7;border-left:solid 4px #8ac3d7;border-bottom:solid 4px #8ac3d7;border-right:none;-moz-border-radius:50px 0 0 50px;-webkit-border-radius:50px 0 0 50px;border-radius:50px 0 0 50px;outline:none;height:28px;line-height:28px;width:156px;float:left;color:#6994a3}.js-search .button{background:url("/static/images/blue-search-button.png") no-repeat;padding:0;margin:0;width:40px;height:36px;display:block;border:none;text-indent:-10000px;cursor:pointer}.js-search-inner{float:right}#locationhash{display:none}#block-intro-text{padding-right:10px}#block-intro-text span.def{font-style:italic}a#readon{color:#fff;text-transform:capitalize;display:block;float:right;font-size:13px;font-weight:bold}.spread_the_word{height:24px;width:24px;position:top;margin-left:5px}#js-leftcol{float:left;width:235px;margin-bottom:20px}#js-leftcol a{font-weight:normal}#js-leftcol a:hover{text-decoration:underline}#js-leftcol .jsmod-content{border:solid 1px #edf3f4;-moz-border-radius:0 0 10px 10px;-webkit-border-radius:0 0 10px 10px;border-radius:0 0 10px 10px}#js-leftcol ul.level1>li>a,#js-leftcol ul.level1>li>span{border-bottom:1px solid #edf3f4;border-top:1px solid #edf3f4;text-transform:uppercase;color:#3d4e53;font-size:15px;display:block;padding:10px}#js-leftcol ul.level2 li{padding:5px 0 5px 20px}#js-leftcol ul.level2 li a{color:#6994a3;font-size:15px}#js-leftcol ul.level2 li img{vertical-align:middle;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}#js-leftcol ul.level2 li .ungluer-name{height:30px;line-height:30px}#js-leftcol ul.level2 li.first{font-size:15px;color:#3d4e53;padding-left:10px}#js-leftcol ul.level3 li{padding:0px 0 0px 20px}#js-leftcol ul.level3 li a{color:#6994a3;font-size:13px}#js-leftcol ul.level3 li a img.thumbnail{margin-right:2px;height:50px;width:32px}#js-leftcol ul.level3 li a span.thumbnail-caption{font-size:12px;display:inline-block;width:154px;overflow-y:scroll}#js-topsection{padding:15px 0 0 0;overflow:hidden}.js-topnews{float:left;width:100%}.js-topnews1{background:url("/static/images/header/header-m.png") 0 0 repeat-y}.js-topnews2{background:url("/static/images/header/header-t.png") 0 0 no-repeat}.js-topnews3{background:url("/static/images/header/header-b.png") 0 100% no-repeat;display:block;overflow:hidden;padding:10px}#main-container{margin:15px 0 0 0}#js-maincol-fr{float:right;width:725px}div#content-block{overflow:hidden;background:url("/static/images/bg.png") 100% -223px no-repeat;padding:0 0 0 7px;margin-bottom:20px}div#content-block.jsmodule{background:none}.content-block-heading a.block-link{float:right;padding:15px;font-size:13px;color:#3d4e53;text-decoration:underline;font-weight:normal}div#content-block-content,div#content-block-content-1{width:100%;overflow:hidden;padding-left:10px}div#content-block-content .cols3 .column,div#content-block-content-1 .cols3 .column{width:33.33%;float:left}#footer{background-color:#edf3f4;clear:both;text-transform:uppercase;color:#3d4e53;font-size:15px;display:block;padding:15px 0px 45px 0px;margin-top:15px;overflow:hidden}#footer .column{float:left;width:25%;padding-top:5px}#footer .column ul{padding-top:5px;margin-left:0;padding-left:0}#footer .column li{padding:5px 0 5px 0;text-transform:none;list-style:none;margin-left:0}#footer .column li a{color:#6994a3;font-size:15px}.pagination{width:100%;text-align:center;margin-top:20px;clear:both;border-top:solid #3d4e53 thin;padding-top:7px}.pagination .endless_page_link{font-size:13px;border:thin #3d4e53 solid;font-weight:normal;margin:5px;padding:1px}.pagination .endless_page_current{font-size:13px;border:thin #3d4e53 solid;font-weight:normal;margin:5px;padding:1px;background-color:#edf3f4}a.nounderline{text-decoration:none}.slides_control{height:325px !important}#about_expandable{display:none;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;border:solid 5px #d6dde0;background:white;z-index:500;top:25%;padding:9px;max-width:90%}#about_expandable .collapser_x{margin-top:-27px;margin-right:-27px}#lightbox_content p,#lightbox_content li{padding:9px 0;font-size:15px;line-height:20px}#lightbox_content p a,#lightbox_content li a{font-size:15px;line-height:20px}#lightbox_content p b,#lightbox_content li b{color:#8dc63f}#lightbox_content p.last,#lightbox_content li.last{border-bottom:solid 2px #d6dde0;margin-bottom:5px}#lightbox_content .right_border{border-right:solid 1px #d6dde0;float:left;padding:9px}#lightbox_content .signuptoday{float:right;margin-top:0;clear:none}#lightbox_content h2+form,#lightbox_content h3+form,#lightbox_content h4+form{margin-top:15px}#lightbox_content h2,#lightbox_content h3,#lightbox_content h4{margin-bottom:10px}.nonlightbox .about_page{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;border:solid 5px #d6dde0;width:75%;margin:10px auto auto auto;padding:9px}.collapser_x{float:right;height:24px;line-height:24px;width:24px;-moz-border-radius:24px;-webkit-border-radius:24px;border-radius:24px;-moz-box-shadow:-1px 1px #3d4e53;-webkit-box-shadow:-1px 1px #3d4e53;box-shadow:-1px 1px #3d4e53;border:solid 3px white;text-align:center;color:white;background:#3d4e53;font-size:17px;z-index:5000;margin-top:-12px;margin-right:-22px}.signuptoday{padding:0 15px;height:36px;line-height:36px;float:left;clear:both;margin:10px auto;cursor:pointer;font-style:normal}.signuptoday a{padding-right:17px;color:white}.signuptoday a:hover{text-decoration:none}.central{width:480px;margin:0 auto}li.checked{list-style-type:none;background:transparent url(/static/images/checkmark_small.png) no-repeat 0 0;margin-left:-20px;padding-left:20px}.btn_support{margin:10px;width:215px}.btn_support a,.btn_support form input,.btn_support>span{font-size:22px;border:4px solid #d6dde0;-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px;display:block;text-align:center;padding-top:14.25px;padding-bottom:14.25px;background-color:#8dc63f;color:white !important}.btn_support a span,.btn_support form input span,.btn_support>span span{color:white !important;font-weight:bold;padding-left:0;margin-left:0 !important;background:none}.btn_support.create-account span{padding:0;margin:0;background:none}.btn_support a:hover,.btn_support form input:hover{background-color:#7aae34;text-decoration:none}.btn_support a{width:207px}.btn_support form input{width:215px}.btn_support.modify a,.btn_support.modify form input{background-color:#a7c1ca}.btn_support.modify a:hover,.btn_support.modify form input:hover{background-color:#91b1bd}.instructions h4{border-top:solid #d6dde0 1px;border-bottom:solid #d6dde0 1px;padding:0.5em 0}.instructions>div{padding-left:1%;padding-right:1%;font-size:15px;line-height:22.5px;width:98%}.instructions>div.active{float:left}.one_click{float:left}.one_click>div{float:left}.one_click>div #kindle a,.one_click>div .kindle a,.one_click>div #marvin a,.one_click>div .marvin a,.one_click>div #mac_ibooks a,.one_click>div .mac_ibooks a{font-size:15px;padding:9px 0}.one_click>div div{margin:0 10px 0 0}.ebook_download_container{clear:left}.other_instructions_paragraph{display:none}#iOS_app_div,#ios_div{display:none}.yes_js{display:none}.std_form,.std_form input,.std_form select{line-height:30px;font-size:15px}.contrib_amount{padding:10px;font-size:19px;text-align:center}#id_preapproval_amount{width:50%;line-height:30px;font-size:15px}#askblock{float:right;min-width:260px;background:#edf3f4;padding:10px;width:30%}.rh_ask{font-size:15px;width:65%}#contribsubmit{text-align:center;font-size:19px;margin:0 0 10px;cursor:pointer}#anoncontribbox{padding-bottom:10px}.faq_tldr{font-style:italic;font-size:19px;text-align:center;line-height:24.7px;color:#6994a3;margin-left:2em}.deletebutton,input[type='submit'].deletebutton{height:20px;padding:.2em .6em;background-color:lightgray;margin-left:1em;color:white;font-weight:bold;cursor:pointer} -/*# sourceMappingURL=../../../../../static/scss/sitewide4.css.map */ \ No newline at end of file +/*# sourceMappingURL=../../../../static/scss/sitewide4.css.map */ \ No newline at end of file diff --git a/utils/crypto.py b/utils/encryption.py similarity index 100% rename from utils/crypto.py rename to utils/encryption.py