From df6a225da2d1b3fe2e0de995e6c78b61a0fb5d11 Mon Sep 17 00:00:00 2001 From: sictiru Date: Wed, 16 Feb 2022 21:16:24 -0800 Subject: [PATCH] Merge master into sictiru --- .gitignore | 3 +- .vscode/settings.json | 5 +- Makefile | 69 +- ansible.cfg | 1 + ansible/deploy.yml | 2 +- ansible/playbooks/deploy_app.yml | 37 +- ansible/playbooks/deploy_task.yml | 1 + ansible/playbooks/setup_app.yml | 2 +- ansible/playbooks/setup_www.yml | 2 +- ansible/roles/backups/tasks/main.yml | 4 +- ansible/roles/celery_task/tasks/main.yml | 1 + .../consul/tasks/get_consul_manager_ip.py | 2 +- ansible/roles/consul/tasks/main.yml | 5 +- ansible/roles/mongo/tasks/main.yml | 49 +- .../roles/mongo/templates/consul_service.json | 2 +- ansible/roles/nginx/tasks/main.yml | 2 +- ansible/roles/node/tasks/main.yml | 2 +- ansible/roles/postgres/tasks/main.yml | 35 +- ansible/roles/web/tasks/main.yml | 1 + apps/api/views.py | 6 +- apps/newsletters/models.py | 3 + apps/profile/models.py | 4 +- apps/push/models.py | 11 +- apps/reader/urls.py | 1 + apps/reader/views.py | 68 +- apps/static/views.py | 11 +- {utils => archive}/jammit.py | 0 {config => archive}/munin/aws_elb_latency | 0 {config => archive}/munin/aws_elb_requests | 0 .../munin/aws_sqs_queue_length_ | 0 {config => archive}/munin/cassandra_cfcounts | 0 .../munin/cassandra_key_cache_ratio | 0 {config => archive}/munin/cassandra_latency | 0 {config => archive}/munin/cassandra_load | 0 {config => archive}/munin/cassandra_pending | 0 {config => archive}/munin/ddwrt_wl_rate | 0 {config => archive}/munin/ddwrt_wl_signal | 0 {config => archive}/munin/gearman_connections | 0 {config => archive}/munin/gearman_queues | 0 {config => archive}/munin/haproxy | 0 {config => archive}/munin/hookbox | 0 {config => archive}/munin/loadavg | 0 {config => archive}/munin/memcached_bytes | 0 .../munin/memcached_connections | 0 .../munin/memcached_curr_items | 0 {config => archive}/munin/memcached_items | 0 {config => archive}/munin/memcached_queries | 0 {config => archive}/munin/mongo_btree | 0 {config => archive}/munin/mongo_indexsize | 0 {config => archive}/munin/mongo_mem | 0 {config => archive}/munin/mongo_ops | 0 {config => archive}/munin/mongodb_conn | 0 {config => archive}/munin/mongodb_heap_usage | 0 .../munin/mongodb_objects_newsblur | 0 {config => archive}/munin/mongodb_ops | 0 {config => archive}/munin/mongodb_page_faults | 0 {config => archive}/munin/mongodb_queues | 0 {config => archive}/munin/mongodb_replset_lag | 0 .../munin/mongodb_size_newsblur | 0 {vendor => archive/munin}/munin/__init__.py | 0 {vendor => archive/munin}/munin/cassandra.py | 0 {vendor => archive/munin}/munin/ddwrt.py | 0 {vendor => archive/munin}/munin/gearman.py | 0 {vendor => archive/munin}/munin/memcached.py | 0 {vendor => archive/munin}/munin/mongodb.py | 0 {vendor => archive/munin}/munin/mysql.py | 0 {vendor => archive/munin}/munin/nginx.py | 0 {vendor => archive/munin}/munin/pgbouncer.py | 0 {vendor => archive/munin}/munin/postgres.py | 0 {vendor => archive/munin}/munin/redis.py | 0 {vendor => archive/munin}/munin/riak.py | 0 {config => archive}/munin/mysql_dbrows_ | 0 {config => archive}/munin/mysql_dbsize_ | 0 {config => archive}/munin/nginx_connections | 0 {config => archive}/munin/nginx_requests | 0 {config => archive}/munin/path_size | 0 .../munin/pg_newsblur_connections | 0 {config => archive}/munin/pg_newsblur_db_size | 0 {config => archive}/munin/pg_newsblur_locks | 0 .../munin/pg_newsblur_stat_bgwriter | 0 .../munin/pg_newsblur_stat_database | 0 .../munin/pg_newsblur_stat_tables | 0 .../munin/pg_newsblur_statio_tables | 0 {config => archive}/munin/pgbouncer_pools_cl_ | 0 {config => archive}/munin/pgbouncer_pools_sv_ | 0 .../munin/pgbouncer_stats_avg_bytes_ | 0 .../munin/pgbouncer_stats_avg_query_ | 0 .../munin/pgbouncer_stats_avg_req_ | 0 .../munin/postgres_block_read_ | 0 {config => archive}/munin/postgres_commits_ | 0 .../munin/postgres_connections | 0 {config => archive}/munin/postgres_locks | 0 {config => archive}/munin/postgres_queries_ | 0 {config => archive}/munin/postgres_space_ | 0 .../munin/postgres_table_sizes | 0 .../munin/redis_active_connections | 0 {config => archive}/munin/redis_commands | 0 {config => archive}/munin/redis_connects | 0 .../munin/redis_sessions_active_connections | 0 .../munin/redis_sessions_connects | 0 {config => archive}/munin/redis_sessions_size | 0 .../munin/redis_sessions_used_memory | 0 .../munin/redis_sesssions_commands | 0 {config => archive}/munin/redis_size | 0 .../munin/redis_story_active_connections | 0 .../munin/redis_story_commands | 0 .../munin/redis_story_connects | 0 {config => archive}/munin/redis_story_size | 0 .../munin/redis_story_used_memory | 0 {config => archive}/munin/redis_used_memory | 0 {config => archive}/munin/request_time | 0 {config => archive}/munin/riak_ops | 0 {config => archive}/munin/tc_size | 0 {newsblur_web => archive}/settings.py.orig | 0 .../subscription/SubscriptionManager.kt | 5 +- config/requirements.txt | 7 +- docker-compose.yml | 19 +- docker/haproxy/haproxy.consul.cfg.j2 | 7 +- docker/haproxy/haproxy.staging.cfg | 7 +- docker/mongo/backup_mongo.sh | 64 +- docker/monitor/Dockerfile | 1 - docker/newsblur_base_image.Dockerfile | 9 +- docker/newsblur_deploy.Dockerfile | 27 + docker/nginx/Dockerfile | 2 - docker/nginx/nginx.consul.conf.j2 | 1 + docker/nginx/nginx.local.conf | 1 + docker/postgres/backup_postgres.sh | 19 + docker/redis/redis_server.conf | 0 flask_metrics/flask_metrics_mongo.py | 48 +- flask_monitor/db_monitor.py | 67 +- media/admin | 1 - media/android | 1 - media/css/{ => controls}/chosen.css | 0 media/css/{ => controls}/controls.css | 0 media/css/{ => controls}/jquery.tipsy.css | 0 .../jquery-theme/jquery-ui-1.7.2.custom.css | 406 - .../images/ui-icons_444444_256x240.png | Bin 0 -> 7090 bytes .../images/ui-icons_555555_256x240.png | Bin 0 -> 7074 bytes .../images/ui-icons_777620_256x240.png | Bin 0 -> 4618 bytes .../images/ui-icons_777777_256x240.png | Bin 0 -> 7111 bytes .../images/ui-icons_cc0000_256x240.png | Bin 0 -> 4618 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 6487 bytes media/css/jquery-ui/jquery-ui.structure.css | 247 + media/css/jquery-ui/jquery-ui.theme.css | 446 + media/css/mobile/mobile.css | 14 +- media/css/{ => pages}/payments.css | 0 media/css/{ => pages}/welcome.css | 0 media/css/{ => reader}/darkmode.css | 0 media/css/{ => reader}/modals.css | 0 media/css/{ => reader}/reader.css | 2 +- media/css/{ => reader}/status.css | 0 media/css/vendor/bootstrap-dropdown.css | 186 - media/css/vendor/bootstrap-popover.css | 122 - media/css/vendor/bootstrap-progressbar.css | 186 - media/css/vendor/bootstrap-transition.css | 10 - media/css/vendor/bootstrap.css | 6103 --------- media/css/vendor/highlight.css | 136 - media/extensions/edge/manifest.json | 24 + media/img/logo_black_512.png | Bin 0 -> 34035 bytes media/ios | 1 - media/js/newsblur/reader/reader_friends.js | 4 +- .../js/newsblur/views/dashboard_river_view.js | 4 +- media/js/newsblur/views/story_list_view.js | 2 +- media/js/newsblur/views/story_tab_view.js | 4 +- media/js/newsblur/views/story_titles_view.js | 6 +- media/js/vendor/audio.js | 106 +- media/js/vendor/il.js | 497 + ...sLoaded-4.1.0.js => imagesLoaded-4.1.4.js} | 74 +- media/js/vendor/jquery-3.6.0.js | 10881 ++++++++++++++++ media/js/vendor/jquery-3.6.0.min.js | 2 + media/js/vendor/jquery-ui-1.13.1.js | 7105 ++++++++++ media/js/vendor/jquery.newsblur.js | 16 - media/js/vendor/jquery.noConflict.js | 2 +- newsblur_web/assets.yml | 268 +- newsblur_web/docker_local_settings.py | 26 +- newsblur_web/entrypoint.sh | 2 +- newsblur_web/local_settings.py.template | 172 - newsblur_web/settings.py | 102 +- newsblur_web/urls.py | 2 + node/favicons.js | 2 +- node/log.js | 2 +- node/newsblur.js | 2 +- node/original_page.js | 2 +- node/original_text.js | 2 +- node/unread_counts.js | 2 +- templates/api/share_bookmarklet.js | 13 +- templates/base.html | 4 +- templates/maintenance_off.html | 3 +- templates/static/api.xhtml | 4 +- .../static/apple_developer_merchantid.xhtml | 1 + terraform/digitalocean.tf | 25 +- terraform/variables.tf | 6 +- utils/backups/backup_mongo.py | 68 +- utils/backups/backup_psql.py | 13 +- utils/feed_fetcher.py | 3 +- utils/pipeline_utils.py | 112 + utils/templatetags/bookmarklet_includes.py | 13 - utils/templatetags/utils_tags.py | 59 +- utils/tlnb.py | 3 + utils/twitter_fetcher.py | 5 + vendor/zebra/signals.py | 2 + vendor/zebra/views.py | 9 +- 202 files changed, 20269 insertions(+), 7859 deletions(-) rename {utils => archive}/jammit.py (100%) rename {config => archive}/munin/aws_elb_latency (100%) rename {config => archive}/munin/aws_elb_requests (100%) rename {config => archive}/munin/aws_sqs_queue_length_ (100%) rename {config => archive}/munin/cassandra_cfcounts (100%) rename {config => archive}/munin/cassandra_key_cache_ratio (100%) rename {config => archive}/munin/cassandra_latency (100%) rename {config => archive}/munin/cassandra_load (100%) rename {config => archive}/munin/cassandra_pending (100%) rename {config => archive}/munin/ddwrt_wl_rate (100%) rename {config => archive}/munin/ddwrt_wl_signal (100%) rename {config => archive}/munin/gearman_connections (100%) rename {config => archive}/munin/gearman_queues (100%) rename {config => archive}/munin/haproxy (100%) rename {config => archive}/munin/hookbox (100%) rename {config => archive}/munin/loadavg (100%) rename {config => archive}/munin/memcached_bytes (100%) rename {config => archive}/munin/memcached_connections (100%) rename {config => archive}/munin/memcached_curr_items (100%) rename {config => archive}/munin/memcached_items (100%) rename {config => archive}/munin/memcached_queries (100%) rename {config => archive}/munin/mongo_btree (100%) rename {config => archive}/munin/mongo_indexsize (100%) rename {config => archive}/munin/mongo_mem (100%) rename {config => archive}/munin/mongo_ops (100%) rename {config => archive}/munin/mongodb_conn (100%) rename {config => archive}/munin/mongodb_heap_usage (100%) rename {config => archive}/munin/mongodb_objects_newsblur (100%) rename {config => archive}/munin/mongodb_ops (100%) rename {config => archive}/munin/mongodb_page_faults (100%) rename {config => archive}/munin/mongodb_queues (100%) rename {config => archive}/munin/mongodb_replset_lag (100%) rename {config => archive}/munin/mongodb_size_newsblur (100%) rename {vendor => archive/munin}/munin/__init__.py (100%) rename {vendor => archive/munin}/munin/cassandra.py (100%) rename {vendor => archive/munin}/munin/ddwrt.py (100%) rename {vendor => archive/munin}/munin/gearman.py (100%) rename {vendor => archive/munin}/munin/memcached.py (100%) rename {vendor => archive/munin}/munin/mongodb.py (100%) rename {vendor => archive/munin}/munin/mysql.py (100%) rename {vendor => archive/munin}/munin/nginx.py (100%) rename {vendor => archive/munin}/munin/pgbouncer.py (100%) rename {vendor => archive/munin}/munin/postgres.py (100%) rename {vendor => archive/munin}/munin/redis.py (100%) rename {vendor => archive/munin}/munin/riak.py (100%) rename {config => archive}/munin/mysql_dbrows_ (100%) rename {config => archive}/munin/mysql_dbsize_ (100%) rename {config => archive}/munin/nginx_connections (100%) rename {config => archive}/munin/nginx_requests (100%) rename {config => archive}/munin/path_size (100%) rename {config => archive}/munin/pg_newsblur_connections (100%) rename {config => archive}/munin/pg_newsblur_db_size (100%) rename {config => archive}/munin/pg_newsblur_locks (100%) rename {config => archive}/munin/pg_newsblur_stat_bgwriter (100%) rename {config => archive}/munin/pg_newsblur_stat_database (100%) rename {config => archive}/munin/pg_newsblur_stat_tables (100%) rename {config => archive}/munin/pg_newsblur_statio_tables (100%) rename {config => archive}/munin/pgbouncer_pools_cl_ (100%) rename {config => archive}/munin/pgbouncer_pools_sv_ (100%) rename {config => archive}/munin/pgbouncer_stats_avg_bytes_ (100%) rename {config => archive}/munin/pgbouncer_stats_avg_query_ (100%) rename {config => archive}/munin/pgbouncer_stats_avg_req_ (100%) rename {config => archive}/munin/postgres_block_read_ (100%) rename {config => archive}/munin/postgres_commits_ (100%) rename {config => archive}/munin/postgres_connections (100%) rename {config => archive}/munin/postgres_locks (100%) rename {config => archive}/munin/postgres_queries_ (100%) rename {config => archive}/munin/postgres_space_ (100%) rename {config => archive}/munin/postgres_table_sizes (100%) rename {config => archive}/munin/redis_active_connections (100%) rename {config => archive}/munin/redis_commands (100%) rename {config => archive}/munin/redis_connects (100%) rename {config => archive}/munin/redis_sessions_active_connections (100%) rename {config => archive}/munin/redis_sessions_connects (100%) rename {config => archive}/munin/redis_sessions_size (100%) rename {config => archive}/munin/redis_sessions_used_memory (100%) rename {config => archive}/munin/redis_sesssions_commands (100%) rename {config => archive}/munin/redis_size (100%) rename {config => archive}/munin/redis_story_active_connections (100%) rename {config => archive}/munin/redis_story_commands (100%) rename {config => archive}/munin/redis_story_connects (100%) rename {config => archive}/munin/redis_story_size (100%) rename {config => archive}/munin/redis_story_used_memory (100%) rename {config => archive}/munin/redis_used_memory (100%) rename {config => archive}/munin/request_time (100%) rename {config => archive}/munin/riak_ops (100%) rename {config => archive}/munin/tc_size (100%) rename {newsblur_web => archive}/settings.py.orig (100%) create mode 100644 docker/newsblur_deploy.Dockerfile delete mode 100644 docker/nginx/Dockerfile create mode 100755 docker/postgres/backup_postgres.sh create mode 100644 docker/redis/redis_server.conf delete mode 120000 media/admin delete mode 120000 media/android rename media/css/{ => controls}/chosen.css (100%) rename media/css/{ => controls}/controls.css (100%) rename media/css/{ => controls}/jquery.tipsy.css (100%) delete mode 100755 media/css/jquery-theme/jquery-ui-1.7.2.custom.css create mode 100644 media/css/jquery-ui/images/ui-icons_444444_256x240.png create mode 100644 media/css/jquery-ui/images/ui-icons_555555_256x240.png create mode 100644 media/css/jquery-ui/images/ui-icons_777620_256x240.png create mode 100644 media/css/jquery-ui/images/ui-icons_777777_256x240.png create mode 100644 media/css/jquery-ui/images/ui-icons_cc0000_256x240.png create mode 100644 media/css/jquery-ui/images/ui-icons_ffffff_256x240.png create mode 100644 media/css/jquery-ui/jquery-ui.structure.css create mode 100644 media/css/jquery-ui/jquery-ui.theme.css rename media/css/{ => pages}/payments.css (100%) rename media/css/{ => pages}/welcome.css (100%) rename media/css/{ => reader}/darkmode.css (100%) rename media/css/{ => reader}/modals.css (100%) rename media/css/{ => reader}/reader.css (99%) rename media/css/{ => reader}/status.css (100%) delete mode 100644 media/css/vendor/bootstrap-dropdown.css delete mode 100644 media/css/vendor/bootstrap-popover.css delete mode 100644 media/css/vendor/bootstrap-progressbar.css delete mode 100644 media/css/vendor/bootstrap-transition.css delete mode 100755 media/css/vendor/bootstrap.css delete mode 100644 media/css/vendor/highlight.css create mode 100644 media/extensions/edge/manifest.json create mode 100644 media/img/logo_black_512.png delete mode 120000 media/ios create mode 100644 media/js/vendor/il.js rename media/js/vendor/{imagesLoaded-4.1.0.js => imagesLoaded-4.1.4.js} (89%) create mode 100644 media/js/vendor/jquery-3.6.0.js create mode 100644 media/js/vendor/jquery-3.6.0.min.js create mode 100644 media/js/vendor/jquery-ui-1.13.1.js delete mode 100644 newsblur_web/local_settings.py.template create mode 100644 templates/static/apple_developer_merchantid.xhtml create mode 100644 utils/pipeline_utils.py delete mode 100644 utils/templatetags/bookmarklet_includes.py diff --git a/.gitignore b/.gitignore index bdfd52106..a6a5f2ea7 100644 --- a/.gitignore +++ b/.gitignore @@ -43,7 +43,8 @@ templates/maintenance_on.html vendor/mms-agent/settings.py apps/social/spam.py venv* -/backups +backup +backups config/mongodb_keyfile.key # Docker Jinja templates diff --git a/.vscode/settings.json b/.vscode/settings.json index ee123cf5a..1b6994f33 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -14,11 +14,12 @@ "media/ios": true, "**/*.map": true, "ansible/playbooks/*/*": true, - "archive/*": true, + // "archive/*": true, "logs/*": true, + // "static/*": true, "media/fonts": true, "static/*.css": true, - "static/*.js": true, + "static/js/*.*.js": true, "blog/.jekyll-cache": true, "blog/_site": true, "docker/volumes": true, diff --git a/Makefile b/Makefile index af5647e31..a22998759 100644 --- a/Makefile +++ b/Makefile @@ -7,25 +7,31 @@ newsblur := $(shell docker ps -qf "name=newsblur_web") #creates newsblur, but does not rebuild images or create keys start: - - RUNWITHMAKEBUILD=True CURRENT_UID=${CURRENT_UID} CURRENT_GID=${CURRENT_GID} docker-compose up -d + - RUNWITHMAKEBUILD=True CURRENT_UID=${CURRENT_UID} CURRENT_GID=${CURRENT_GID} docker compose up -d metrics: - - RUNWITHMAKEBUILD=True CURRENT_UID=${CURRENT_UID} CURRENT_GID=${CURRENT_GID} docker-compose -f docker-compose.yml -f docker-compose.metrics.yml up -d + - RUNWITHMAKEBUILD=True CURRENT_UID=${CURRENT_UID} CURRENT_GID=${CURRENT_GID} docker compose -f docker-compose.yml -f docker-compose.metrics.yml up -d metrics-ps: - - RUNWITHMAKEBUILD=True docker-compose -f docker-compose.yml -f docker-compose.metrics.yml ps + - RUNWITHMAKEBUILD=True docker compose -f docker-compose.yml -f docker-compose.metrics.yml ps rebuild: - - RUNWITHMAKEBUILD=True CURRENT_UID=${CURRENT_UID} CURRENT_GID=${CURRENT_GID} docker-compose down - - RUNWITHMAKEBUILD=True CURRENT_UID=${CURRENT_UID} CURRENT_GID=${CURRENT_GID} docker-compose up -d + - RUNWITHMAKEBUILD=True CURRENT_UID=${CURRENT_UID} CURRENT_GID=${CURRENT_GID} docker compose down + - RUNWITHMAKEBUILD=True CURRENT_UID=${CURRENT_UID} CURRENT_GID=${CURRENT_GID} docker compose up -d + +collectstatic: + - rm -fr static + - docker run --rm -v $(shell pwd):/srv/newsblur newsblur/newsblur_deploy #creates newsblur, builds new images, and creates/refreshes SSL keys nb: pull - - RUNWITHMAKEBUILD=True CURRENT_UID=${CURRENT_UID} CURRENT_GID=${CURRENT_GID} docker-compose down + - RUNWITHMAKEBUILD=True CURRENT_UID=${CURRENT_UID} CURRENT_GID=${CURRENT_GID} docker compose down - [[ -d config/certificates ]] && echo "keys exist" || make keys - - RUNWITHMAKEBUILD=True CURRENT_UID=${CURRENT_UID} CURRENT_GID=${CURRENT_GID} docker-compose up -d --build --remove-orphans - - RUNWITHMAKEBUILD=True docker-compose exec newsblur_web ./manage.py migrate - - RUNWITHMAKEBUILD=True docker-compose exec newsblur_web ./manage.py loaddata config/fixtures/bootstrap.json + - RUNWITHMAKEBUILD=True CURRENT_UID=${CURRENT_UID} CURRENT_GID=${CURRENT_GID} docker compose up -d --build --remove-orphans + - docker exec newsblur_web ./manage.py migrate + - docker exec newsblur_web ./manage.py loaddata config/fixtures/bootstrap.json +nbup: + - RUNWITHMAKEBUILD=True CURRENT_UID=${CURRENT_UID} CURRENT_GID=${CURRENT_GID} docker compose up -d --build --remove-orphans coffee: - coffee -c -w **/*.coffee @@ -37,19 +43,19 @@ bash: debug: - RUNWITHMAKEBUILD=True CURRENT_UID=${CURRENT_UID} CURRENT_GID=${CURRENT_GID} docker attach ${newsblur} log: - - RUNWITHMAKEBUILD=True docker-compose logs -f --tail 20 newsblur_web newsblur_node + - RUNWITHMAKEBUILD=True docker compose logs -f --tail 20 newsblur_web newsblur_node logweb: log logcelery: - - RUNWITHMAKEBUILD=True docker-compose logs -f --tail 20 task_celery + - RUNWITHMAKEBUILD=True docker compose logs -f --tail 20 task_celery logtask: logcelery logmongo: - - RUNWITHMAKEBUILD=True docker-compose logs -f db_mongo + - RUNWITHMAKEBUILD=True docker compose logs -f db_mongo alllogs: - - RUNWITHMAKEBUILD=True docker-compose logs -f --tail 20 + - RUNWITHMAKEBUILD=True docker compose logs -f --tail 20 logall: alllogs # brings down containers down: - - RUNWITHMAKEBUILD=True docker-compose -f docker-compose.yml -f docker-compose.metrics.yml down + - RUNWITHMAKEBUILD=True docker compose -f docker-compose.yml -f docker-compose.metrics.yml down nbdown: down jekyll: - cd blog && bundle exec jekyll serve @@ -58,8 +64,8 @@ jekyll_drafts: # runs tests test: - - RUNWITHMAKEBUILD=True CURRENT_UID=${CURRENT_UID} CURRENT_GID=${CURRENT_GID} TEST=True docker-compose -f docker-compose.yml up -d newsblur_web - - RUNWITHMAKEBUILD=True CURRENT_UID=${CURRENT_UID} CURRENT_GID=${CURRENT_GID} docker-compose exec newsblur_web bash -c "NOSE_EXCLUDE_DIRS=./vendor DJANGO_SETTINGS_MODULE=newsblur_web.test_settings python3 manage.py test -v 3 --failfast" + - RUNWITHMAKEBUILD=True CURRENT_UID=${CURRENT_UID} CURRENT_GID=${CURRENT_GID} TEST=True docker compose -f docker-compose.yml up -d newsblur_web + - RUNWITHMAKEBUILD=True CURRENT_UID=${CURRENT_UID} CURRENT_GID=${CURRENT_GID} docker compose exec newsblur_web bash -c "NOSE_EXCLUDE_DIRS=./vendor DJANGO_SETTINGS_MODULE=newsblur_web.test_settings python3 manage.py test -v 3 --failfast" keys: - mkdir config/certificates @@ -98,20 +104,27 @@ pull: - docker pull newsblur/newsblur_node - docker pull newsblur/newsblur_monitor +local_build_web: + # - docker buildx build --load . --file=docker/newsblur_base_image.Dockerfile --tag=newsblur/newsblur_python3 + - docker build . --file=docker/newsblur_base_image.Dockerfile --tag=newsblur/newsblur_python3 build_web: - - docker image build . --platform linux/amd64 --file=docker/newsblur_base_image.Dockerfile --tag=newsblur/newsblur_python3 + - docker buildx build . --platform linux/amd64,linux/arm64 --file=docker/newsblur_base_image.Dockerfile --tag=newsblur/newsblur_python3 build_node: - - docker image build . --platform linux/amd64 --file=docker/node/Dockerfile --tag=newsblur/newsblur_node + - docker buildx build . --platform linux/amd64,linux/arm64 --file=docker/node/Dockerfile --tag=newsblur/newsblur_node build_monitor: - - docker image build . --platform linux/amd64 --file=docker/monitor/Dockerfile --tag=newsblur/newsblur_monitor -build: build_web build_node build_monitor -push_web: build_web - - docker push newsblur/newsblur_python3 -push_node: build_node - - docker push newsblur/newsblur_node -push_monitor: build_monitor - - docker push newsblur/newsblur_monitor -push_images: push_web push_node push_monitor + - docker buildx build . --platform linux/amd64,linux/arm64 --file=docker/monitor/Dockerfile --tag=newsblur/newsblur_monitor +build_deploy: + - docker buildx build . --platform linux/amd64,linux/arm64 --file=docker/newsblur_deploy.Dockerfile --tag=newsblur/newsblur_deploy +build: build_web build_node build_monitor build_deploy +push_web: + - docker buildx build . --push --platform linux/amd64,linux/arm64 --file=docker/newsblur_base_image.Dockerfile --tag=newsblur/newsblur_python3 +push_node: + - docker buildx build . --push --platform linux/amd64,linux/arm64 --file=docker/node/Dockerfile --tag=newsblur/newsblur_node +push_monitor: + - docker buildx build . --push --platform linux/amd64,linux/arm64 --file=docker/monitor/Dockerfile --tag=newsblur/newsblur_monitor +push_deploy: + - docker buildx build . --push --platform linux/amd64,linux/arm64 --file=docker/newsblur_deploy.Dockerfile --tag=newsblur/newsblur_deploy +push_images: push_web push_node push_monitor push_deploy push: build push_images # Tasks @@ -173,4 +186,4 @@ clean: grafana-dashboards: - - python3 utils/grafana_backup.py \ No newline at end of file + - python3 utils/grafana_backup.py diff --git a/ansible.cfg b/ansible.cfg index 935479337..901f7aefa 100644 --- a/ansible.cfg +++ b/ansible.cfg @@ -7,6 +7,7 @@ private_key_file = /srv/secrets-newsblur/keys/docker.key remote_tmp = ~/.ansible/tmp forks = 20 interpreter_python = python3 +stdout_callback = debug [inventory] enable_plugins = ini, constructed diff --git a/ansible/deploy.yml b/ansible/deploy.yml index 2a4d83ea0..652a830e1 100644 --- a/ansible/deploy.yml +++ b/ansible/deploy.yml @@ -1,6 +1,6 @@ --- - import_playbook: playbooks/deploy_app.yml - when: "'app' in group_names" + when: "'app' in group_names or 'staging' in group_names" - import_playbook: playbooks/deploy_www.yml when: "'haproxy' in group_names" - import_playbook: playbooks/deploy_node.yml diff --git a/ansible/playbooks/deploy_app.yml b/ansible/playbooks/deploy_app.yml index 8af2fe3bd..e48417cb7 100644 --- a/ansible/playbooks/deploy_app.yml +++ b/ansible/playbooks/deploy_app.yml @@ -19,15 +19,31 @@ -H 'Content-Type: application/json' \ -d '{"version": "{{ lookup('pipe', 'date "+%Y-%m-%d %H:%M:%S"') }}"}' + - name: Cleanup static assets before compression + run_once: yes + connection: local + file: + state: absent + path: /srv/newsblur/static + tags: + - never + - static + + - name: Updating NewsBlur Deploy container + run_once: yes + connection: local + command: chdir=/srv/newsblur docker pull newsblur/newsblur_deploy + tags: + - never + - static - name: Compressing JS/CSS assets run_once: yes connection: local - command: chdir=/srv/newsblur jammit -c /srv/newsblur/newsblur_web/assets.yml --base-url https://www.newsblur.com --output /srv/newsblur/static + command: chdir=/srv/newsblur docker run --rm -v /srv/newsblur:/srv/newsblur newsblur/newsblur_deploy tags: - never - static - - jammit - name: Archive JS/CSS assets for uploading run_once: yes @@ -39,11 +55,22 @@ - never - static + - name: Ensure AWS dependencies installed + run_once: yes + connection: local + pip: + name: + - boto3 + - botocore + tags: + - never + - static + - name: Uploading JS/CSS assets to S3 run_once: yes connection: local amazon.aws.aws_s3: - bucket: newsblur_backups + bucket: newsblur-backups object: /static_py3.tgz src: /srv/newsblur/static.tgz mode: put @@ -67,9 +94,9 @@ vars: ansible_python_interpreter: /usr/bin/python3 amazon.aws.aws_s3: - bucket: newsblur_backups + bucket: newsblur-backups object: /static_py3.tgz - dest: /srv/newsblur/static/static.tgz + dest: /srv/newsblur/static.tgz mode: get overwrite: different aws_access_key: "{{ lookup('ini', 'aws_access_key_id section=default file=/srv/secrets-newsblur/keys/aws.s3.token') }}" diff --git a/ansible/playbooks/deploy_task.yml b/ansible/playbooks/deploy_task.yml index 7f66d5d79..b6b44c47f 100644 --- a/ansible/playbooks/deploy_task.yml +++ b/ansible/playbooks/deploy_task.yml @@ -8,6 +8,7 @@ tasks: - name: Update Sentry release connection: local + run_once: yes shell: > curl {{ sentry_task_release_webhook }}/ \ -X POST \ diff --git a/ansible/playbooks/setup_app.yml b/ansible/playbooks/setup_app.yml index f8d402e32..f31ab70da 100644 --- a/ansible/playbooks/setup_app.yml +++ b/ansible/playbooks/setup_app.yml @@ -1,7 +1,7 @@ --- - name: SETUP -> app containers hosts: web - serial: "50%" + # serial: "50%" vars_files: - ../env_vars/base.yml vars: diff --git a/ansible/playbooks/setup_www.yml b/ansible/playbooks/setup_www.yml index 532e6cc7f..596a54c16 100644 --- a/ansible/playbooks/setup_www.yml +++ b/ansible/playbooks/setup_www.yml @@ -1,6 +1,6 @@ --- - name: SETUP -> www containers - hosts: www + hosts: haproxy vars: - update_apt_cache: yes - motd_role: app diff --git a/ansible/roles/backups/tasks/main.yml b/ansible/roles/backups/tasks/main.yml index 4a6e0f556..00bff2dfb 100644 --- a/ansible/roles/backups/tasks/main.yml +++ b/ansible/roles/backups/tasks/main.yml @@ -17,14 +17,14 @@ - name: Set backup vars set_fact: redis_story_filename: backup_redis_story_2021-04-13-04-00.rdb.gz - postgres_filename: backup_postgresql_2022-01-06-19-46.sql.gz + postgres_filename: backup_postgresql_2022-02-03-04-00.sql.gz mongo_filename: backup_mongo_2021-03-15-04-00.tgz redis_filename: backup_redis_2021-03-15-04-00.rdb.gz tags: never, restore_postgres, restore_mongo, restore_redis, restore_redis_story - name: Download archives amazon.aws.aws_s3: - bucket: newsblur_backups + bucket: "newsblur-backups" object: "{{ item.dir }}{{ item.file }}" dest: "/srv/newsblur/backups/{{ item.file }}" mode: get diff --git a/ansible/roles/celery_task/tasks/main.yml b/ansible/roles/celery_task/tasks/main.yml index 887a235cd..88708ae10 100644 --- a/ansible/roles/celery_task/tasks/main.yml +++ b/ansible/roles/celery_task/tasks/main.yml @@ -48,6 +48,7 @@ timeout: 10s retries: 3 start_period: 30s + user: 1000:1001 volumes: - /srv/newsblur:/srv/newsblur - /etc/hosts:/etc/hosts diff --git a/ansible/roles/consul/tasks/get_consul_manager_ip.py b/ansible/roles/consul/tasks/get_consul_manager_ip.py index 96d21f975..0dfca056d 100755 --- a/ansible/roles/consul/tasks/get_consul_manager_ip.py +++ b/ansible/roles/consul/tasks/get_consul_manager_ip.py @@ -1,4 +1,4 @@ -#!/srv/newsblur/venv/newsblur3/bin/python +#!/usr/bin/env python import os import digitalocean diff --git a/ansible/roles/consul/tasks/main.yml b/ansible/roles/consul/tasks/main.yml index 789de3600..121d6b2f0 100644 --- a/ansible/roles/consul/tasks/main.yml +++ b/ansible/roles/consul/tasks/main.yml @@ -13,8 +13,9 @@ - name: Installing Consul become: yes apt: - pkg: consul - state: latest + allow_downgrades: yes + pkg: consul=1.10.4 + state: present - name: Register Manager IP run_once: yes diff --git a/ansible/roles/mongo/tasks/main.yml b/ansible/roles/mongo/tasks/main.yml index a4273bc8f..56d7bffe1 100644 --- a/ansible/roles/mongo/tasks/main.yml +++ b/ansible/roles/mongo/tasks/main.yml @@ -58,10 +58,17 @@ - name: Make backup directory become: yes file: - path: /opt/mongo/newsblur/backup/ + path: "/mnt/{{ inventory_hostname | regex_replace('db-|-', '') }}/backup/" state: directory - mode: 0666 + mode: 0777 +- name: Create symlink to mounted volume for backups to live + file: + state: link + src: "/mnt/{{ inventory_hostname | regex_replace('db-|-', '') }}/backup" + path: /srv/newsblur/backup + force: yes + - name: Start db-mongo docker container become: yes docker_container: @@ -86,7 +93,7 @@ - /srv/newsblur/ansible/roles/mongo/templates/mongo.conf:/etc/mongod.conf - /srv/newsblur/config/mongodb_keyfile.key:/srv/newsblur/config/mongodb_keyfile.key - /var/log/mongodb/:/var/log/mongodb/ - - /opt/mongo/newsblur/backup/:/backup/ + - /mnt/{{ inventory_hostname | regex_replace('db-|-', '') }}/backup/:/backup/ when: (inventory_hostname | regex_replace('[0-9]+', '')) in ['db-mongo', 'db-mongo-primary', 'db-mongo-secondary'] - name: Start db-mongo-analytics docker container @@ -114,7 +121,7 @@ - /srv/newsblur/ansible/roles/mongo/templates/mongo.analytics.conf:/etc/mongod.conf - /srv/newsblur/config/mongodb_keyfile.key:/srv/newsblur/config/mongodb_keyfile.key - /var/log/mongodb/:/var/log/mongodb/ - - /opt/mongo/newsblur/backup/:/backup/ + - /mnt/{{ inventory_hostname | regex_replace('db-|-', '') }}/backup/:/backup/ when: (inventory_hostname | regex_replace('[0-9]+', '')) == 'db-mongo-analytics' - name: Create mongo database user @@ -185,12 +192,18 @@ docker run --rm -it OUTPUT=$(eval sudo df / | head -n 2 | tail -1); -v /srv/newsblur:/srv/newsblur - --network=newsblurnet + --network=host --hostname {{ ansible_hostname }} newsblur/newsblur_python3 /srv/newsblur/utils/monitor_disk_usage.py $OUTPUT tags: - sanity-checker +- name: Copy common secrets + copy: + src: /srv/secrets-newsblur/settings/common_settings.py + dest: /srv/newsblur/newsblur_web/local_settings.py + register: app_changed + - name: Add mongo backup cron: name: mongo backup @@ -201,19 +214,21 @@ tags: - mongo-backup -- name: Add mongo starred_stories+stories backup - cron: - name: mongo starred/shared/all stories backup - minute: "0" - hour: "5" - job: /srv/newsblur/docker/mongo/backup_mongo_stories.sh - when: '"db-mongo-secondary1" in inventory_hostname' - tags: - - mongo-backup +# - name: Add mongo starred_stories+stories backup +# cron: +# name: mongo starred/shared/all stories backup +# minute: "0" +# hour: "5" +# job: /srv/newsblur/docker/mongo/backup_mongo.sh stories +# when: '"db-mongo-secondary1" in inventory_hostname' +# tags: +# - mongo-backup -# Renaming a db-mongo3 to db-mongo2: -# - Change hostname to db-mongo2 on Digital Ocean (doctl) -# - Change hostname to db-mongo2 in /etc/hostname +# Renaming a db-mongo-primary3 to db-mongo-primary2: +# - Change hostname to db-mongo-primary2 on Digital Ocean +# - make list; doctl compute droplet-action rename --droplet-name db-mongo-primary2 +# - Change hostname to db-mongo-primary2 in /etc/hostname +# - make inventory # - Symlink /mnt/mongo2 to /mnt/mongo3 # - tf state mv "digitalocean_droplet.db-mongo-primary[2]" "digitalocean_droplet.db-mongo-primary[1]" # - tf state mv "digitalocean_volume.mongo_volume[2]" "digitalocean_volume.mongo_volume[1]" diff --git a/ansible/roles/mongo/templates/consul_service.json b/ansible/roles/mongo/templates/consul_service.json index 192d901a0..8ca05190b 100644 --- a/ansible/roles/mongo/templates/consul_service.json +++ b/ansible/roles/mongo/templates/consul_service.json @@ -1,6 +1,6 @@ { "service": { - "name": "db-mongo", + "name": "db-mongo-staging", "id": "{{ inventory_hostname }}", "tags": [ "db" diff --git a/ansible/roles/nginx/tasks/main.yml b/ansible/roles/nginx/tasks/main.yml index f49403dff..7bc49c025 100644 --- a/ansible/roles/nginx/tasks/main.yml +++ b/ansible/roles/nginx/tasks/main.yml @@ -15,7 +15,7 @@ become: yes docker_container: name: nginx - image: nginx:1.19 + image: nginx:1.21 state: started networks_cli_compatible: yes network_mode: default diff --git a/ansible/roles/node/tasks/main.yml b/ansible/roles/node/tasks/main.yml index 39d344db9..6560df6cf 100644 --- a/ansible/roles/node/tasks/main.yml +++ b/ansible/roles/node/tasks/main.yml @@ -110,7 +110,7 @@ - /srv/newsblur/node:/srv/node with_items: - container_name: imageproxy - image: willnorris/imageproxy + image: ghcr.io/willnorris/imageproxy ports: 8088:8080 target_host: node-images when: item.target_host in inventory_hostname diff --git a/ansible/roles/postgres/tasks/main.yml b/ansible/roles/postgres/tasks/main.yml index ff3efb52e..54f282fe0 100644 --- a/ansible/roles/postgres/tasks/main.yml +++ b/ansible/roles/postgres/tasks/main.yml @@ -14,6 +14,13 @@ state: directory mode: 0777 +- name: Ensure postgres backup directory + become: yes + file: + path: /srv/newsblur/backups + state: directory + mode: 0777 + - name: Start postgres docker containers become: yes docker_container: @@ -63,6 +70,12 @@ notify: - reload consul +- name: Copy common secrets + copy: + src: /srv/secrets-newsblur/settings/common_settings.py + dest: /srv/newsblur/newsblur_web/local_settings.py + register: app_changed + - name: Add sanity checkers cronjob for disk usage become: yes cron: @@ -78,19 +91,19 @@ --hostname {{ ansible_hostname }} newsblur/newsblur_python3 /srv/newsblur/utils/monitor_disk_usage.py $OUTPUT +- name: Add postgres backup log + become: yes + file: + path: /var/log/postgres_backup.log + state: touch + mode: 0777 + owner: 1000 + group: 1001 + - name: Add postgres backup cron: name: postgres backup minute: "0" hour: "4" - job: >- - NOW=$(eval date +%F-%H-%M); - BACKUP_FILE=backup_postgresql_${NOW}.sql; - sudo docker exec -it postgres - /usr/lib/postgresql/13/bin/pg_dump -U newsblur -h 127.0.0.1 -Fc newsblur > backup/$BACKUP_FILE; - sudo docker run --rm -it - -v /srv/newsblur:/srv/newsblur - -v /backup/:/backup/ - --network=newsblurnet - newsblur/newsblur_python3 - python /srv/newsblur/utils/backups/backup_psql.py + job: /srv/newsblur/docker/postgres/backup_postgres.sh 1> /var/log/postgres_backup.log 2>&1 + diff --git a/ansible/roles/web/tasks/main.yml b/ansible/roles/web/tasks/main.yml index b677a1272..0329e1adf 100644 --- a/ansible/roles/web/tasks/main.yml +++ b/ansible/roles/web/tasks/main.yml @@ -77,6 +77,7 @@ ports: - "8000:8000" restart_policy: unless-stopped + user: 1000:1001 volumes: - /srv/newsblur:/srv/newsblur - /etc/hosts:/etc/hosts diff --git a/apps/api/views.py b/apps/api/views.py index cabdceeb7..f9126c970 100644 --- a/apps/api/views.py +++ b/apps/api/views.py @@ -128,7 +128,7 @@ def add_site(request, token): url = request.GET['url'] folder = request.GET['folder'] new_folder = request.GET.get('new_folder') - callback = request.GET['callback'] + callback = request.GET.get('callback', '') if not url: code = -1 @@ -217,6 +217,10 @@ def check_share_on_site(request, token): logging.user(request.user, "~FBFinding feed (check_share_on_site): %s" % rss_url) feed = Feed.get_feed_from_url(rss_url, create=False, fetch=False) + if not feed: + rss_url = urllib.parse.urljoin(story_url, rss_url) + logging.user(request.user, "~FBFinding feed (check_share_on_site): %s" % rss_url) + feed = Feed.get_feed_from_url(rss_url, create=False, fetch=False) if not feed: logging.user(request.user, "~FBFinding feed (check_share_on_site): %s" % story_url) feed = Feed.get_feed_from_url(story_url, create=False, fetch=False) diff --git a/apps/newsletters/models.py b/apps/newsletters/models.py index 1d1d942b5..75a0091d8 100644 --- a/apps/newsletters/models.py +++ b/apps/newsletters/models.py @@ -192,6 +192,9 @@ class EmailNewsletter: return params['stripped-html'] if 'body-plain' in params: return linkify(linebreaks(params['body-plain'])) + + if force_plain: + return self._get_content(params, force_plain=False) def _clean_content(self, content): original = content diff --git a/apps/profile/models.py b/apps/profile/models.py index a306b0aee..c74ee0e94 100644 --- a/apps/profile/models.py +++ b/apps/profile/models.py @@ -89,8 +89,8 @@ class Profile(models.Model): self.secret_token = generate_secret_token(self.user.username, 12) try: super(Profile, self).save(*args, **kwargs) - except DatabaseError: - print(" ---> Profile not saved. Table isn't there yet.") + except DatabaseError as e: + print(f" ---> Profile not saved: {e}") def delete_user(self, confirm=False, fast=False): if not confirm: diff --git a/apps/push/models.py b/apps/push/models.py index 00fe7e5e3..d7b4c1c31 100644 --- a/apps/push/models.py +++ b/apps/push/models.py @@ -7,6 +7,7 @@ import re from django.conf import settings from django.db import models +from django.urls import reverse import hashlib from apps.push import signals @@ -42,13 +43,9 @@ class PushSubscriptionManager(models.Manager): subscription.save() if callback is None: - # try: - # callback_path = reverse('push-callback', args=(subscription.pk,)) - # except Resolver404: - # raise TypeError('callback cannot be None if there is not a reverable URL') - # else: - # # callback = 'http://' + Site.objects.get_current() + callback_path - callback = "https://push.newsblur.com/push/%s" % subscription.pk # + callback_path + callback_path = reverse('push-callback', args=(subscription.pk,)) + callback = 'https://' + settings.PUSH_DOMAIN + callback_path + # callback = "https://push.newsblur.com/push/%s" % subscription.pk # + callback_path try: response = self._send_request(hub, { diff --git a/apps/reader/urls.py b/apps/reader/urls.py index 9c109ab1c..29bfe6525 100644 --- a/apps/reader/urls.py +++ b/apps/reader/urls.py @@ -14,6 +14,7 @@ urlpatterns = [ url(r'^page/(?P\d+)', views.load_feed_page, name='load-feed-page'), url(r'^refresh_feed/(?P\d+)', views.refresh_feed, name='refresh-feed'), url(r'^favicons', views.load_feed_favicons, name='load-feed-favicons'), + url(r'^river_stories_widget', views.load_river_stories_widget, name='load-river-stories-widget'), url(r'^river_stories', views.load_river_stories__redis, name='load-river-stories'), url(r'^complete_river', views.complete_river, name='complete-river'), url(r'^refresh_feeds', views.refresh_feeds, name='refresh-feeds'), diff --git a/apps/reader/views.py b/apps/reader/views.py index c894b5408..11c1c70e2 100644 --- a/apps/reader/views.py +++ b/apps/reader/views.py @@ -4,7 +4,13 @@ import redis import requests import random import zlib +import concurrent import re +import ssl +import socket +import base64 +import urllib.parse +import urllib.request from django.shortcuts import get_object_or_404 from django.shortcuts import render from django.contrib.auth.decorators import login_required @@ -846,10 +852,9 @@ def load_single_feed(request, feed_id): # if not usersub and feed.num_subscribers <= 1: # data = dict(code=-1, message="You must be subscribed to this feed.") + # time.sleep(random.randint(1, 3)) if delay and user.is_staff: - # import random # time.sleep(random.randint(2, 7) / 10.0) - # time.sleep(random.randint(1, 10)) time.sleep(delay) # if page == 1: # time.sleep(1) @@ -1454,7 +1459,7 @@ def load_river_stories__redis(request): story_hashes = [] unread_feed_story_hashes = [] - mstories = MStory.objects(story_hash__in=story_hashes).order_by(story_date_order) + mstories = MStory.objects(story_hash__in=story_hashes[:limit]).order_by(story_date_order) stories = Feed.format_stories(mstories) found_feed_ids = list(set([story['story_feed_id'] for story in stories])) @@ -1595,6 +1600,57 @@ def load_river_stories__redis(request): return data + +@json.json_view +def load_river_stories_widget(request): + logging.user(request, "Widget load") + river_stories_data = json.decode(load_river_stories__redis(request).content) + timeout = 3 + start = time.time() + + def load_url(url): + original_url = url + url = urllib.parse.urljoin(settings.NEWSBLUR_URL, url) + scontext = ssl.SSLContext(ssl.PROTOCOL_TLS) + scontext.verify_mode = ssl.VerifyMode.CERT_NONE + try: + conn = urllib.request.urlopen(url, context=scontext, timeout=timeout) + except urllib.request.URLError: + url = url.replace('localhost', 'haproxy') + conn = urllib.request.urlopen(url, context=scontext, timeout=timeout) + except urllib.request.URLError as e: + logging.user(request.user, '"%s" not fetched in %ss: %s' % (url, (time.time() - start), e)) + return None + except socket.timeout: + logging.user(request.user, '"%s" not fetched in %ss' % (url, (time.time() - start))) + return None + data = conn.read() + logging.user(request.user, '"%s" fetched in %ss' % (url, (time.time() - start))) + return dict(url=original_url, data=data) + + # Find the image thumbnails and download in parallel + thumbnail_urls = [] + for story in river_stories_data['stories']: + thumbnail_values = list(story['secure_image_thumbnails'].values()) + if thumbnail_values: + thumbnail_urls.append(thumbnail_values[0]) + + with concurrent.futures.ThreadPoolExecutor(max_workers=6) as executor: + pages = executor.map(load_url, thumbnail_urls) + + # Reassemble thumbnails back into stories + thumbnail_data = dict() + for page in pages: + if not page: continue + thumbnail_data[page['url']] = base64.b64encode(page['data']).decode('utf-8') + for story in river_stories_data['stories']: + thumbnail_values = list(story['secure_image_thumbnails'].values()) + if thumbnail_values and thumbnail_values[0] in thumbnail_data: + story['select_thumbnail_data'] = thumbnail_data[thumbnail_values[0]] + + logging.user(request, ("Elapsed Time: %ss" % (time.time() - start))) + + return river_stories_data @json.json_view def complete_river(request): @@ -2199,7 +2255,11 @@ def delete_feeds_by_folder(request): @json.json_view def rename_feed(request): feed = get_object_or_404(Feed, pk=int(request.POST['feed_id'])) - user_sub = UserSubscription.objects.get(user=request.user, feed=feed) + try: + user_sub = UserSubscription.objects.get(user=request.user, feed=feed) + except UserSubscription.DoesNotExist: + return dict(code=-1, message=f"You are not subscribed to {feed.feed_title}") + feed_title = request.POST['feed_title'] logging.user(request, "~FRRenaming feed '~SB%s~SN' to: ~SB%s" % ( diff --git a/apps/static/views.py b/apps/static/views.py index 8c2d96fa5..c5c98f05c 100644 --- a/apps/static/views.py +++ b/apps/static/views.py @@ -29,10 +29,19 @@ def privacy(request): def tos(request): return render(request, 'static/tos.xhtml') - + +def webmanifest(request): + filename = settings.MEDIA_ROOT + '/extensions/edge/manifest.json' + manifest = open(filename).read() + + return HttpResponse(manifest, content_type='application/manifest+json') + def apple_app_site_assoc(request): return render(request, 'static/apple_app_site_assoc.xhtml') +def apple_developer_merchantid(request): + return render(request, 'static/apple_developer_merchantid.xhtml') + def feedback(request): return render(request, 'static/feedback.xhtml') diff --git a/utils/jammit.py b/archive/jammit.py similarity index 100% rename from utils/jammit.py rename to archive/jammit.py diff --git a/config/munin/aws_elb_latency b/archive/munin/aws_elb_latency similarity index 100% rename from config/munin/aws_elb_latency rename to archive/munin/aws_elb_latency diff --git a/config/munin/aws_elb_requests b/archive/munin/aws_elb_requests similarity index 100% rename from config/munin/aws_elb_requests rename to archive/munin/aws_elb_requests diff --git a/config/munin/aws_sqs_queue_length_ b/archive/munin/aws_sqs_queue_length_ similarity index 100% rename from config/munin/aws_sqs_queue_length_ rename to archive/munin/aws_sqs_queue_length_ diff --git a/config/munin/cassandra_cfcounts b/archive/munin/cassandra_cfcounts similarity index 100% rename from config/munin/cassandra_cfcounts rename to archive/munin/cassandra_cfcounts diff --git a/config/munin/cassandra_key_cache_ratio b/archive/munin/cassandra_key_cache_ratio similarity index 100% rename from config/munin/cassandra_key_cache_ratio rename to archive/munin/cassandra_key_cache_ratio diff --git a/config/munin/cassandra_latency b/archive/munin/cassandra_latency similarity index 100% rename from config/munin/cassandra_latency rename to archive/munin/cassandra_latency diff --git a/config/munin/cassandra_load b/archive/munin/cassandra_load similarity index 100% rename from config/munin/cassandra_load rename to archive/munin/cassandra_load diff --git a/config/munin/cassandra_pending b/archive/munin/cassandra_pending similarity index 100% rename from config/munin/cassandra_pending rename to archive/munin/cassandra_pending diff --git a/config/munin/ddwrt_wl_rate b/archive/munin/ddwrt_wl_rate similarity index 100% rename from config/munin/ddwrt_wl_rate rename to archive/munin/ddwrt_wl_rate diff --git a/config/munin/ddwrt_wl_signal b/archive/munin/ddwrt_wl_signal similarity index 100% rename from config/munin/ddwrt_wl_signal rename to archive/munin/ddwrt_wl_signal diff --git a/config/munin/gearman_connections b/archive/munin/gearman_connections similarity index 100% rename from config/munin/gearman_connections rename to archive/munin/gearman_connections diff --git a/config/munin/gearman_queues b/archive/munin/gearman_queues similarity index 100% rename from config/munin/gearman_queues rename to archive/munin/gearman_queues diff --git a/config/munin/haproxy b/archive/munin/haproxy similarity index 100% rename from config/munin/haproxy rename to archive/munin/haproxy diff --git a/config/munin/hookbox b/archive/munin/hookbox similarity index 100% rename from config/munin/hookbox rename to archive/munin/hookbox diff --git a/config/munin/loadavg b/archive/munin/loadavg similarity index 100% rename from config/munin/loadavg rename to archive/munin/loadavg diff --git a/config/munin/memcached_bytes b/archive/munin/memcached_bytes similarity index 100% rename from config/munin/memcached_bytes rename to archive/munin/memcached_bytes diff --git a/config/munin/memcached_connections b/archive/munin/memcached_connections similarity index 100% rename from config/munin/memcached_connections rename to archive/munin/memcached_connections diff --git a/config/munin/memcached_curr_items b/archive/munin/memcached_curr_items similarity index 100% rename from config/munin/memcached_curr_items rename to archive/munin/memcached_curr_items diff --git a/config/munin/memcached_items b/archive/munin/memcached_items similarity index 100% rename from config/munin/memcached_items rename to archive/munin/memcached_items diff --git a/config/munin/memcached_queries b/archive/munin/memcached_queries similarity index 100% rename from config/munin/memcached_queries rename to archive/munin/memcached_queries diff --git a/config/munin/mongo_btree b/archive/munin/mongo_btree similarity index 100% rename from config/munin/mongo_btree rename to archive/munin/mongo_btree diff --git a/config/munin/mongo_indexsize b/archive/munin/mongo_indexsize similarity index 100% rename from config/munin/mongo_indexsize rename to archive/munin/mongo_indexsize diff --git a/config/munin/mongo_mem b/archive/munin/mongo_mem similarity index 100% rename from config/munin/mongo_mem rename to archive/munin/mongo_mem diff --git a/config/munin/mongo_ops b/archive/munin/mongo_ops similarity index 100% rename from config/munin/mongo_ops rename to archive/munin/mongo_ops diff --git a/config/munin/mongodb_conn b/archive/munin/mongodb_conn similarity index 100% rename from config/munin/mongodb_conn rename to archive/munin/mongodb_conn diff --git a/config/munin/mongodb_heap_usage b/archive/munin/mongodb_heap_usage similarity index 100% rename from config/munin/mongodb_heap_usage rename to archive/munin/mongodb_heap_usage diff --git a/config/munin/mongodb_objects_newsblur b/archive/munin/mongodb_objects_newsblur similarity index 100% rename from config/munin/mongodb_objects_newsblur rename to archive/munin/mongodb_objects_newsblur diff --git a/config/munin/mongodb_ops b/archive/munin/mongodb_ops similarity index 100% rename from config/munin/mongodb_ops rename to archive/munin/mongodb_ops diff --git a/config/munin/mongodb_page_faults b/archive/munin/mongodb_page_faults similarity index 100% rename from config/munin/mongodb_page_faults rename to archive/munin/mongodb_page_faults diff --git a/config/munin/mongodb_queues b/archive/munin/mongodb_queues similarity index 100% rename from config/munin/mongodb_queues rename to archive/munin/mongodb_queues diff --git a/config/munin/mongodb_replset_lag b/archive/munin/mongodb_replset_lag similarity index 100% rename from config/munin/mongodb_replset_lag rename to archive/munin/mongodb_replset_lag diff --git a/config/munin/mongodb_size_newsblur b/archive/munin/mongodb_size_newsblur similarity index 100% rename from config/munin/mongodb_size_newsblur rename to archive/munin/mongodb_size_newsblur diff --git a/vendor/munin/__init__.py b/archive/munin/munin/__init__.py similarity index 100% rename from vendor/munin/__init__.py rename to archive/munin/munin/__init__.py diff --git a/vendor/munin/cassandra.py b/archive/munin/munin/cassandra.py similarity index 100% rename from vendor/munin/cassandra.py rename to archive/munin/munin/cassandra.py diff --git a/vendor/munin/ddwrt.py b/archive/munin/munin/ddwrt.py similarity index 100% rename from vendor/munin/ddwrt.py rename to archive/munin/munin/ddwrt.py diff --git a/vendor/munin/gearman.py b/archive/munin/munin/gearman.py similarity index 100% rename from vendor/munin/gearman.py rename to archive/munin/munin/gearman.py diff --git a/vendor/munin/memcached.py b/archive/munin/munin/memcached.py similarity index 100% rename from vendor/munin/memcached.py rename to archive/munin/munin/memcached.py diff --git a/vendor/munin/mongodb.py b/archive/munin/munin/mongodb.py similarity index 100% rename from vendor/munin/mongodb.py rename to archive/munin/munin/mongodb.py diff --git a/vendor/munin/mysql.py b/archive/munin/munin/mysql.py similarity index 100% rename from vendor/munin/mysql.py rename to archive/munin/munin/mysql.py diff --git a/vendor/munin/nginx.py b/archive/munin/munin/nginx.py similarity index 100% rename from vendor/munin/nginx.py rename to archive/munin/munin/nginx.py diff --git a/vendor/munin/pgbouncer.py b/archive/munin/munin/pgbouncer.py similarity index 100% rename from vendor/munin/pgbouncer.py rename to archive/munin/munin/pgbouncer.py diff --git a/vendor/munin/postgres.py b/archive/munin/munin/postgres.py similarity index 100% rename from vendor/munin/postgres.py rename to archive/munin/munin/postgres.py diff --git a/vendor/munin/redis.py b/archive/munin/munin/redis.py similarity index 100% rename from vendor/munin/redis.py rename to archive/munin/munin/redis.py diff --git a/vendor/munin/riak.py b/archive/munin/munin/riak.py similarity index 100% rename from vendor/munin/riak.py rename to archive/munin/munin/riak.py diff --git a/config/munin/mysql_dbrows_ b/archive/munin/mysql_dbrows_ similarity index 100% rename from config/munin/mysql_dbrows_ rename to archive/munin/mysql_dbrows_ diff --git a/config/munin/mysql_dbsize_ b/archive/munin/mysql_dbsize_ similarity index 100% rename from config/munin/mysql_dbsize_ rename to archive/munin/mysql_dbsize_ diff --git a/config/munin/nginx_connections b/archive/munin/nginx_connections similarity index 100% rename from config/munin/nginx_connections rename to archive/munin/nginx_connections diff --git a/config/munin/nginx_requests b/archive/munin/nginx_requests similarity index 100% rename from config/munin/nginx_requests rename to archive/munin/nginx_requests diff --git a/config/munin/path_size b/archive/munin/path_size similarity index 100% rename from config/munin/path_size rename to archive/munin/path_size diff --git a/config/munin/pg_newsblur_connections b/archive/munin/pg_newsblur_connections similarity index 100% rename from config/munin/pg_newsblur_connections rename to archive/munin/pg_newsblur_connections diff --git a/config/munin/pg_newsblur_db_size b/archive/munin/pg_newsblur_db_size similarity index 100% rename from config/munin/pg_newsblur_db_size rename to archive/munin/pg_newsblur_db_size diff --git a/config/munin/pg_newsblur_locks b/archive/munin/pg_newsblur_locks similarity index 100% rename from config/munin/pg_newsblur_locks rename to archive/munin/pg_newsblur_locks diff --git a/config/munin/pg_newsblur_stat_bgwriter b/archive/munin/pg_newsblur_stat_bgwriter similarity index 100% rename from config/munin/pg_newsblur_stat_bgwriter rename to archive/munin/pg_newsblur_stat_bgwriter diff --git a/config/munin/pg_newsblur_stat_database b/archive/munin/pg_newsblur_stat_database similarity index 100% rename from config/munin/pg_newsblur_stat_database rename to archive/munin/pg_newsblur_stat_database diff --git a/config/munin/pg_newsblur_stat_tables b/archive/munin/pg_newsblur_stat_tables similarity index 100% rename from config/munin/pg_newsblur_stat_tables rename to archive/munin/pg_newsblur_stat_tables diff --git a/config/munin/pg_newsblur_statio_tables b/archive/munin/pg_newsblur_statio_tables similarity index 100% rename from config/munin/pg_newsblur_statio_tables rename to archive/munin/pg_newsblur_statio_tables diff --git a/config/munin/pgbouncer_pools_cl_ b/archive/munin/pgbouncer_pools_cl_ similarity index 100% rename from config/munin/pgbouncer_pools_cl_ rename to archive/munin/pgbouncer_pools_cl_ diff --git a/config/munin/pgbouncer_pools_sv_ b/archive/munin/pgbouncer_pools_sv_ similarity index 100% rename from config/munin/pgbouncer_pools_sv_ rename to archive/munin/pgbouncer_pools_sv_ diff --git a/config/munin/pgbouncer_stats_avg_bytes_ b/archive/munin/pgbouncer_stats_avg_bytes_ similarity index 100% rename from config/munin/pgbouncer_stats_avg_bytes_ rename to archive/munin/pgbouncer_stats_avg_bytes_ diff --git a/config/munin/pgbouncer_stats_avg_query_ b/archive/munin/pgbouncer_stats_avg_query_ similarity index 100% rename from config/munin/pgbouncer_stats_avg_query_ rename to archive/munin/pgbouncer_stats_avg_query_ diff --git a/config/munin/pgbouncer_stats_avg_req_ b/archive/munin/pgbouncer_stats_avg_req_ similarity index 100% rename from config/munin/pgbouncer_stats_avg_req_ rename to archive/munin/pgbouncer_stats_avg_req_ diff --git a/config/munin/postgres_block_read_ b/archive/munin/postgres_block_read_ similarity index 100% rename from config/munin/postgres_block_read_ rename to archive/munin/postgres_block_read_ diff --git a/config/munin/postgres_commits_ b/archive/munin/postgres_commits_ similarity index 100% rename from config/munin/postgres_commits_ rename to archive/munin/postgres_commits_ diff --git a/config/munin/postgres_connections b/archive/munin/postgres_connections similarity index 100% rename from config/munin/postgres_connections rename to archive/munin/postgres_connections diff --git a/config/munin/postgres_locks b/archive/munin/postgres_locks similarity index 100% rename from config/munin/postgres_locks rename to archive/munin/postgres_locks diff --git a/config/munin/postgres_queries_ b/archive/munin/postgres_queries_ similarity index 100% rename from config/munin/postgres_queries_ rename to archive/munin/postgres_queries_ diff --git a/config/munin/postgres_space_ b/archive/munin/postgres_space_ similarity index 100% rename from config/munin/postgres_space_ rename to archive/munin/postgres_space_ diff --git a/config/munin/postgres_table_sizes b/archive/munin/postgres_table_sizes similarity index 100% rename from config/munin/postgres_table_sizes rename to archive/munin/postgres_table_sizes diff --git a/config/munin/redis_active_connections b/archive/munin/redis_active_connections similarity index 100% rename from config/munin/redis_active_connections rename to archive/munin/redis_active_connections diff --git a/config/munin/redis_commands b/archive/munin/redis_commands similarity index 100% rename from config/munin/redis_commands rename to archive/munin/redis_commands diff --git a/config/munin/redis_connects b/archive/munin/redis_connects similarity index 100% rename from config/munin/redis_connects rename to archive/munin/redis_connects diff --git a/config/munin/redis_sessions_active_connections b/archive/munin/redis_sessions_active_connections similarity index 100% rename from config/munin/redis_sessions_active_connections rename to archive/munin/redis_sessions_active_connections diff --git a/config/munin/redis_sessions_connects b/archive/munin/redis_sessions_connects similarity index 100% rename from config/munin/redis_sessions_connects rename to archive/munin/redis_sessions_connects diff --git a/config/munin/redis_sessions_size b/archive/munin/redis_sessions_size similarity index 100% rename from config/munin/redis_sessions_size rename to archive/munin/redis_sessions_size diff --git a/config/munin/redis_sessions_used_memory b/archive/munin/redis_sessions_used_memory similarity index 100% rename from config/munin/redis_sessions_used_memory rename to archive/munin/redis_sessions_used_memory diff --git a/config/munin/redis_sesssions_commands b/archive/munin/redis_sesssions_commands similarity index 100% rename from config/munin/redis_sesssions_commands rename to archive/munin/redis_sesssions_commands diff --git a/config/munin/redis_size b/archive/munin/redis_size similarity index 100% rename from config/munin/redis_size rename to archive/munin/redis_size diff --git a/config/munin/redis_story_active_connections b/archive/munin/redis_story_active_connections similarity index 100% rename from config/munin/redis_story_active_connections rename to archive/munin/redis_story_active_connections diff --git a/config/munin/redis_story_commands b/archive/munin/redis_story_commands similarity index 100% rename from config/munin/redis_story_commands rename to archive/munin/redis_story_commands diff --git a/config/munin/redis_story_connects b/archive/munin/redis_story_connects similarity index 100% rename from config/munin/redis_story_connects rename to archive/munin/redis_story_connects diff --git a/config/munin/redis_story_size b/archive/munin/redis_story_size similarity index 100% rename from config/munin/redis_story_size rename to archive/munin/redis_story_size diff --git a/config/munin/redis_story_used_memory b/archive/munin/redis_story_used_memory similarity index 100% rename from config/munin/redis_story_used_memory rename to archive/munin/redis_story_used_memory diff --git a/config/munin/redis_used_memory b/archive/munin/redis_used_memory similarity index 100% rename from config/munin/redis_used_memory rename to archive/munin/redis_used_memory diff --git a/config/munin/request_time b/archive/munin/request_time similarity index 100% rename from config/munin/request_time rename to archive/munin/request_time diff --git a/config/munin/riak_ops b/archive/munin/riak_ops similarity index 100% rename from config/munin/riak_ops rename to archive/munin/riak_ops diff --git a/config/munin/tc_size b/archive/munin/tc_size similarity index 100% rename from config/munin/tc_size rename to archive/munin/tc_size diff --git a/newsblur_web/settings.py.orig b/archive/settings.py.orig similarity index 100% rename from newsblur_web/settings.py.orig rename to archive/settings.py.orig diff --git a/clients/android/NewsBlur/src/com/newsblur/subscription/SubscriptionManager.kt b/clients/android/NewsBlur/src/com/newsblur/subscription/SubscriptionManager.kt index cfdf506dc..761f7d89f 100644 --- a/clients/android/NewsBlur/src/com/newsblur/subscription/SubscriptionManager.kt +++ b/clients/android/NewsBlur/src/com/newsblur/subscription/SubscriptionManager.kt @@ -25,6 +25,7 @@ import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Deferred import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import java.text.DateFormat @@ -57,7 +58,7 @@ interface SubscriptionManager { /** * Sync subscription state between NewsBlur and Play Store. */ - suspend fun syncActiveSubscription() + suspend fun syncActiveSubscription(): Job /** * Notify backend of active Play Store subscription. @@ -175,7 +176,7 @@ class SubscriptionManagerImpl( billingClient.launchBillingFlow(activity, billingFlowParams) } - override suspend fun syncActiveSubscription() { + override suspend fun syncActiveSubscription() = scope.launch(Dispatchers.Default) { val hasNewsBlurSubscription = PrefsUtils.getIsPremium(context) val activePlayStoreSubscription = getActiveSubscriptionAsync().await() diff --git a/config/requirements.txt b/config/requirements.txt index d67419bbd..8fa856888 100644 --- a/config/requirements.txt +++ b/config/requirements.txt @@ -1,5 +1,4 @@ amqp==2.6.1 -anyjson==0.3.3 apns2==0.7.2 appdirs==1.4.4 asgiref==3.3.4 @@ -25,8 +24,9 @@ django-cors-middleware==1.3.1 django-extensions==3.1.0 django-nose==1.4.7 django-oauth-toolkit==1.3.3 -django-paypal==1.0.0 +django-paypal==1.1.2 django-qurl==0.1.1 +django-pipeline>=2,<3 django-redis-cache==3.0.0 django-redis-sessions==0.6.1 django-ses==1.0.3 @@ -74,11 +74,12 @@ numpy==1.19.4 oauth2==1.9.0.post1 oauthlib==3.1.0 packaging==20.9 +paypalrestsdk==1.13.1 pbr==5.6.0 Pillow==8.0.1 pluggy==0.13.1 psutil==5.7.3 -psycopg2==2.8.6 +psycopg2==2.9.2 py==1.10.0 pyasn1==0.4.8 pycparser==2.20 diff --git a/docker-compose.yml b/docker-compose.yml index 0ec5dc934..144aea2ec 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,6 +5,7 @@ services: hostname: nb.com container_name: newsblur_web image: newsblur/newsblur_${NEWSBLUR_BASE:-python3}:latest + user: "${CURRENT_UID}:${CURRENT_GID}" environment: - DOCKERBUILD=True - RUNWITHMAKEBUILD=${RUNWITHMAKEBUILD?Use the `make` command instead of docker CLI} @@ -29,8 +30,9 @@ services: - ${PWD}:/srv/newsblur newsblur_node: - image: newsblur/newsblur_node:latest container_name: node + image: newsblur/newsblur_node:latest + user: "${CURRENT_UID}:${CURRENT_GID}" environment: - NODE_ENV=docker - MONGODB_PORT=29019 @@ -47,8 +49,9 @@ services: - ${PWD}/node:/srv imageproxy: - image: willnorris/imageproxy:latest container_name: imageproxy + image: ghcr.io/willnorris/imageproxy:latest + user: "${CURRENT_UID}:${CURRENT_GID}" entrypoint: /app/imageproxy -addr 0.0.0.0:8088 -cache /tmp/imageproxy -verbose restart: unless-stopped ports: @@ -93,20 +96,20 @@ services: - ./docker/volumes/postgres:/var/lib/postgresql/data db_redis: + container_name: db_redis image: redis:latest ports: - 6579:6579 - container_name: db_redis restart: unless-stopped volumes: - - ./config/redis.conf:/etc/redis/redis.conf - - ./config/redis_docker.conf:/etc/redis/redis_server.conf - - ./docker/volumes/redis:/var/lib/redis + - ./docker/redis/redis.conf:/etc/redis/redis.conf + - ./docker/redis/redis_server.conf:/usr/local/etc/redis/redis_replica.conf + - ./docker/volumes/redis:/data command: redis-server /etc/redis/redis.conf --port 6579 db_elasticsearch: container_name: db_elasticsearch - image: docker.elastic.co/elasticsearch/elasticsearch:7.11.1 + image: docker.elastic.co/elasticsearch/elasticsearch:7.16.2 mem_limit: 512mb restart: unless-stopped environment: @@ -131,13 +134,13 @@ services: task_celery: container_name: task_celery image: newsblur/newsblur_python3 + user: "${CURRENT_UID}:${CURRENT_GID}" command: "celery worker -A newsblur_web -B --loglevel=INFO" restart: unless-stopped volumes: - ${PWD}:/srv/newsblur environment: - DOCKERBUILD=True - user: "${CURRENT_UID}:${CURRENT_GID}" haproxy: container_name: haproxy diff --git a/docker/haproxy/haproxy.consul.cfg.j2 b/docker/haproxy/haproxy.consul.cfg.j2 index 610efd5e8..9a8a9362c 100644 --- a/docker/haproxy/haproxy.consul.cfg.j2 +++ b/docker/haproxy/haproxy.consul.cfg.j2 @@ -47,6 +47,9 @@ frontend public acl mx_mode nbsrv(maintenance) lt 1 acl is_unread_count url_beg /reader/feed_unread_count acl is_refresh_feeds url_beg /reader/refresh_feed + acl is_original_text url_beg /rss_feeds/original_text + acl is_river url_beg /reader/river_stories + acl is_automated_river urlp(h) -m found acl is_dashboard url_param(dashboard) -i true monitor-uri /status @@ -80,6 +83,8 @@ frontend public use_backend app_counts if is_unread_count use_backend app_refresh if is_refresh_feeds use_backend app_refresh if is_dashboard + use_backend app_refresh if is_original_text + use_backend app_refresh if is_river is_automated_river use_backend app_django unless gunicorn_dead || nginx_dead backend nginx @@ -224,7 +229,7 @@ backend maintenance option httpchk HEAD /maintenance http-check expect status 404 http-check send-state - server maintenance app-django1.node.nyc1.consul:80 check inter 2000ms resolvers consul resolve-prefer ipv4 resolve-opts allow-dup-ip init-addr none + server maintenance app-counts1.node.nyc1.consul:80 check inter 2000ms resolvers consul resolve-prefer ipv4 resolve-opts allow-dup-ip init-addr none listen stats bind :1936 ssl crt {{ ssl_certificate }} diff --git a/docker/haproxy/haproxy.staging.cfg b/docker/haproxy/haproxy.staging.cfg index 51018c17b..aad1fcb3a 100644 --- a/docker/haproxy/haproxy.staging.cfg +++ b/docker/haproxy/haproxy.staging.cfg @@ -41,6 +41,9 @@ frontend public acl mx_mode nbsrv(maintenance) lt 1 acl is_unread_count url_beg /reader/feed_unread_count acl is_refresh_feeds url_beg /reader/refresh_feed + acl is_original_text url_beg /rss_feeds/original_text + acl is_river url_beg /reader/river_stories + acl is_automated_river urlp(h) -m found acl is_dashboard url_param(dashboard) -i true monitor-uri /status @@ -68,6 +71,8 @@ frontend public use_backend app_django_counts if is_unread_count use_backend app_django_refresh if is_refresh_feeds use_backend app_django_refresh if is_dashboard + use_backend app_django_refresh if is_original_text + use_backend app_django_refresh if is_river is_automated_river use_backend app_django unless gunicorn_dead || nginx_dead @@ -121,7 +126,7 @@ backend maintenance server nginx localhost:81 check inter 60000ms listen stats -bind :1936 ssl crt /srv/newsblur/config/certificates/newsblur.com.pem +bind :1936 ssl crt /srv/newsblur/config/certificates/newsblur.com.pem ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES128-SHA:AES256-SHA256:AES256-SHA no-sslv3 stats enable stats hide-version stats realm Haproxy\ Statistics diff --git a/docker/mongo/backup_mongo.sh b/docker/mongo/backup_mongo.sh index be67a8c7e..c3b97c66f 100755 --- a/docker/mongo/backup_mongo.sh +++ b/docker/mongo/backup_mongo.sh @@ -1,34 +1,66 @@ #!/usr/bin/env bash collections=( - classifier_tag - classifier_author - classifier_feed - classifier_title - # shared_stories + activities category category_site - sent_emails - social_profile - social_subscription - social_services - statistics - user_search + classifier_author + classifier_feed + classifier_tag + classifier_title + custom_styling + dashboard_river + # feed_icons + # feed_pages feedback + # fetch_exception_history + # fetch_history + follow_request + gift_codes + inline + interactions + m_dashboard_river + notification_tokens + notifications + popularity_query + redeemed_codes + saved_searches + sent_emails + # shared_stories + social_invites + social_profile + social_services + social_subscription + # starred_stories + starred_stories_counts + statistics + # stories + system.profile + system.users + # uploaded_opml + user_search ) +if [ "$1" = "stories" ]; then + collections+=( + shared_stories + starred_stories + ) +fi + +now=$(date '+%Y-%m-%d-%H-%M') + for collection in ${collections[@]}; do - now=$(date '+%Y-%m-%d-%H-%M') echo "---> Dumping $collection - ${now}" - docker exec -it mongo mongodump -d newsblur -c $collection -o /backup/backup_mongo + docker exec -it mongo mongodump -d newsblur -c $collection -o /backup done; -echo " ---> Compressing backup_mongo.tgz" -tar -zcf /opt/mongo/newsblur/backup/backup_mongo.tgz /opt/mongo/newsblur/backup/backup_mongo +echo " ---> Compressing /srv/newsblur/backup/newsblur into /srv/newsblur/backup/backup_mongo_${now}.tgz" +tar -zcf /srv/newsblur/backup/backup_mongo_${now}.tgz -C / srv/newsblur/backup/newsblur echo " ---> Uploading backups to S3" -docker run --rm -v /srv/newsblur:/srv/newsblur -v /opt/mongo/newsblur/backup/:/opt/mongo/newsblur/backup/ --network=newsblurnet newsblur/newsblur_python3:latest python /srv/newsblur/utils/backups/backup_mongo.py +docker run --user 1000:1001 --rm -v /srv/newsblur:/srv/newsblur -v /srv/newsblur/backup/:/srv/newsblur/backup/ --network=host newsblur/newsblur_python3:latest python /srv/newsblur/utils/backups/backup_mongo.py # Don't delete backup since the backup_mongo.py script will rm them ## rm /opt/mongo/newsblur/backup/backup_mongo_${now}.tgz diff --git a/docker/monitor/Dockerfile b/docker/monitor/Dockerfile index ad8709a13..3aad1bd48 100644 --- a/docker/monitor/Dockerfile +++ b/docker/monitor/Dockerfile @@ -11,7 +11,6 @@ RUN set -ex \ && buildDeps=' \ patch \ gfortran \ - lib32ncurses5-dev \ libblas-dev \ libffi-dev \ libjpeg-dev \ diff --git a/docker/newsblur_base_image.Dockerfile b/docker/newsblur_base_image.Dockerfile index f75d2c271..c48dd3fae 100644 --- a/docker/newsblur_base_image.Dockerfile +++ b/docker/newsblur_base_image.Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.9-slim +FROM python:3.9-slim WORKDIR /srv/newsblur ENV PYTHONPATH=/srv/newsblur RUN set -ex \ @@ -10,7 +10,6 @@ RUN set -ex \ && buildDeps=' \ patch \ gfortran \ - lib32ncurses5-dev \ libblas-dev \ libffi-dev \ libjpeg-dev \ @@ -25,6 +24,6 @@ RUN set -ex \ && apt-get update \ && apt-get install -y $rundDeps $buildDeps --no-install-recommends COPY config/requirements.txt /srv/newsblur/ -RUN pip install -r requirements.txt \ - && apt-get purge -y --auto-remove ${buildDeps} \ - && rm -rf /var/lib/apt/lists/* +RUN pip install -r requirements.txt +RUN apt-get purge -y --auto-remove ${buildDeps} +RUN rm -rf /var/lib/apt/lists/* diff --git a/docker/newsblur_deploy.Dockerfile b/docker/newsblur_deploy.Dockerfile new file mode 100644 index 000000000..e1b943508 --- /dev/null +++ b/docker/newsblur_deploy.Dockerfile @@ -0,0 +1,27 @@ +FROM newsblur/newsblur_python3 +ENV DOCKERBUILD=True + +RUN apt update +RUN apt install -y curl + +# Install Java +# Install OpenJDK-11 +RUN apt install -y openjdk-11-jre-headless +ENV JAVA_HOME /usr/lib/jvm/java-11-openjdk-amd64/ +RUN export JAVA_HOME +WORKDIR /tmp +RUN apt install wget unzip +RUN wget "https://dl.google.com/closure-compiler/compiler-20200719.zip" +RUN unzip "compiler-20200719.zip" +RUN mv closure-compiler-v20200719.jar /usr/local/bin/compiler.jar + +# Install Node +RUN curl -fsSL https://deb.nodesource.com/setup_current.x | bash - +RUN apt install -y nodejs build-essential +RUN npm -g install yuglify + +# Cleanup +RUN apt-get clean + +WORKDIR /srv/newsblur +CMD python manage.py collectstatic --no-input --clear -v 1 -l diff --git a/docker/nginx/Dockerfile b/docker/nginx/Dockerfile deleted file mode 100644 index 86eb66307..000000000 --- a/docker/nginx/Dockerfile +++ /dev/null @@ -1,2 +0,0 @@ -FROM nginx:latest -COPY ./docker/nginx /etc/nginx/conf.d \ No newline at end of file diff --git a/docker/nginx/nginx.consul.conf.j2 b/docker/nginx/nginx.consul.conf.j2 index 3995022bb..c3d1170f5 100644 --- a/docker/nginx/nginx.consul.conf.j2 +++ b/docker/nginx/nginx.consul.conf.j2 @@ -61,6 +61,7 @@ server { } location /static/ { + gzip_static on; expires max; keepalive_timeout 1; root /srv/newsblur; diff --git a/docker/nginx/nginx.local.conf b/docker/nginx/nginx.local.conf index 7f797ed91..41f917e35 100644 --- a/docker/nginx/nginx.local.conf +++ b/docker/nginx/nginx.local.conf @@ -64,6 +64,7 @@ server { } location /static/ { + gzip_static on; expires max; keepalive_timeout 1; root /srv/newsblur; diff --git a/docker/postgres/backup_postgres.sh b/docker/postgres/backup_postgres.sh new file mode 100755 index 000000000..97d5c8b16 --- /dev/null +++ b/docker/postgres/backup_postgres.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash + +now=$(date '+%Y-%m-%d-%H-%M') + +echo "---> PG dumping - ${now}" +BACKUP_FILE="/srv/newsblur/backup/backup_postgresql_${now}.sql" +sudo docker exec -it postgres /usr/lib/postgresql/13/bin/pg_dump -U newsblur -h 127.0.0.1 -Fc newsblur > $BACKUP_FILE + +echo " ---> Uploading postgres backup to S3" +sudo docker run --user 1000:1001 --rm \ + -v /srv/newsblur:/srv/newsblur \ + --network=host \ + newsblur/newsblur_python3 \ + python /srv/newsblur/utils/backups/backup_psql.py + +# Don't delete backup since the backup_mongo.py script will rm them +## rm /opt/mongo/newsblur/backup/backup_mongo_${now}.tgz +## rm /opt/mongo/newsblur/backup/backup_mongo_${now} +echo " ---> Finished uploading backups to S3: " diff --git a/docker/redis/redis_server.conf b/docker/redis/redis_server.conf new file mode 100644 index 000000000..e69de29bb diff --git a/flask_metrics/flask_metrics_mongo.py b/flask_metrics/flask_metrics_mongo.py index 9b8e4b2c5..38169a3d2 100644 --- a/flask_metrics/flask_metrics_mongo.py +++ b/flask_metrics/flask_metrics_mongo.py @@ -22,7 +22,12 @@ MONGO_HOST = settings.SERVER_NAME @app.route("/objects/") def objects(): - stats = connection.newsblur.command("dbstats") + try: + stats = connection.newsblur.command("dbstats") + except pymongo.errors.OperationFailure as e: + return Response(f"Operation failure: {e}", 500) + except pymongo.errors.NotMasterError as e: + return Response(f"NotMaster error: {e}", 500) data = dict(objects=stats['objects']) formatted_data = {} for k, v in data.items(): @@ -67,10 +72,15 @@ def repl_set_lag(): return primary_optime - oldest_secondary_optime - # no such item for Cursor instance - oplog_length = _get_oplog_length() - # not running with --replSet - replication_lag = _get_max_replication_lag() + try: + # no such item for Cursor instance + oplog_length = _get_oplog_length() + # not running with --replSet + replication_lag = _get_max_replication_lag() + except pymongo.errors.OperationFailure as e: + return Response(f"Operation failure: {e}", 500) + except pymongo.errors.NotMasterError as e: + return Response(f"NotMaster error: {e}", 500) formatted_data = {} for k, v in oplog_length.items(): @@ -89,7 +99,12 @@ def repl_set_lag(): @app.route("/size/") def size(): - stats = connection.newsblur.command("dbstats") + try: + stats = connection.newsblur.command("dbstats") + except pymongo.errors.OperationFailure as e: + return Response(f"Operation failure: {e}", 500) + except pymongo.errors.NotMasterError as e: + return Response(f"NotMaster error: {e}", 500) data = dict(size=stats['fsUsedSize']) formatted_data = {} for k, v in data.items(): @@ -106,7 +121,12 @@ def size(): @app.route("/ops/") def ops(): - status = connection.admin.command('serverStatus') + try: + status = connection.admin.command('serverStatus') + except pymongo.errors.OperationFailure as e: + return Response(f"Operation failure: {e}", 500) + except pymongo.errors.NotMasterError as e: + return Response(f"NotMaster error: {e}", 500) data = dict( (q, status["opcounters"][q]) for q in status['opcounters'].keys() @@ -127,7 +147,12 @@ def ops(): @app.route("/page-faults/") def page_faults(): - status = connection.admin.command('serverStatus') + try: + status = connection.admin.command('serverStatus') + except pymongo.errors.OperationFailure as e: + return Response(f"Operation failure: {e}", 500) + except pymongo.errors.NotMasterError as e: + return Response(f"NotMaster error: {e}", 500) try: value = status['extra_info']['page_faults'] except KeyError: @@ -148,7 +173,12 @@ def page_faults(): @app.route("/page-queues/") def page_queues(): - status = connection.admin.command('serverStatus') + try: + status = connection.admin.command('serverStatus') + except pymongo.errors.OperationFailure as e: + return Response(f"Operation failure: {e}", 500) + except pymongo.errors.NotMasterError as e: + return Response(f"NotMaster error: {e}", 500) data = dict( (q, status["globalLock"]["currentQueue"][q]) for q in ("readers", "writers") diff --git a/flask_monitor/db_monitor.py b/flask_monitor/db_monitor.py index a2ba07c23..d6fd9979e 100644 --- a/flask_monitor/db_monitor.py +++ b/flask_monitor/db_monitor.py @@ -1,4 +1,4 @@ -from flask import Flask, abort, request +from flask import Flask, abort, request, Response import os import psycopg2 import pymysql @@ -39,7 +39,7 @@ def db_check_postgres(): conn = psycopg2.connect(connect_params) except: print(" ---> Postgres can't connect to the database: %s" % connect_params) - abort(503) + abort(Response("Can't connect to db", 503)) cur = conn.cursor() cur.execute("""SELECT id FROM feeds ORDER BY feeds.id DESC LIMIT 1""") @@ -47,7 +47,7 @@ def db_check_postgres(): for row in rows: return str(row[0]) - abort(504) + abort(Response("No rows found", 504)) @app.route("/db_check/mysql") def db_check_mysql(): @@ -70,7 +70,7 @@ def db_check_mysql(): db=settings.DATABASES['default']['NAME']) except: print(" ---> Mysql can't connect to the database: %s" % connect_params) - abort(503) + abort(Response("Can't connect to mysql db", 503)) cur = conn.cursor() cur.execute("""SELECT id FROM feeds ORDER BY feeds.id DESC LIMIT 1""") @@ -78,7 +78,7 @@ def db_check_mysql(): for row in rows: return str(row[0]) - abort(504) + abort(Response("No rows found", 504)) @app.route("/db_check/mongo") def db_check_mongo(): @@ -90,21 +90,21 @@ def db_check_mongo(): client = pymongo.MongoClient(f"mongodb://{settings.MONGO_DB['username']}:{settings.MONGO_DB['password']}@{settings.SERVER_NAME}.node.nyc1.consul/?authSource=admin") db = client.newsblur except: - abort(503) + abort(Response("Can't connect to db", 503)) try: stories = db.stories.estimated_document_count() except pymongo.errors.NotMasterError: - abort(504) + abort(Response("Not Master", 504)) except pymongo.errors.ServerSelectionTimeoutError: - abort(505) + abort(Response("Server selection timeout", 503)) except pymongo.errors.OperationFailure as e: if 'Authentication failed' in str(e): - abort(506) - abort(507) + abort(Response("Auth failed", 506)) + abort(Response("Operation Failure", 507)) if not stories: - abort(510) + abort(Response("No stories", 510)) status = client.admin.command('replSetGetStatus') members = status['members'] @@ -120,16 +120,15 @@ def db_check_mongo(): oldest_secondary_optime = optime['ts'].time if not primary_optime or not oldest_secondary_optime: - abort(511) + abort(Response("No optime", 511)) # if primary_optime - oldest_secondary_optime > 100: - # abort(512) + # abort(Response("Data is too old", 512)) return str(stories) @app.route("/db_check/mongo_analytics") def db_check_mongo_analytics(): - return str(1) if request.args.get('consul') == '1': return str(1) @@ -137,19 +136,19 @@ def db_check_mongo_analytics(): client = pymongo.MongoClient(f"mongodb://{settings.MONGO_ANALYTICS_DB['username']}:{settings.MONGO_ANALYTICS_DB['password']}@{settings.SERVER_NAME}/?authSource=admin") db = client.nbanalytics except: - abort(503) + abort(Response("Can't connect to db", 503)) try: fetches = db.feed_fetches.estimated_document_count() except (pymongo.errors.NotMasterError, pymongo.errors.ServerSelectionTimeoutError): - abort(504) + abort(Response("Not Master / Server selection timeout", 504)) except pymongo.errors.OperationFailure as e: if 'Authentication failed' in str(e): - abort(505) - abort(506) + abort(Response("Auth failed", 505)) + abort(Response("Operation failure", 506)) if not fetches: - abort(510) + abort(Response("No fetches in data", 510)) return str(fetches) @@ -161,17 +160,17 @@ def db_check_redis_user(): try: r = redis.Redis('db-redis-user.service.nyc1.consul', db=0) except: - abort(503) + abort(Response("Can't connect to db", 503)) try: randkey = r.randomkey() except: - abort(504) + abort(Response("Couldn't process randomkey", 504)) if randkey: return str(randkey) else: - abort(505) + abort(Response("Can't find a randomkey", 505)) @app.route("/db_check/redis_story") def db_check_redis_story(): @@ -181,17 +180,17 @@ def db_check_redis_story(): try: r = redis.Redis('db-redis-story.service.nyc1.consul', db=1) except: - abort(503) + abort(Response("Can't connect to db", 503)) try: randkey = r.randomkey() except: - abort(504) + abort(Response("Couldn't process randomkey", 504)) if randkey: return str(randkey) else: - abort(505) + abort(Response("Can't find a randomkey", 505)) @app.route("/db_check/redis_sessions") def db_check_redis_sessions(): @@ -201,17 +200,17 @@ def db_check_redis_sessions(): try: r = redis.Redis('db-redis-sessions.service.nyc1.consul', db=5) except: - abort(503) + abort(Response("Can't connect to db", 503)) try: randkey = r.randomkey() except: - abort(504) + abort(Response("Couldn't process randomkey", 504)) if randkey: return str(randkey) else: - abort(505) + abort(Response("Can't find a randomkey", 505)) @app.route("/db_check/redis_pubsub") def db_check_redis_pubsub(): @@ -221,24 +220,24 @@ def db_check_redis_pubsub(): try: r = redis.Redis('db-redis-pubsub.service.nyc1.consul', db=1) except: - abort(503) + abort(Response("Can't connect to db", 503)) try: pubsub_numpat = r.pubsub_numpat() except: - abort(504) + abort(Response("Couldn't process pubsub_numpat", 504)) if pubsub_numpat or isinstance(pubsub_numpat, int): return str(pubsub_numpat) else: - abort(505) + abort(Response("Can't find a pubsub_numpat", 505)) @app.route("/db_check/elasticsearch") def db_check_elasticsearch(): try: conn = elasticsearch.Elasticsearch("elasticsearch") except: - abort(503) + abort(Response("Can't connect to db", 503)) if conn.indices.exists('feeds-index'): return str("Index exists, but didn't try search") @@ -247,9 +246,9 @@ def db_check_elasticsearch(): # for result in results: # return unicode(result) # else: - # abort(404) + # abort(Response("Couldn't find any search results", 504)) else: - abort(504) + abort(Response("Couldn't find feeds-index", 504)) if __name__ == "__main__": print(" ---> Starting NewsBlur DB monitor flask server...") diff --git a/media/admin b/media/admin deleted file mode 120000 index 97e827589..000000000 --- a/media/admin +++ /dev/null @@ -1 +0,0 @@ -/usr/local/lib/python3.9/site-packages/django/contrib/admin/static/admin \ No newline at end of file diff --git a/media/android b/media/android deleted file mode 120000 index 194a89ae2..000000000 --- a/media/android +++ /dev/null @@ -1 +0,0 @@ -../clients/android \ No newline at end of file diff --git a/media/css/chosen.css b/media/css/controls/chosen.css similarity index 100% rename from media/css/chosen.css rename to media/css/controls/chosen.css diff --git a/media/css/controls.css b/media/css/controls/controls.css similarity index 100% rename from media/css/controls.css rename to media/css/controls/controls.css diff --git a/media/css/jquery.tipsy.css b/media/css/controls/jquery.tipsy.css similarity index 100% rename from media/css/jquery.tipsy.css rename to media/css/controls/jquery.tipsy.css diff --git a/media/css/jquery-theme/jquery-ui-1.7.2.custom.css b/media/css/jquery-theme/jquery-ui-1.7.2.custom.css deleted file mode 100755 index 050c2a480..000000000 --- a/media/css/jquery-theme/jquery-ui-1.7.2.custom.css +++ /dev/null @@ -1,406 +0,0 @@ -/* -* jQuery UI CSS Framework -* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) -* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. -*/ - -/* Layout helpers -----------------------------------*/ -.ui-helper-hidden { display: none; } -.ui-helper-hidden-accessible { position: absolute; left: -99999999px; } -.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } -.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } -.ui-helper-clearfix { display: inline-block; } -/* required comment for clearfix to work in Opera \*/ -* html .ui-helper-clearfix { height:1%; } -.ui-helper-clearfix { display:block; } -/* end clearfix */ -.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } - - -/* Interaction Cues -----------------------------------*/ -.ui-state-disabled { cursor: default !important; } - - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } - - -/* Misc visuals -----------------------------------*/ - -/* Overlays */ -.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } - - - -/* -* jQuery UI CSS Framework -* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) -* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. -* To view and modify this theme, visit http://jqueryui.com/themeroller/?ctl=themeroller -*/ - - -/* Component containers -----------------------------------*/ -.ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 1.1em; } -.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; } -.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_75_ffffff_1x400.png) 50% 50% repeat-x; color: #222222; } -.ui-widget-content a { color: #222222; } -.ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; } -.ui-widget-header a { color: #222222; } - -/* Interaction states -----------------------------------*/ -.ui-state-default, .ui-widget-content .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #555555; outline: none; } -.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; outline: none; } -.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus { border: 1px solid #999999; background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; outline: none; } -.ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; outline: none; } -.ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; outline: none; } -.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; outline: none; text-decoration: none; } - -/* Interaction Cues -----------------------------------*/ -.ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid #fcefa1; background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; color: #363636; } -.ui-state-highlight a, .ui-widget-content .ui-state-highlight a { color: #363636; } -.ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_inset-soft_95_fef1ec_1x100.png) 50% bottom repeat-x; color: #cd0a0a; } -.ui-state-error a, .ui-widget-content .ui-state-error a { color: #cd0a0a; } -.ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #cd0a0a; } -.ui-state-disabled, .ui-widget-content .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } -.ui-priority-primary, .ui-widget-content .ui-priority-primary { font-weight: bold; } -.ui-priority-secondary, .ui-widget-content .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); } -.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } -.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } -.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); } -.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); } -.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); } -.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); } -.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); } - -/* positioning */ -.ui-icon-carat-1-n { background-position: 0 0; } -.ui-icon-carat-1-ne { background-position: -16px 0; } -.ui-icon-carat-1-e { background-position: -32px 0; } -.ui-icon-carat-1-se { background-position: -48px 0; } -.ui-icon-carat-1-s { background-position: -64px 0; } -.ui-icon-carat-1-sw { background-position: -80px 0; } -.ui-icon-carat-1-w { background-position: -96px 0; } -.ui-icon-carat-1-nw { background-position: -112px 0; } -.ui-icon-carat-2-n-s { background-position: -128px 0; } -.ui-icon-carat-2-e-w { background-position: -144px 0; } -.ui-icon-triangle-1-n { background-position: 0 -16px; } -.ui-icon-triangle-1-ne { background-position: -16px -16px; } -.ui-icon-triangle-1-e { background-position: -32px -16px; } -.ui-icon-triangle-1-se { background-position: -48px -16px; } -.ui-icon-triangle-1-s { background-position: -64px -16px; } -.ui-icon-triangle-1-sw { background-position: -80px -16px; } -.ui-icon-triangle-1-w { background-position: -96px -16px; } -.ui-icon-triangle-1-nw { background-position: -112px -16px; } -.ui-icon-triangle-2-n-s { background-position: -128px -16px; } -.ui-icon-triangle-2-e-w { background-position: -144px -16px; } -.ui-icon-arrow-1-n { background-position: 0 -32px; } -.ui-icon-arrow-1-ne { background-position: -16px -32px; } -.ui-icon-arrow-1-e { background-position: -32px -32px; } -.ui-icon-arrow-1-se { background-position: -48px -32px; } -.ui-icon-arrow-1-s { background-position: -64px -32px; } -.ui-icon-arrow-1-sw { background-position: -80px -32px; } -.ui-icon-arrow-1-w { background-position: -96px -32px; } -.ui-icon-arrow-1-nw { background-position: -112px -32px; } -.ui-icon-arrow-2-n-s { background-position: -128px -32px; } -.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } -.ui-icon-arrow-2-e-w { background-position: -160px -32px; } -.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } -.ui-icon-arrowstop-1-n { background-position: -192px -32px; } -.ui-icon-arrowstop-1-e { background-position: -208px -32px; } -.ui-icon-arrowstop-1-s { background-position: -224px -32px; } -.ui-icon-arrowstop-1-w { background-position: -240px -32px; } -.ui-icon-arrowthick-1-n { background-position: 0 -48px; } -.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } -.ui-icon-arrowthick-1-e { background-position: -32px -48px; } -.ui-icon-arrowthick-1-se { background-position: -48px -48px; } -.ui-icon-arrowthick-1-s { background-position: -64px -48px; } -.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } -.ui-icon-arrowthick-1-w { background-position: -96px -48px; } -.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } -.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } -.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } -.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } -.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } -.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } -.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } -.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } -.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } -.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } -.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } -.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } -.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } -.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } -.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } -.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } -.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } -.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } -.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } -.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } -.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } -.ui-icon-arrow-4 { background-position: 0 -80px; } -.ui-icon-arrow-4-diag { background-position: -16px -80px; } -.ui-icon-extlink { background-position: -32px -80px; } -.ui-icon-newwin { background-position: -48px -80px; } -.ui-icon-refresh { background-position: -64px -80px; } -.ui-icon-shuffle { background-position: -80px -80px; } -.ui-icon-transfer-e-w { background-position: -96px -80px; } -.ui-icon-transferthick-e-w { background-position: -112px -80px; } -.ui-icon-folder-collapsed { background-position: 0 -96px; } -.ui-icon-folder-open { background-position: -16px -96px; } -.ui-icon-document { background-position: -32px -96px; } -.ui-icon-document-b { background-position: -48px -96px; } -.ui-icon-note { background-position: -64px -96px; } -.ui-icon-mail-closed { background-position: -80px -96px; } -.ui-icon-mail-open { background-position: -96px -96px; } -.ui-icon-suitcase { background-position: -112px -96px; } -.ui-icon-comment { background-position: -128px -96px; } -.ui-icon-person { background-position: -144px -96px; } -.ui-icon-print { background-position: -160px -96px; } -.ui-icon-trash { background-position: -176px -96px; } -.ui-icon-locked { background-position: -192px -96px; } -.ui-icon-unlocked { background-position: -208px -96px; } -.ui-icon-bookmark { background-position: -224px -96px; } -.ui-icon-tag { background-position: -240px -96px; } -.ui-icon-home { background-position: 0 -112px; } -.ui-icon-flag { background-position: -16px -112px; } -.ui-icon-calendar { background-position: -32px -112px; } -.ui-icon-cart { background-position: -48px -112px; } -.ui-icon-pencil { background-position: -64px -112px; } -.ui-icon-clock { background-position: -80px -112px; } -.ui-icon-disk { background-position: -96px -112px; } -.ui-icon-calculator { background-position: -112px -112px; } -.ui-icon-zoomin { background-position: -128px -112px; } -.ui-icon-zoomout { background-position: -144px -112px; } -.ui-icon-search { background-position: -160px -112px; } -.ui-icon-wrench { background-position: -176px -112px; } -.ui-icon-gear { background-position: -192px -112px; } -.ui-icon-heart { background-position: -208px -112px; } -.ui-icon-star { background-position: -224px -112px; } -.ui-icon-link { background-position: -240px -112px; } -.ui-icon-cancel { background-position: 0 -128px; } -.ui-icon-plus { background-position: -16px -128px; } -.ui-icon-plusthick { background-position: -32px -128px; } -.ui-icon-minus { background-position: -48px -128px; } -.ui-icon-minusthick { background-position: -64px -128px; } -.ui-icon-close { background-position: -80px -128px; } -.ui-icon-closethick { background-position: -96px -128px; } -.ui-icon-key { background-position: -112px -128px; } -.ui-icon-lightbulb { background-position: -128px -128px; } -.ui-icon-scissors { background-position: -144px -128px; } -.ui-icon-clipboard { background-position: -160px -128px; } -.ui-icon-copy { background-position: -176px -128px; } -.ui-icon-contact { background-position: -192px -128px; } -.ui-icon-image { background-position: -208px -128px; } -.ui-icon-video { background-position: -224px -128px; } -.ui-icon-script { background-position: -240px -128px; } -.ui-icon-alert { background-position: 0 -144px; } -.ui-icon-info { background-position: -16px -144px; } -.ui-icon-notice { background-position: -32px -144px; } -.ui-icon-help { background-position: -48px -144px; } -.ui-icon-check { background-position: -64px -144px; } -.ui-icon-bullet { background-position: -80px -144px; } -.ui-icon-radio-off { background-position: -96px -144px; } -.ui-icon-radio-on { background-position: -112px -144px; } -.ui-icon-pin-w { background-position: -128px -144px; } -.ui-icon-pin-s { background-position: -144px -144px; } -.ui-icon-play { background-position: 0 -160px; } -.ui-icon-pause { background-position: -16px -160px; } -.ui-icon-seek-next { background-position: -32px -160px; } -.ui-icon-seek-prev { background-position: -48px -160px; } -.ui-icon-seek-end { background-position: -64px -160px; } -.ui-icon-seek-first { background-position: -80px -160px; } -.ui-icon-stop { background-position: -96px -160px; } -.ui-icon-eject { background-position: -112px -160px; } -.ui-icon-volume-off { background-position: -128px -160px; } -.ui-icon-volume-on { background-position: -144px -160px; } -.ui-icon-power { background-position: 0 -176px; } -.ui-icon-signal-diag { background-position: -16px -176px; } -.ui-icon-signal { background-position: -32px -176px; } -.ui-icon-battery-0 { background-position: -48px -176px; } -.ui-icon-battery-1 { background-position: -64px -176px; } -.ui-icon-battery-2 { background-position: -80px -176px; } -.ui-icon-battery-3 { background-position: -96px -176px; } -.ui-icon-circle-plus { background-position: 0 -192px; } -.ui-icon-circle-minus { background-position: -16px -192px; } -.ui-icon-circle-close { background-position: -32px -192px; } -.ui-icon-circle-triangle-e { background-position: -48px -192px; } -.ui-icon-circle-triangle-s { background-position: -64px -192px; } -.ui-icon-circle-triangle-w { background-position: -80px -192px; } -.ui-icon-circle-triangle-n { background-position: -96px -192px; } -.ui-icon-circle-arrow-e { background-position: -112px -192px; } -.ui-icon-circle-arrow-s { background-position: -128px -192px; } -.ui-icon-circle-arrow-w { background-position: -144px -192px; } -.ui-icon-circle-arrow-n { background-position: -160px -192px; } -.ui-icon-circle-zoomin { background-position: -176px -192px; } -.ui-icon-circle-zoomout { background-position: -192px -192px; } -.ui-icon-circle-check { background-position: -208px -192px; } -.ui-icon-circlesmall-plus { background-position: 0 -208px; } -.ui-icon-circlesmall-minus { background-position: -16px -208px; } -.ui-icon-circlesmall-close { background-position: -32px -208px; } -.ui-icon-squaresmall-plus { background-position: -48px -208px; } -.ui-icon-squaresmall-minus { background-position: -64px -208px; } -.ui-icon-squaresmall-close { background-position: -80px -208px; } -.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } -.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } -.ui-icon-grip-solid-vertical { background-position: -32px -224px; } -.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } -.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } -.ui-icon-grip-diagonal-se { background-position: -80px -224px; } - - -/* Misc visuals -----------------------------------*/ - -/* Corner radius */ -.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; } -.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; } -.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; } -.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; } -.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; } -.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; } -.ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; } -.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; } -.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; } - -/* Overlays */ -.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); } -.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; }/* Accordion -----------------------------------*/ -.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } -.ui-accordion .ui-accordion-li-fix { display: inline; } -.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } -.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em 2.2em; } -.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } -.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; } -.ui-accordion .ui-accordion-content-active { display: block; }/* Datepicker -----------------------------------*/ -.ui-datepicker { width: 17em; padding: .2em .2em 0; } -.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } -.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } -.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } -.ui-datepicker .ui-datepicker-prev { left:2px; } -.ui-datepicker .ui-datepicker-next { right:2px; } -.ui-datepicker .ui-datepicker-prev-hover { left:1px; } -.ui-datepicker .ui-datepicker-next-hover { right:1px; } -.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } -.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } -.ui-datepicker .ui-datepicker-title select { float:left; font-size:1em; margin:1px 0; } -.ui-datepicker select.ui-datepicker-month-year {width: 100%;} -.ui-datepicker select.ui-datepicker-month, -.ui-datepicker select.ui-datepicker-year { width: 49%;} -.ui-datepicker .ui-datepicker-title select.ui-datepicker-year { float: right; } -.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } -.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } -.ui-datepicker td { border: 0; padding: 1px; } -.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } -.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } -.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } -.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } - -/* with multiple calendars */ -.ui-datepicker.ui-datepicker-multi { width:auto; } -.ui-datepicker-multi .ui-datepicker-group { float:left; } -.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } -.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } -.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } -.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } -.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } -.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } -.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } -.ui-datepicker-row-break { clear:both; width:100%; } - -/* RTL support */ -.ui-datepicker-rtl { direction: rtl; } -.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } -.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } -.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } -.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } -.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } -.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } -.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } -.ui-datepicker-rtl .ui-datepicker-group { float:right; } -.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } -.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } - -/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ -.ui-datepicker-cover { - display: none; /*sorry for IE5*/ - display/**/: block; /*sorry for IE5*/ - position: absolute; /*must have*/ - z-index: -1; /*must have*/ - filter: mask(); /*must have*/ - top: -4px; /*must have*/ - left: -4px; /*must have*/ - width: 200px; /*must have*/ - height: 200px; /*must have*/ -}/* Dialog -----------------------------------*/ -.ui-dialog { position: relative; padding: .2em; width: 300px; } -.ui-dialog .ui-dialog-titlebar { padding: .5em .3em .3em 1em; position: relative; } -.ui-dialog .ui-dialog-title { float: left; margin: .1em 0 .2em; } -.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } -.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } -.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } -.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } -.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } -.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; } -.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } -.ui-draggable .ui-dialog-titlebar { cursor: move; } -/* Progressbar -----------------------------------*/ -.ui-progressbar { height:2em; text-align: left; } -.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }/* Resizable -----------------------------------*/ -.ui-resizable { position: relative;} -.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;} -.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } -.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0px; } -.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0px; } -.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0px; height: 100%; } -.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0px; height: 100%; } -.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } -.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } -.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } -.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* Slider -----------------------------------*/ -.ui-slider { position: relative; text-align: left; } -.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } -.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; } - -.ui-slider-horizontal { height: .8em; } -.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } -.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } -.ui-slider-horizontal .ui-slider-range-min { left: 0; } -.ui-slider-horizontal .ui-slider-range-max { right: 0; } - -.ui-slider-vertical { width: .8em; height: 100px; } -.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } -.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } -.ui-slider-vertical .ui-slider-range-min { bottom: 0; } -.ui-slider-vertical .ui-slider-range-max { top: 0; }/* Tabs -----------------------------------*/ -.ui-tabs { padding: .2em; zoom: 1; } -.ui-tabs .ui-tabs-nav { list-style: none; position: relative; padding: .2em .2em 0; } -.ui-tabs .ui-tabs-nav li { position: relative; float: left; border-bottom-width: 0 !important; margin: 0 .2em -1px 0; padding: 0; } -.ui-tabs .ui-tabs-nav li a { float: left; text-decoration: none; padding: .5em 1em; } -.ui-tabs .ui-tabs-nav li.ui-tabs-selected { padding-bottom: 1px; border-bottom-width: 0; } -.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } -.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ -.ui-tabs .ui-tabs-panel { padding: 1em 1.4em; display: block; border-width: 0; background: none; } -.ui-tabs .ui-tabs-hide { display: none !important; } diff --git a/media/css/jquery-ui/images/ui-icons_444444_256x240.png b/media/css/jquery-ui/images/ui-icons_444444_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..02adcb96f4a990a884a8a0789aeeb42a80a65848 GIT binary patch literal 7090 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 literal 0 HcmV?d00001 diff --git a/media/css/jquery-ui/images/ui-icons_777620_256x240.png b/media/css/jquery-ui/images/ui-icons_777620_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..951c1174bb46f49df16a9ba5da1d2308172f1c01 GIT binary patch literal 4618 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 Ln(|e$7UBN~<7q+< literal 0 HcmV?d00001 diff --git a/media/css/jquery-ui/images/ui-icons_cc0000_256x240.png b/media/css/jquery-ui/images/ui-icons_cc0000_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..d4dd98d3019ff13911559452760dc547ddcc42bf GIT binary patch literal 4618 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 a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: 20px; - color: #333333; - white-space: nowrap; -} -.dropdown-menu li > a:hover, -.dropdown-menu li > a:focus, -.dropdown-submenu:hover > a { - text-decoration: none; - color: #ffffff; - background-color: #0081c2; - background-image: -moz-linear-gradient(top, #0088cc, #0077b3); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); - background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); - background-image: -o-linear-gradient(top, #0088cc, #0077b3); - background-image: linear-gradient(to bottom, #0088cc, #0077b3); - background-repeat: repeat-x; -} -.dropdown-menu .active > a, -.dropdown-menu .active > a:hover { - color: #ffffff; - text-decoration: none; - outline: 0; - background-color: #0081c2; - background-image: -moz-linear-gradient(top, #0088cc, #0077b3); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); - background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); - background-image: -o-linear-gradient(top, #0088cc, #0077b3); - background-image: linear-gradient(to bottom, #0088cc, #0077b3); - background-repeat: repeat-x; -} -.dropdown-menu .disabled > a, -.dropdown-menu .disabled > a:hover { - color: #999999; -} -.dropdown-menu .disabled > a:hover { - text-decoration: none; - background-color: transparent; - background-image: none; - cursor: default; -} -.open { - *z-index: 1000; -} -.open > .dropdown-menu { - display: block; -} -.pull-right > .dropdown-menu { - right: 0; - left: auto; -} -.dropup .caret, -.navbar-fixed-bottom .dropdown .caret { - border-top: 0; - border-bottom: 4px solid #000000; - content: ""; -} -.dropup .dropdown-menu, -.navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 1px; -} -.dropdown-submenu { - position: relative; -} -.dropdown-submenu > .dropdown-menu { - top: 0; - left: 100%; - margin-top: -6px; - margin-left: -1px; - -webkit-border-radius: 0 6px 6px 6px; - -moz-border-radius: 0 6px 6px 6px; - border-radius: 0 6px 6px 6px; -} -.dropdown-submenu:hover > .dropdown-menu { - display: block; -} -.dropup .dropdown-submenu > .dropdown-menu { - top: auto; - bottom: 0; - margin-top: 0; - margin-bottom: -2px; - -webkit-border-radius: 5px 5px 5px 0; - -moz-border-radius: 5px 5px 5px 0; - border-radius: 5px 5px 5px 0; -} -.dropdown-submenu > a:after { - display: block; - content: " "; - float: right; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; - border-width: 5px 0 5px 5px; - border-left-color: #cccccc; - margin-top: 5px; - margin-right: -10px; -} -.dropdown-submenu:hover > a:after { - border-left-color: #ffffff; -} -.dropdown-submenu.pull-left { - float: none; -} -.dropdown-submenu.pull-left > .dropdown-menu { - left: -100%; - margin-left: 10px; - -webkit-border-radius: 6px 0 6px 6px; - -moz-border-radius: 6px 0 6px 6px; - border-radius: 6px 0 6px 6px; -} -.dropdown .dropdown-menu .nav-header { - padding-left: 20px; - padding-right: 20px; -} \ No newline at end of file diff --git a/media/css/vendor/bootstrap-popover.css b/media/css/vendor/bootstrap-popover.css deleted file mode 100644 index a7542802d..000000000 --- a/media/css/vendor/bootstrap-popover.css +++ /dev/null @@ -1,122 +0,0 @@ -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1010; - display: none; - width: 236px; - padding: 1px; - text-align: left; - background-color: #ffffff; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - white-space: normal; -} -.popover.top { - margin-top: -10px; -} -.popover.right { - margin-left: 10px; -} -.popover.bottom { - margin-top: 10px; -} -.popover.left { - margin-left: -10px; -} -.popover-title { - margin: 0; - padding: 8px 14px; - font-size: 14px; - font-weight: normal; - line-height: 18px; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - -webkit-border-radius: 5px 5px 0 0; - -moz-border-radius: 5px 5px 0 0; - border-radius: 5px 5px 0 0; -} -.popover-content { - padding: 9px 14px; -} -.popover .arrow, -.popover .arrow:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.popover .arrow { - border-width: 11px; -} -.popover .arrow:after { - border-width: 10px; - content: ""; -} -.popover.top .arrow { - left: 50%; - margin-left: -11px; - border-bottom-width: 0; - border-top-color: #999; - border-top-color: rgba(0, 0, 0, 0.25); - bottom: -11px; -} -.popover.top .arrow:after { - bottom: 1px; - margin-left: -10px; - border-bottom-width: 0; - border-top-color: #ffffff; -} -.popover.right .arrow { - top: 50%; - left: -11px; - margin-top: -11px; - border-left-width: 0; - border-right-color: #999; - border-right-color: rgba(0, 0, 0, 0.25); -} -.popover.right .arrow:after { - left: 1px; - bottom: -10px; - border-left-width: 0; - border-right-color: #ffffff; -} -.popover.bottom .arrow { - left: 50%; - margin-left: -11px; - border-top-width: 0; - border-bottom-color: #999; - border-bottom-color: rgba(0, 0, 0, 0.25); - top: -11px; -} -.popover.bottom .arrow:after { - top: 1px; - margin-left: -10px; - border-top-width: 0; - border-bottom-color: #ffffff; -} -.popover.left .arrow { - top: 50%; - right: -11px; - margin-top: -11px; - border-right-width: 0; - border-left-color: #999; - border-left-color: rgba(0, 0, 0, 0.25); -} -.popover.left .arrow:after { - right: 1px; - border-right-width: 0; - border-left-color: #ffffff; - bottom: -10px; -} \ No newline at end of file diff --git a/media/css/vendor/bootstrap-progressbar.css b/media/css/vendor/bootstrap-progressbar.css deleted file mode 100644 index 2e48cc770..000000000 --- a/media/css/vendor/bootstrap-progressbar.css +++ /dev/null @@ -1,186 +0,0 @@ -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@-moz-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@-ms-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@-o-keyframes progress-bar-stripes { - from { - background-position: 0 0; - } - to { - background-position: 40px 0; - } -} -@keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -.progress { - overflow: hidden; - height: 20px; - margin-bottom: 20px; - background-color: #f7f7f7; - background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9)); - background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: linear-gradient(to bottom, #f5f5f5, #f9f9f9); - background-repeat: repeat-x; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.progress .bar { - width: 0%; - height: 100%; - color: #ffffff; - float: left; - font-size: 12px; - text-align: center; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #0e90d2; - background-image: -moz-linear-gradient(top, #149bdf, #0480be); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be)); - background-image: -webkit-linear-gradient(top, #149bdf, #0480be); - background-image: -o-linear-gradient(top, #149bdf, #0480be); - background-image: linear-gradient(to bottom, #149bdf, #0480be); - background-repeat: repeat-x; - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-transition: width 0.6s ease; - -moz-transition: width 0.6s ease; - -o-transition: width 0.6s ease; - transition: width 0.6s ease; -} -.progress .bar + .bar { - -webkit-box-shadow: inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15); - -moz-box-shadow: inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15); - box-shadow: inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15); -} -.progress-striped .bar, -.progress .bar-striped { - background-color: #149bdf; - background-image: -webkit-gradient(linear, 100% 0, 0 100%, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - -webkit-background-size: 40px 40px; - -moz-background-size: 40px 40px; - -o-background-size: 40px 40px; - background-size: 40px 40px; -} -.progress.active .bar { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -moz-animation: progress-bar-stripes 2s linear infinite; - -ms-animation: progress-bar-stripes 2s linear infinite; - -o-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; -} -.progress-danger .bar, -.progress .bar-danger { - background-color: #dd514c; - background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); - background-image: linear-gradient(to bottom, #ee5f5b, #c43c35); - background-repeat: repeat-x; -} -.progress-danger.progress-striped .bar, -.progress-striped .bar-danger { - background-color: #ee5f5b; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-success .bar, -.progress .bar-success { - background-color: #5eb95e; - background-image: -moz-linear-gradient(top, #62c462, #57a957); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957)); - background-image: -webkit-linear-gradient(top, #62c462, #57a957); - background-image: -o-linear-gradient(top, #62c462, #57a957); - background-image: linear-gradient(to bottom, #62c462, #57a957); - background-repeat: repeat-x; -} -.progress-success.progress-striped .bar, -.progress-striped .bar-success { - background-color: #62c462; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-info .bar, -.progress .bar-info { - background-color: #4bb1cf; - background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9)); - background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); - background-image: -o-linear-gradient(top, #5bc0de, #339bb9); - background-image: linear-gradient(to bottom, #5bc0de, #339bb9); - background-repeat: repeat-x; -} -.progress-info.progress-striped .bar, -.progress-striped .bar-info { - background-color: #5bc0de; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-warning .bar, -.progress .bar-warning { - background-color: #faa732; - background-image: -moz-linear-gradient(top, #fbb450, #f89406); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); - background-image: -webkit-linear-gradient(top, #fbb450, #f89406); - background-image: -o-linear-gradient(top, #fbb450, #f89406); - background-image: linear-gradient(to bottom, #fbb450, #f89406); - background-repeat: repeat-x; -} -.progress-warning.progress-striped .bar, -.progress-striped .bar-warning, -.progress .bar-striped.bar-warning { - background-color: #fbb450; - background-image: -webkit-gradient(linear, 100% 0, 0 100%, color-stop(0.25, rgba(255, 255, 255, 0.45)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.55)), color-stop(0.75, rgba(255, 255, 255, 0.45)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.45) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.45) 50%, rgba(255, 255, 255, 0.45) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.45) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.45) 50%, rgba(255, 255, 255, 0.45) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.45) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.45) 50%, rgba(255, 255, 255, 0.45) 75%, transparent 75%, transparent); - background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.45) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.45) 50%, rgba(255, 255, 255, 0.45) 75%, transparent 75%, transparent); -} \ No newline at end of file diff --git a/media/css/vendor/bootstrap-transition.css b/media/css/vendor/bootstrap-transition.css deleted file mode 100644 index 9139e0a9d..000000000 --- a/media/css/vendor/bootstrap-transition.css +++ /dev/null @@ -1,10 +0,0 @@ -.fade { - opacity: 0; - -webkit-transition: opacity 0.15s linear; - -moz-transition: opacity 0.15s linear; - -o-transition: opacity 0.15s linear; - transition: opacity 0.15s linear; -} -.fade.in { - opacity: 1; -} diff --git a/media/css/vendor/bootstrap.css b/media/css/vendor/bootstrap.css deleted file mode 100755 index 5ff5dff3d..000000000 --- a/media/css/vendor/bootstrap.css +++ /dev/null @@ -1,6103 +0,0 @@ -/*! - * Bootstrap v2.2.2 - * - * Copyright 2012 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world @twitter by @mdo and @fat. - */ -.clearfix { - *zoom: 1; -} -.clearfix:before, -.clearfix:after { - display: table; - content: ""; - line-height: 0; -} -.clearfix:after { - clear: both; -} -.hide-text { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} -.input-block-level { - display: block; - width: 100%; - min-height: 30px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -nav, -section { - display: block; -} -audio, -canvas, -video { - display: inline-block; - *display: inline; - *zoom: 1; -} -audio:not([controls]) { - display: none; -} -html { - font-size: 100%; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; -} -a:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -a:hover, -a:active { - outline: 0; -} -sub, -sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline; -} -sup { - top: -0.5em; -} -sub { - bottom: -0.25em; -} -img { - /* Responsive images (ensure images don't scale beyond their parents) */ - - max-width: 100%; - /* Part 1: Set a maxium relative to the parent */ - - width: auto\9; - /* IE7-8 need help adjusting responsive images */ - - height: auto; - /* Part 2: Scale the height according to the width, otherwise you get stretching */ - - vertical-align: middle; - border: 0; - -ms-interpolation-mode: bicubic; -} -#map_canvas img, -.google-maps img { - max-width: none; -} -button, -input, -select, -textarea { - margin: 0; - font-size: 100%; - vertical-align: middle; -} -button, -input { - *overflow: visible; - line-height: normal; -} -button::-moz-focus-inner, -input::-moz-focus-inner { - padding: 0; - border: 0; -} -button, -html input[type="button"], -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; - cursor: pointer; -} -label, -select, -button, -input[type="button"], -input[type="reset"], -input[type="submit"], -input[type="radio"], -input[type="checkbox"] { - cursor: pointer; -} -input[type="search"] { - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; - -webkit-appearance: textfield; -} -input[type="search"]::-webkit-search-decoration, -input[type="search"]::-webkit-search-cancel-button { - -webkit-appearance: none; -} -textarea { - overflow: auto; - vertical-align: top; -} -@media print { - * { - text-shadow: none !important; - color: #000 !important; - background: transparent !important; - box-shadow: none !important; - } - a, - a:visited { - text-decoration: underline; - } - a[href]:after { - content: " (" attr(href) ")"; - } - abbr[title]:after { - content: " (" attr(title) ")"; - } - .ir a:after, - a[href^="javascript:"]:after, - a[href^="#"]:after { - content: ""; - } - pre, - blockquote { - border: 1px solid #999; - page-break-inside: avoid; - } - thead { - display: table-header-group; - } - tr, - img { - page-break-inside: avoid; - } - img { - max-width: 100% !important; - } - @page { - margin: 0.5cm; - } - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - h2, - h3 { - page-break-after: avoid; - } -} -body { - margin: 0; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - line-height: 20px; - color: #333333; - background-color: #ffffff; -} -a { - color: #0088cc; - text-decoration: none; -} -a:hover { - color: #005580; - text-decoration: underline; -} -.img-rounded { - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} -.img-polaroid { - padding: 4px; - background-color: #fff; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); - -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); -} -.img-circle { - -webkit-border-radius: 500px; - -moz-border-radius: 500px; - border-radius: 500px; -} -.row { - margin-left: -20px; - *zoom: 1; -} -.row:before, -.row:after { - display: table; - content: ""; - line-height: 0; -} -.row:after { - clear: both; -} -[class*="span"] { - float: left; - min-height: 1px; - margin-left: 20px; -} -.container, -.navbar-static-top .container, -.navbar-fixed-top .container, -.navbar-fixed-bottom .container { - width: 940px; -} -.span12 { - width: 940px; -} -.span11 { - width: 860px; -} -.span10 { - width: 780px; -} -.span9 { - width: 700px; -} -.span8 { - width: 620px; -} -.span7 { - width: 540px; -} -.span6 { - width: 460px; -} -.span5 { - width: 380px; -} -.span4 { - width: 300px; -} -.span3 { - width: 220px; -} -.span2 { - width: 140px; -} -.span1 { - width: 60px; -} -.offset12 { - margin-left: 980px; -} -.offset11 { - margin-left: 900px; -} -.offset10 { - margin-left: 820px; -} -.offset9 { - margin-left: 740px; -} -.offset8 { - margin-left: 660px; -} -.offset7 { - margin-left: 580px; -} -.offset6 { - margin-left: 500px; -} -.offset5 { - margin-left: 420px; -} -.offset4 { - margin-left: 340px; -} -.offset3 { - margin-left: 260px; -} -.offset2 { - margin-left: 180px; -} -.offset1 { - margin-left: 100px; -} -.row-fluid { - width: 100%; - *zoom: 1; -} -.row-fluid:before, -.row-fluid:after { - display: table; - content: ""; - line-height: 0; -} -.row-fluid:after { - clear: both; -} -.row-fluid [class*="span"] { - display: block; - width: 100%; - min-height: 30px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - float: left; - margin-left: 2.127659574468085%; - *margin-left: 2.074468085106383%; -} -.row-fluid [class*="span"]:first-child { - margin-left: 0; -} -.row-fluid .controls-row [class*="span"] + [class*="span"] { - margin-left: 2.127659574468085%; -} -.row-fluid .span12 { - width: 100%; - *width: 99.94680851063829%; -} -.row-fluid .span11 { - width: 91.48936170212765%; - *width: 91.43617021276594%; -} -.row-fluid .span10 { - width: 82.97872340425532%; - *width: 82.92553191489361%; -} -.row-fluid .span9 { - width: 74.46808510638297%; - *width: 74.41489361702126%; -} -.row-fluid .span8 { - width: 65.95744680851064%; - *width: 65.90425531914893%; -} -.row-fluid .span7 { - width: 57.44680851063829%; - *width: 57.39361702127659%; -} -.row-fluid .span6 { - width: 48.93617021276595%; - *width: 48.88297872340425%; -} -.row-fluid .span5 { - width: 40.42553191489362%; - *width: 40.37234042553192%; -} -.row-fluid .span4 { - width: 31.914893617021278%; - *width: 31.861702127659576%; -} -.row-fluid .span3 { - width: 23.404255319148934%; - *width: 23.351063829787233%; -} -.row-fluid .span2 { - width: 14.893617021276595%; - *width: 14.840425531914894%; -} -.row-fluid .span1 { - width: 6.382978723404255%; - *width: 6.329787234042553%; -} -.row-fluid .offset12 { - margin-left: 104.25531914893617%; - *margin-left: 104.14893617021275%; -} -.row-fluid .offset12:first-child { - margin-left: 102.12765957446808%; - *margin-left: 102.02127659574467%; -} -.row-fluid .offset11 { - margin-left: 95.74468085106382%; - *margin-left: 95.6382978723404%; -} -.row-fluid .offset11:first-child { - margin-left: 93.61702127659574%; - *margin-left: 93.51063829787232%; -} -.row-fluid .offset10 { - margin-left: 87.23404255319149%; - *margin-left: 87.12765957446807%; -} -.row-fluid .offset10:first-child { - margin-left: 85.1063829787234%; - *margin-left: 84.99999999999999%; -} -.row-fluid .offset9 { - margin-left: 78.72340425531914%; - *margin-left: 78.61702127659572%; -} -.row-fluid .offset9:first-child { - margin-left: 76.59574468085106%; - *margin-left: 76.48936170212764%; -} -.row-fluid .offset8 { - margin-left: 70.2127659574468%; - *margin-left: 70.10638297872339%; -} -.row-fluid .offset8:first-child { - margin-left: 68.08510638297872%; - *margin-left: 67.9787234042553%; -} -.row-fluid .offset7 { - margin-left: 61.70212765957446%; - *margin-left: 61.59574468085106%; -} -.row-fluid .offset7:first-child { - margin-left: 59.574468085106375%; - *margin-left: 59.46808510638297%; -} -.row-fluid .offset6 { - margin-left: 53.191489361702125%; - *margin-left: 53.085106382978715%; -} -.row-fluid .offset6:first-child { - margin-left: 51.063829787234035%; - *margin-left: 50.95744680851063%; -} -.row-fluid .offset5 { - margin-left: 44.68085106382979%; - *margin-left: 44.57446808510638%; -} -.row-fluid .offset5:first-child { - margin-left: 42.5531914893617%; - *margin-left: 42.4468085106383%; -} -.row-fluid .offset4 { - margin-left: 36.170212765957444%; - *margin-left: 36.06382978723405%; -} -.row-fluid .offset4:first-child { - margin-left: 34.04255319148936%; - *margin-left: 33.93617021276596%; -} -.row-fluid .offset3 { - margin-left: 27.659574468085104%; - *margin-left: 27.5531914893617%; -} -.row-fluid .offset3:first-child { - margin-left: 25.53191489361702%; - *margin-left: 25.425531914893618%; -} -.row-fluid .offset2 { - margin-left: 19.148936170212764%; - *margin-left: 19.04255319148936%; -} -.row-fluid .offset2:first-child { - margin-left: 17.02127659574468%; - *margin-left: 16.914893617021278%; -} -.row-fluid .offset1 { - margin-left: 10.638297872340425%; - *margin-left: 10.53191489361702%; -} -.row-fluid .offset1:first-child { - margin-left: 8.51063829787234%; - *margin-left: 8.404255319148938%; -} -[class*="span"].hide, -.row-fluid [class*="span"].hide { - display: none; -} -[class*="span"].pull-right, -.row-fluid [class*="span"].pull-right { - float: right; -} -.container { - margin-right: auto; - margin-left: auto; - *zoom: 1; -} -.container:before, -.container:after { - display: table; - content: ""; - line-height: 0; -} -.container:after { - clear: both; -} -.container-fluid { - padding-right: 20px; - padding-left: 20px; - *zoom: 1; -} -.container-fluid:before, -.container-fluid:after { - display: table; - content: ""; - line-height: 0; -} -.container-fluid:after { - clear: both; -} -p { - margin: 0 0 10px; -} -.lead { - margin-bottom: 20px; - font-size: 21px; - font-weight: 200; - line-height: 30px; -} -small { - font-size: 85%; -} -strong { - font-weight: bold; -} -em { - font-style: italic; -} -cite { - font-style: normal; -} -.muted { - color: #999999; -} -a.muted:hover { - color: #808080; -} -.text-warning { - color: #c09853; -} -a.text-warning:hover { - color: #a47e3c; -} -.text-error { - color: #b94a48; -} -a.text-error:hover { - color: #953b39; -} -.text-info { - color: #3a87ad; -} -a.text-info:hover { - color: #2d6987; -} -.text-success { - color: #468847; -} -a.text-success:hover { - color: #356635; -} -h1, -h2, -h3, -h4, -h5, -h6 { - margin: 10px 0; - font-family: inherit; - font-weight: bold; - line-height: 20px; - color: inherit; - text-rendering: optimizelegibility; -} -h1 small, -h2 small, -h3 small, -h4 small, -h5 small, -h6 small { - font-weight: normal; - line-height: 1; - color: #999999; -} -h1, -h2, -h3 { - line-height: 40px; -} -h1 { - font-size: 38.5px; -} -h2 { - font-size: 31.5px; -} -h3 { - font-size: 24.5px; -} -h4 { - font-size: 17.5px; -} -h5 { - font-size: 14px; -} -h6 { - font-size: 11.9px; -} -h1 small { - font-size: 24.5px; -} -h2 small { - font-size: 17.5px; -} -h3 small { - font-size: 14px; -} -h4 small { - font-size: 14px; -} -.page-header { - padding-bottom: 9px; - margin: 20px 0 30px; - border-bottom: 1px solid #eeeeee; -} -ul, -ol { - padding: 0; - margin: 0 0 10px 25px; -} -ul ul, -ul ol, -ol ol, -ol ul { - margin-bottom: 0; -} -li { - line-height: 20px; -} -ul.unstyled, -ol.unstyled { - margin-left: 0; - list-style: none; -} -ul.inline, -ol.inline { - margin-left: 0; - list-style: none; -} -ul.inline > li, -ol.inline > li { - display: inline-block; - padding-left: 5px; - padding-right: 5px; -} -dl { - margin-bottom: 20px; -} -dt, -dd { - line-height: 20px; -} -dt { - font-weight: bold; -} -dd { - margin-left: 10px; -} -.dl-horizontal { - *zoom: 1; -} -.dl-horizontal:before, -.dl-horizontal:after { - display: table; - content: ""; - line-height: 0; -} -.dl-horizontal:after { - clear: both; -} -.dl-horizontal dt { - float: left; - width: 160px; - clear: left; - text-align: right; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} -.dl-horizontal dd { - margin-left: 180px; -} -hr { - margin: 20px 0; - border: 0; - border-top: 1px solid #eeeeee; - border-bottom: 1px solid #ffffff; -} -abbr[title], -abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted #999999; -} -abbr.initialism { - font-size: 90%; - text-transform: uppercase; -} -blockquote { - padding: 0 0 0 15px; - margin: 0 0 20px; - border-left: 5px solid #eeeeee; -} -blockquote p { - margin-bottom: 0; - font-size: 16px; - font-weight: 300; - line-height: 25px; -} -blockquote small { - display: block; - line-height: 20px; - color: #999999; -} -blockquote small:before { - content: '\2014 \00A0'; -} -blockquote.pull-right { - float: right; - padding-right: 15px; - padding-left: 0; - border-right: 5px solid #eeeeee; - border-left: 0; -} -blockquote.pull-right p, -blockquote.pull-right small { - text-align: right; -} -blockquote.pull-right small:before { - content: ''; -} -blockquote.pull-right small:after { - content: '\00A0 \2014'; -} -q:before, -q:after, -blockquote:before, -blockquote:after { - content: ""; -} -address { - display: block; - margin-bottom: 20px; - font-style: normal; - line-height: 20px; -} -code, -pre { - padding: 0 3px 2px; - font-family: Monaco, Menlo, Consolas, "Courier New", monospace; - font-size: 12px; - color: #333333; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -code { - padding: 2px 4px; - color: #d14; - background-color: #f7f7f9; - border: 1px solid #e1e1e8; - white-space: nowrap; -} -pre { - display: block; - padding: 9.5px; - margin: 0 0 10px; - font-size: 13px; - line-height: 20px; - word-break: break-all; - word-wrap: break-word; - white-space: pre; - white-space: pre-wrap; - background-color: #f5f5f5; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.15); - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -pre.prettyprint { - margin-bottom: 20px; -} -pre code { - padding: 0; - color: inherit; - white-space: pre; - white-space: pre-wrap; - background-color: transparent; - border: 0; -} -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; -} -.label, -.badge { - display: inline-block; - padding: 2px 4px; - font-size: 11.844px; - font-weight: bold; - line-height: 14px; - color: #ffffff; - vertical-align: baseline; - white-space: nowrap; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #999999; -} -.label { - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -.badge { - padding-left: 9px; - padding-right: 9px; - -webkit-border-radius: 9px; - -moz-border-radius: 9px; - border-radius: 9px; -} -.label:empty, -.badge:empty { - display: none; -} -a.label:hover, -a.badge:hover { - color: #ffffff; - text-decoration: none; - cursor: pointer; -} -.label-important, -.badge-important { - background-color: #b94a48; -} -.label-important[href], -.badge-important[href] { - background-color: #953b39; -} -.label-warning, -.badge-warning { - background-color: #f89406; -} -.label-warning[href], -.badge-warning[href] { - background-color: #c67605; -} -.label-success, -.badge-success { - background-color: #468847; -} -.label-success[href], -.badge-success[href] { - background-color: #356635; -} -.label-info, -.badge-info { - background-color: #3a87ad; -} -.label-info[href], -.badge-info[href] { - background-color: #2d6987; -} -.label-inverse, -.badge-inverse { - background-color: #333333; -} -.label-inverse[href], -.badge-inverse[href] { - background-color: #1a1a1a; -} -.btn .label, -.btn .badge { - position: relative; - top: -1px; -} -.btn-mini .label, -.btn-mini .badge { - top: 0; -} -table { - max-width: 100%; - background-color: transparent; - border-collapse: collapse; - border-spacing: 0; -} -.table { - width: 100%; - margin-bottom: 20px; -} -.table th, -.table td { - padding: 8px; - line-height: 20px; - text-align: left; - vertical-align: top; - border-top: 1px solid #dddddd; -} -.table th { - font-weight: bold; -} -.table thead th { - vertical-align: bottom; -} -.table caption + thead tr:first-child th, -.table caption + thead tr:first-child td, -.table colgroup + thead tr:first-child th, -.table colgroup + thead tr:first-child td, -.table thead:first-child tr:first-child th, -.table thead:first-child tr:first-child td { - border-top: 0; -} -.table tbody + tbody { - border-top: 2px solid #dddddd; -} -.table .table { - background-color: #ffffff; -} -.table-condensed th, -.table-condensed td { - padding: 4px 5px; -} -.table-bordered { - border: 1px solid #dddddd; - border-collapse: separate; - *border-collapse: collapse; - border-left: 0; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.table-bordered th, -.table-bordered td { - border-left: 1px solid #dddddd; -} -.table-bordered caption + thead tr:first-child th, -.table-bordered caption + tbody tr:first-child th, -.table-bordered caption + tbody tr:first-child td, -.table-bordered colgroup + thead tr:first-child th, -.table-bordered colgroup + tbody tr:first-child th, -.table-bordered colgroup + tbody tr:first-child td, -.table-bordered thead:first-child tr:first-child th, -.table-bordered tbody:first-child tr:first-child th, -.table-bordered tbody:first-child tr:first-child td { - border-top: 0; -} -.table-bordered thead:first-child tr:first-child > th:first-child, -.table-bordered tbody:first-child tr:first-child > td:first-child { - -webkit-border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; - border-top-left-radius: 4px; -} -.table-bordered thead:first-child tr:first-child > th:last-child, -.table-bordered tbody:first-child tr:first-child > td:last-child { - -webkit-border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; - border-top-right-radius: 4px; -} -.table-bordered thead:last-child tr:last-child > th:first-child, -.table-bordered tbody:last-child tr:last-child > td:first-child, -.table-bordered tfoot:last-child tr:last-child > td:first-child { - -webkit-border-bottom-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - border-bottom-left-radius: 4px; -} -.table-bordered thead:last-child tr:last-child > th:last-child, -.table-bordered tbody:last-child tr:last-child > td:last-child, -.table-bordered tfoot:last-child tr:last-child > td:last-child { - -webkit-border-bottom-right-radius: 4px; - -moz-border-radius-bottomright: 4px; - border-bottom-right-radius: 4px; -} -.table-bordered tfoot + tbody:last-child tr:last-child td:first-child { - -webkit-border-bottom-left-radius: 0; - -moz-border-radius-bottomleft: 0; - border-bottom-left-radius: 0; -} -.table-bordered tfoot + tbody:last-child tr:last-child td:last-child { - -webkit-border-bottom-right-radius: 0; - -moz-border-radius-bottomright: 0; - border-bottom-right-radius: 0; -} -.table-bordered caption + thead tr:first-child th:first-child, -.table-bordered caption + tbody tr:first-child td:first-child, -.table-bordered colgroup + thead tr:first-child th:first-child, -.table-bordered colgroup + tbody tr:first-child td:first-child { - -webkit-border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; - border-top-left-radius: 4px; -} -.table-bordered caption + thead tr:first-child th:last-child, -.table-bordered caption + tbody tr:first-child td:last-child, -.table-bordered colgroup + thead tr:first-child th:last-child, -.table-bordered colgroup + tbody tr:first-child td:last-child { - -webkit-border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; - border-top-right-radius: 4px; -} -.table-striped tbody > tr:nth-child(odd) > td, -.table-striped tbody > tr:nth-child(odd) > th { - background-color: #f9f9f9; -} -.table-hover tbody tr:hover td, -.table-hover tbody tr:hover th { - background-color: #f5f5f5; -} -table td[class*="span"], -table th[class*="span"], -.row-fluid table td[class*="span"], -.row-fluid table th[class*="span"] { - display: table-cell; - float: none; - margin-left: 0; -} -.table td.span1, -.table th.span1 { - float: none; - width: 44px; - margin-left: 0; -} -.table td.span2, -.table th.span2 { - float: none; - width: 124px; - margin-left: 0; -} -.table td.span3, -.table th.span3 { - float: none; - width: 204px; - margin-left: 0; -} -.table td.span4, -.table th.span4 { - float: none; - width: 284px; - margin-left: 0; -} -.table td.span5, -.table th.span5 { - float: none; - width: 364px; - margin-left: 0; -} -.table td.span6, -.table th.span6 { - float: none; - width: 444px; - margin-left: 0; -} -.table td.span7, -.table th.span7 { - float: none; - width: 524px; - margin-left: 0; -} -.table td.span8, -.table th.span8 { - float: none; - width: 604px; - margin-left: 0; -} -.table td.span9, -.table th.span9 { - float: none; - width: 684px; - margin-left: 0; -} -.table td.span10, -.table th.span10 { - float: none; - width: 764px; - margin-left: 0; -} -.table td.span11, -.table th.span11 { - float: none; - width: 844px; - margin-left: 0; -} -.table td.span12, -.table th.span12 { - float: none; - width: 924px; - margin-left: 0; -} -.table tbody tr.success td { - background-color: #dff0d8; -} -.table tbody tr.error td { - background-color: #f2dede; -} -.table tbody tr.warning td { - background-color: #fcf8e3; -} -.table tbody tr.info td { - background-color: #d9edf7; -} -.table-hover tbody tr.success:hover td { - background-color: #d0e9c6; -} -.table-hover tbody tr.error:hover td { - background-color: #ebcccc; -} -.table-hover tbody tr.warning:hover td { - background-color: #faf2cc; -} -.table-hover tbody tr.info:hover td { - background-color: #c4e3f3; -} -form { - margin: 0 0 20px; -} -fieldset { - padding: 0; - margin: 0; - border: 0; -} -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: 20px; - font-size: 21px; - line-height: 40px; - color: #333333; - border: 0; - border-bottom: 1px solid #e5e5e5; -} -legend small { - font-size: 15px; - color: #999999; -} -label, -input, -button, -select, -textarea { - font-size: 14px; - font-weight: normal; - line-height: 20px; -} -input, -button, -select, -textarea { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; -} -label { - display: block; - margin-bottom: 5px; -} -select, -textarea, -input[type="text"], -input[type="password"], -input[type="datetime"], -input[type="datetime-local"], -input[type="date"], -input[type="month"], -input[type="time"], -input[type="week"], -input[type="number"], -input[type="email"], -input[type="url"], -input[type="search"], -input[type="tel"], -input[type="color"], -.uneditable-input { - display: inline-block; - height: 20px; - padding: 4px 6px; - margin-bottom: 10px; - font-size: 14px; - line-height: 20px; - color: #555555; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - vertical-align: middle; -} -input, -textarea, -.uneditable-input { - width: 206px; -} -textarea { - height: auto; -} -textarea, -input[type="text"], -input[type="password"], -input[type="datetime"], -input[type="datetime-local"], -input[type="date"], -input[type="month"], -input[type="time"], -input[type="week"], -input[type="number"], -input[type="email"], -input[type="url"], -input[type="search"], -input[type="tel"], -input[type="color"], -.uneditable-input { - background-color: #ffffff; - border: 1px solid #cccccc; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -webkit-transition: border linear .2s, box-shadow linear .2s; - -moz-transition: border linear .2s, box-shadow linear .2s; - -o-transition: border linear .2s, box-shadow linear .2s; - transition: border linear .2s, box-shadow linear .2s; -} -textarea:focus, -input[type="text"]:focus, -input[type="password"]:focus, -input[type="datetime"]:focus, -input[type="datetime-local"]:focus, -input[type="date"]:focus, -input[type="month"]:focus, -input[type="time"]:focus, -input[type="week"]:focus, -input[type="number"]:focus, -input[type="email"]:focus, -input[type="url"]:focus, -input[type="search"]:focus, -input[type="tel"]:focus, -input[type="color"]:focus, -.uneditable-input:focus { - border-color: rgba(82, 168, 236, 0.8); - outline: 0; - outline: thin dotted \9; - /* IE6-9 */ - - -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6); - -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6); - box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6); -} -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - *margin-top: 0; - /* IE7 */ - - margin-top: 1px \9; - /* IE8-9 */ - - line-height: normal; -} -input[type="file"], -input[type="image"], -input[type="submit"], -input[type="reset"], -input[type="button"], -input[type="radio"], -input[type="checkbox"] { - width: auto; -} -select, -input[type="file"] { - height: 30px; - /* In IE7, the height of the select element cannot be changed by height, only font-size */ - - *margin-top: 4px; - /* For IE7, add top margin to align select with labels */ - - line-height: 30px; -} -select { - width: 220px; - border: 1px solid #cccccc; - background-color: #ffffff; -} -select[multiple], -select[size] { - height: auto; -} -select:focus, -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -.uneditable-input, -.uneditable-textarea { - color: #999999; - background-color: #fcfcfc; - border-color: #cccccc; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - cursor: not-allowed; -} -.uneditable-input { - overflow: hidden; - white-space: nowrap; -} -.uneditable-textarea { - width: auto; - height: auto; -} -input:-moz-placeholder, -textarea:-moz-placeholder { - color: #999999; -} -input:-ms-input-placeholder, -textarea:-ms-input-placeholder { - color: #999999; -} -input::-webkit-input-placeholder, -textarea::-webkit-input-placeholder { - color: #999999; -} -.radio, -.checkbox { - min-height: 20px; - padding-left: 20px; -} -.radio input[type="radio"], -.checkbox input[type="checkbox"] { - float: left; - margin-left: -20px; -} -.controls > .radio:first-child, -.controls > .checkbox:first-child { - padding-top: 5px; -} -.radio.inline, -.checkbox.inline { - display: inline-block; - padding-top: 5px; - margin-bottom: 0; - vertical-align: middle; -} -.radio.inline + .radio.inline, -.checkbox.inline + .checkbox.inline { - margin-left: 10px; -} -.input-mini { - width: 60px; -} -.input-small { - width: 90px; -} -.input-medium { - width: 150px; -} -.input-large { - width: 210px; -} -.input-xlarge { - width: 270px; -} -.input-xxlarge { - width: 530px; -} -input[class*="span"], -select[class*="span"], -textarea[class*="span"], -.uneditable-input[class*="span"], -.row-fluid input[class*="span"], -.row-fluid select[class*="span"], -.row-fluid textarea[class*="span"], -.row-fluid .uneditable-input[class*="span"] { - float: none; - margin-left: 0; -} -.input-append input[class*="span"], -.input-append .uneditable-input[class*="span"], -.input-prepend input[class*="span"], -.input-prepend .uneditable-input[class*="span"], -.row-fluid input[class*="span"], -.row-fluid select[class*="span"], -.row-fluid textarea[class*="span"], -.row-fluid .uneditable-input[class*="span"], -.row-fluid .input-prepend [class*="span"], -.row-fluid .input-append [class*="span"] { - display: inline-block; -} -input, -textarea, -.uneditable-input { - margin-left: 0; -} -.controls-row [class*="span"] + [class*="span"] { - margin-left: 20px; -} -input.span12, textarea.span12, .uneditable-input.span12 { - width: 926px; -} -input.span11, textarea.span11, .uneditable-input.span11 { - width: 846px; -} -input.span10, textarea.span10, .uneditable-input.span10 { - width: 766px; -} -input.span9, textarea.span9, .uneditable-input.span9 { - width: 686px; -} -input.span8, textarea.span8, .uneditable-input.span8 { - width: 606px; -} -input.span7, textarea.span7, .uneditable-input.span7 { - width: 526px; -} -input.span6, textarea.span6, .uneditable-input.span6 { - width: 446px; -} -input.span5, textarea.span5, .uneditable-input.span5 { - width: 366px; -} -input.span4, textarea.span4, .uneditable-input.span4 { - width: 286px; -} -input.span3, textarea.span3, .uneditable-input.span3 { - width: 206px; -} -input.span2, textarea.span2, .uneditable-input.span2 { - width: 126px; -} -input.span1, textarea.span1, .uneditable-input.span1 { - width: 46px; -} -.controls-row { - *zoom: 1; -} -.controls-row:before, -.controls-row:after { - display: table; - content: ""; - line-height: 0; -} -.controls-row:after { - clear: both; -} -.controls-row [class*="span"], -.row-fluid .controls-row [class*="span"] { - float: left; -} -.controls-row .checkbox[class*="span"], -.controls-row .radio[class*="span"] { - padding-top: 5px; -} -input[disabled], -select[disabled], -textarea[disabled], -input[readonly], -select[readonly], -textarea[readonly] { - cursor: not-allowed; - background-color: #eeeeee; -} -input[type="radio"][disabled], -input[type="checkbox"][disabled], -input[type="radio"][readonly], -input[type="checkbox"][readonly] { - background-color: transparent; -} -.control-group.warning .control-label, -.control-group.warning .help-block, -.control-group.warning .help-inline { - color: #c09853; -} -.control-group.warning .checkbox, -.control-group.warning .radio, -.control-group.warning input, -.control-group.warning select, -.control-group.warning textarea { - color: #c09853; -} -.control-group.warning input, -.control-group.warning select, -.control-group.warning textarea { - border-color: #c09853; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.control-group.warning input:focus, -.control-group.warning select:focus, -.control-group.warning textarea:focus { - border-color: #a47e3c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; -} -.control-group.warning .input-prepend .add-on, -.control-group.warning .input-append .add-on { - color: #c09853; - background-color: #fcf8e3; - border-color: #c09853; -} -.control-group.error .control-label, -.control-group.error .help-block, -.control-group.error .help-inline { - color: #b94a48; -} -.control-group.error .checkbox, -.control-group.error .radio, -.control-group.error input, -.control-group.error select, -.control-group.error textarea { - color: #b94a48; -} -.control-group.error input, -.control-group.error select, -.control-group.error textarea { - border-color: #b94a48; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.control-group.error input:focus, -.control-group.error select:focus, -.control-group.error textarea:focus { - border-color: #953b39; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; -} -.control-group.error .input-prepend .add-on, -.control-group.error .input-append .add-on { - color: #b94a48; - background-color: #f2dede; - border-color: #b94a48; -} -.control-group.success .control-label, -.control-group.success .help-block, -.control-group.success .help-inline { - color: #468847; -} -.control-group.success .checkbox, -.control-group.success .radio, -.control-group.success input, -.control-group.success select, -.control-group.success textarea { - color: #468847; -} -.control-group.success input, -.control-group.success select, -.control-group.success textarea { - border-color: #468847; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.control-group.success input:focus, -.control-group.success select:focus, -.control-group.success textarea:focus { - border-color: #356635; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; -} -.control-group.success .input-prepend .add-on, -.control-group.success .input-append .add-on { - color: #468847; - background-color: #dff0d8; - border-color: #468847; -} -.control-group.info .control-label, -.control-group.info .help-block, -.control-group.info .help-inline { - color: #3a87ad; -} -.control-group.info .checkbox, -.control-group.info .radio, -.control-group.info input, -.control-group.info select, -.control-group.info textarea { - color: #3a87ad; -} -.control-group.info input, -.control-group.info select, -.control-group.info textarea { - border-color: #3a87ad; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.control-group.info input:focus, -.control-group.info select:focus, -.control-group.info textarea:focus { - border-color: #2d6987; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; -} -.control-group.info .input-prepend .add-on, -.control-group.info .input-append .add-on { - color: #3a87ad; - background-color: #d9edf7; - border-color: #3a87ad; -} -input:focus:invalid, -textarea:focus:invalid, -select:focus:invalid { - color: #b94a48; - border-color: #ee5f5b; -} -input:focus:invalid:focus, -textarea:focus:invalid:focus, -select:focus:invalid:focus { - border-color: #e9322d; - -webkit-box-shadow: 0 0 6px #f8b9b7; - -moz-box-shadow: 0 0 6px #f8b9b7; - box-shadow: 0 0 6px #f8b9b7; -} -.form-actions { - padding: 19px 20px 20px; - margin-top: 20px; - margin-bottom: 20px; - background-color: #f5f5f5; - border-top: 1px solid #e5e5e5; - *zoom: 1; -} -.form-actions:before, -.form-actions:after { - display: table; - content: ""; - line-height: 0; -} -.form-actions:after { - clear: both; -} -.help-block, -.help-inline { - color: #595959; -} -.help-block { - display: block; - margin-bottom: 10px; -} -.help-inline { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; - vertical-align: middle; - padding-left: 5px; -} -.input-append, -.input-prepend { - margin-bottom: 5px; - font-size: 0; - white-space: nowrap; -} -.input-append input, -.input-prepend input, -.input-append select, -.input-prepend select, -.input-append .uneditable-input, -.input-prepend .uneditable-input, -.input-append .dropdown-menu, -.input-prepend .dropdown-menu { - font-size: 14px; -} -.input-append input, -.input-prepend input, -.input-append select, -.input-prepend select, -.input-append .uneditable-input, -.input-prepend .uneditable-input { - position: relative; - margin-bottom: 0; - *margin-left: 0; - vertical-align: top; - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} -.input-append input:focus, -.input-prepend input:focus, -.input-append select:focus, -.input-prepend select:focus, -.input-append .uneditable-input:focus, -.input-prepend .uneditable-input:focus { - z-index: 2; -} -.input-append .add-on, -.input-prepend .add-on { - display: inline-block; - width: auto; - height: 20px; - min-width: 16px; - padding: 4px 5px; - font-size: 14px; - font-weight: normal; - line-height: 20px; - text-align: center; - text-shadow: 0 1px 0 #ffffff; - background-color: #eeeeee; - border: 1px solid #ccc; -} -.input-append .add-on, -.input-prepend .add-on, -.input-append .btn, -.input-prepend .btn, -.input-append .btn-group > .dropdown-toggle, -.input-prepend .btn-group > .dropdown-toggle { - vertical-align: top; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.input-append .active, -.input-prepend .active { - background-color: #a9dba9; - border-color: #46a546; -} -.input-prepend .add-on, -.input-prepend .btn { - margin-right: -1px; -} -.input-prepend .add-on:first-child, -.input-prepend .btn:first-child { - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} -.input-append input, -.input-append select, -.input-append .uneditable-input { - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} -.input-append input + .btn-group .btn:last-child, -.input-append select + .btn-group .btn:last-child, -.input-append .uneditable-input + .btn-group .btn:last-child { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} -.input-append .add-on, -.input-append .btn, -.input-append .btn-group { - margin-left: -1px; -} -.input-append .add-on:last-child, -.input-append .btn:last-child, -.input-append .btn-group:last-child > .dropdown-toggle { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} -.input-prepend.input-append input, -.input-prepend.input-append select, -.input-prepend.input-append .uneditable-input { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.input-prepend.input-append input + .btn-group .btn, -.input-prepend.input-append select + .btn-group .btn, -.input-prepend.input-append .uneditable-input + .btn-group .btn { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} -.input-prepend.input-append .add-on:first-child, -.input-prepend.input-append .btn:first-child { - margin-right: -1px; - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} -.input-prepend.input-append .add-on:last-child, -.input-prepend.input-append .btn:last-child { - margin-left: -1px; - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} -.input-prepend.input-append .btn-group:first-child { - margin-left: 0; -} -input.search-query { - padding-right: 14px; - padding-right: 4px \9; - padding-left: 14px; - padding-left: 4px \9; - /* IE7-8 doesn't have border-radius, so don't indent the padding */ - - margin-bottom: 0; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; -} -/* Allow for input prepend/append in search forms */ -.form-search .input-append .search-query, -.form-search .input-prepend .search-query { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.form-search .input-append .search-query { - -webkit-border-radius: 14px 0 0 14px; - -moz-border-radius: 14px 0 0 14px; - border-radius: 14px 0 0 14px; -} -.form-search .input-append .btn { - -webkit-border-radius: 0 14px 14px 0; - -moz-border-radius: 0 14px 14px 0; - border-radius: 0 14px 14px 0; -} -.form-search .input-prepend .search-query { - -webkit-border-radius: 0 14px 14px 0; - -moz-border-radius: 0 14px 14px 0; - border-radius: 0 14px 14px 0; -} -.form-search .input-prepend .btn { - -webkit-border-radius: 14px 0 0 14px; - -moz-border-radius: 14px 0 0 14px; - border-radius: 14px 0 0 14px; -} -.form-search input, -.form-inline input, -.form-horizontal input, -.form-search textarea, -.form-inline textarea, -.form-horizontal textarea, -.form-search select, -.form-inline select, -.form-horizontal select, -.form-search .help-inline, -.form-inline .help-inline, -.form-horizontal .help-inline, -.form-search .uneditable-input, -.form-inline .uneditable-input, -.form-horizontal .uneditable-input, -.form-search .input-prepend, -.form-inline .input-prepend, -.form-horizontal .input-prepend, -.form-search .input-append, -.form-inline .input-append, -.form-horizontal .input-append { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; - margin-bottom: 0; - vertical-align: middle; -} -.form-search .hide, -.form-inline .hide, -.form-horizontal .hide { - display: none; -} -.form-search label, -.form-inline label, -.form-search .btn-group, -.form-inline .btn-group { - display: inline-block; -} -.form-search .input-append, -.form-inline .input-append, -.form-search .input-prepend, -.form-inline .input-prepend { - margin-bottom: 0; -} -.form-search .radio, -.form-search .checkbox, -.form-inline .radio, -.form-inline .checkbox { - padding-left: 0; - margin-bottom: 0; - vertical-align: middle; -} -.form-search .radio input[type="radio"], -.form-search .checkbox input[type="checkbox"], -.form-inline .radio input[type="radio"], -.form-inline .checkbox input[type="checkbox"] { - float: left; - margin-right: 3px; - margin-left: 0; -} -.control-group { - margin-bottom: 10px; -} -legend + .control-group { - margin-top: 20px; - -webkit-margin-top-collapse: separate; -} -.form-horizontal .control-group { - margin-bottom: 20px; - *zoom: 1; -} -.form-horizontal .control-group:before, -.form-horizontal .control-group:after { - display: table; - content: ""; - line-height: 0; -} -.form-horizontal .control-group:after { - clear: both; -} -.form-horizontal .control-label { - float: left; - width: 160px; - padding-top: 5px; - text-align: right; -} -.form-horizontal .controls { - *display: inline-block; - *padding-left: 20px; - margin-left: 180px; - *margin-left: 0; -} -.form-horizontal .controls:first-child { - *padding-left: 180px; -} -.form-horizontal .help-block { - margin-bottom: 0; -} -.form-horizontal input + .help-block, -.form-horizontal select + .help-block, -.form-horizontal textarea + .help-block, -.form-horizontal .uneditable-input + .help-block, -.form-horizontal .input-prepend + .help-block, -.form-horizontal .input-append + .help-block { - margin-top: 10px; -} -.form-horizontal .form-actions { - padding-left: 180px; -} -.btn { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; - padding: 4px 12px; - margin-bottom: 0; - font-size: 14px; - line-height: 20px; - text-align: center; - vertical-align: middle; - cursor: pointer; - color: #333333; - text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); - background-color: #f5f5f5; - background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); - background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); - background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); - border-color: #e6e6e6 #e6e6e6 #bfbfbf; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #e6e6e6; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - border: 1px solid #bbbbbb; - *border: 0; - border-bottom-color: #a2a2a2; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - *margin-left: .3em; - -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); - -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); - box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); -} -.btn:hover, -.btn:active, -.btn.active, -.btn.disabled, -.btn[disabled] { - color: #333333; - background-color: #e6e6e6; - *background-color: #d9d9d9; -} -.btn:active, -.btn.active { - background-color: #cccccc \9; -} -.btn:first-child { - *margin-left: 0; -} -.btn:hover { - color: #333333; - text-decoration: none; - background-position: 0 -15px; - -webkit-transition: background-position 0.1s linear; - -moz-transition: background-position 0.1s linear; - -o-transition: background-position 0.1s linear; - transition: background-position 0.1s linear; -} -.btn:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -.btn.active, -.btn:active { - background-image: none; - outline: 0; - -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); - -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); - box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); -} -.btn.disabled, -.btn[disabled] { - cursor: default; - background-image: none; - opacity: 0.65; - filter: alpha(opacity=65); - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} -.btn-large { - padding: 11px 19px; - font-size: 17.5px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} -.btn-large [class^="icon-"], -.btn-large [class*=" icon-"] { - margin-top: 4px; -} -.btn-small { - padding: 2px 10px; - font-size: 11.9px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -.btn-small [class^="icon-"], -.btn-small [class*=" icon-"] { - margin-top: 0; -} -.btn-mini [class^="icon-"], -.btn-mini [class*=" icon-"] { - margin-top: -1px; -} -.btn-mini { - padding: 0 6px; - font-size: 10.5px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -.btn-block { - display: block; - width: 100%; - padding-left: 0; - padding-right: 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.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-primary.active, -.btn-warning.active, -.btn-danger.active, -.btn-success.active, -.btn-info.active, -.btn-inverse.active { - color: rgba(255, 255, 255, 0.75); -} -.btn { - border-color: #c5c5c5; - border-color: rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.25); -} -.btn-primary { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #006dcc; - background-image: -moz-linear-gradient(top, #0088cc, #0044cc); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); - background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); - background-image: -o-linear-gradient(top, #0088cc, #0044cc); - background-image: linear-gradient(to bottom, #0088cc, #0044cc); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); - border-color: #0044cc #0044cc #002a80; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #0044cc; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-primary:hover, -.btn-primary:active, -.btn-primary.active, -.btn-primary.disabled, -.btn-primary[disabled] { - color: #ffffff; - background-color: #0044cc; - *background-color: #003bb3; -} -.btn-primary:active, -.btn-primary.active { - background-color: #003399 \9; -} -.btn-warning { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #faa732; - background-image: -moz-linear-gradient(top, #fbb450, #f89406); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); - background-image: -webkit-linear-gradient(top, #fbb450, #f89406); - background-image: -o-linear-gradient(top, #fbb450, #f89406); - background-image: linear-gradient(to bottom, #fbb450, #f89406); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); - border-color: #f89406 #f89406 #ad6704; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #f89406; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-warning:hover, -.btn-warning:active, -.btn-warning.active, -.btn-warning.disabled, -.btn-warning[disabled] { - color: #ffffff; - background-color: #f89406; - *background-color: #df8505; -} -.btn-warning:active, -.btn-warning.active { - background-color: #c67605 \9; -} -.btn-danger { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #da4f49; - background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f); - background-image: -o-linear-gradient(top, #ee5f5b, #bd362f); - background-image: linear-gradient(to bottom, #ee5f5b, #bd362f); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0); - border-color: #bd362f #bd362f #802420; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #bd362f; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-danger:hover, -.btn-danger:active, -.btn-danger.active, -.btn-danger.disabled, -.btn-danger[disabled] { - color: #ffffff; - background-color: #bd362f; - *background-color: #a9302a; -} -.btn-danger:active, -.btn-danger.active { - background-color: #942a25 \9; -} -.btn-success { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #5bb75b; - background-image: -moz-linear-gradient(top, #62c462, #51a351); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)); - background-image: -webkit-linear-gradient(top, #62c462, #51a351); - background-image: -o-linear-gradient(top, #62c462, #51a351); - background-image: linear-gradient(to bottom, #62c462, #51a351); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0); - border-color: #51a351 #51a351 #387038; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #51a351; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-success:hover, -.btn-success:active, -.btn-success.active, -.btn-success.disabled, -.btn-success[disabled] { - color: #ffffff; - background-color: #51a351; - *background-color: #499249; -} -.btn-success:active, -.btn-success.active { - background-color: #408140 \9; -} -.btn-info { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #49afcd; - background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); - background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); - background-image: linear-gradient(to bottom, #5bc0de, #2f96b4); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0); - border-color: #2f96b4 #2f96b4 #1f6377; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #2f96b4; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-info:hover, -.btn-info:active, -.btn-info.active, -.btn-info.disabled, -.btn-info[disabled] { - color: #ffffff; - background-color: #2f96b4; - *background-color: #2a85a0; -} -.btn-info:active, -.btn-info.active { - background-color: #24748c \9; -} -.btn-inverse { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #363636; - background-image: -moz-linear-gradient(top, #444444, #222222); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222)); - background-image: -webkit-linear-gradient(top, #444444, #222222); - background-image: -o-linear-gradient(top, #444444, #222222); - background-image: linear-gradient(to bottom, #444444, #222222); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0); - border-color: #222222 #222222 #000000; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #222222; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-inverse:hover, -.btn-inverse:active, -.btn-inverse.active, -.btn-inverse.disabled, -.btn-inverse[disabled] { - color: #ffffff; - background-color: #222222; - *background-color: #151515; -} -.btn-inverse:active, -.btn-inverse.active { - background-color: #080808 \9; -} -button.btn, -input[type="submit"].btn { - *padding-top: 3px; - *padding-bottom: 3px; -} -button.btn::-moz-focus-inner, -input[type="submit"].btn::-moz-focus-inner { - padding: 0; - border: 0; -} -button.btn.btn-large, -input[type="submit"].btn.btn-large { - *padding-top: 7px; - *padding-bottom: 7px; -} -button.btn.btn-small, -input[type="submit"].btn.btn-small { - *padding-top: 3px; - *padding-bottom: 3px; -} -button.btn.btn-mini, -input[type="submit"].btn.btn-mini { - *padding-top: 1px; - *padding-bottom: 1px; -} -.btn-link, -.btn-link:active, -.btn-link[disabled] { - background-color: transparent; - background-image: none; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} -.btn-link { - border-color: transparent; - cursor: pointer; - color: #0088cc; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.btn-link:hover { - color: #005580; - text-decoration: underline; - background-color: transparent; -} -.btn-link[disabled]:hover { - color: #333333; - text-decoration: none; -} -[class^="icon-"], -[class*=" icon-"] { - display: inline-block; - width: 14px; - height: 14px; - *margin-right: .3em; - line-height: 14px; - vertical-align: text-top; - background-image: url("../img/glyphicons-halflings.png"); - background-position: 14px 14px; - background-repeat: no-repeat; - margin-top: 1px; -} -/* White icons with optional class, or on hover/active states of certain elements */ -.icon-white, -.nav-pills > .active > a > [class^="icon-"], -.nav-pills > .active > a > [class*=" icon-"], -.nav-list > .active > a > [class^="icon-"], -.nav-list > .active > a > [class*=" icon-"], -.navbar-inverse .nav > .active > a > [class^="icon-"], -.navbar-inverse .nav > .active > a > [class*=" icon-"], -.dropdown-menu > li > a:hover > [class^="icon-"], -.dropdown-menu > li > a:hover > [class*=" icon-"], -.dropdown-menu > .active > a > [class^="icon-"], -.dropdown-menu > .active > a > [class*=" icon-"], -.dropdown-submenu:hover > a > [class^="icon-"], -.dropdown-submenu:hover > a > [class*=" icon-"] { - background-image: url("../img/glyphicons-halflings-white.png"); -} -.icon-glass { - background-position: 0 0; -} -.icon-music { - background-position: -24px 0; -} -.icon-search { - background-position: -48px 0; -} -.icon-envelope { - background-position: -72px 0; -} -.icon-heart { - background-position: -96px 0; -} -.icon-star { - background-position: -120px 0; -} -.icon-star-empty { - background-position: -144px 0; -} -.icon-user { - background-position: -168px 0; -} -.icon-film { - background-position: -192px 0; -} -.icon-th-large { - background-position: -216px 0; -} -.icon-th { - background-position: -240px 0; -} -.icon-th-list { - background-position: -264px 0; -} -.icon-ok { - background-position: -288px 0; -} -.icon-remove { - background-position: -312px 0; -} -.icon-zoom-in { - background-position: -336px 0; -} -.icon-zoom-out { - background-position: -360px 0; -} -.icon-off { - background-position: -384px 0; -} -.icon-signal { - background-position: -408px 0; -} -.icon-cog { - background-position: -432px 0; -} -.icon-trash { - background-position: -456px 0; -} -.icon-home { - background-position: 0 -24px; -} -.icon-file { - background-position: -24px -24px; -} -.icon-time { - background-position: -48px -24px; -} -.icon-road { - background-position: -72px -24px; -} -.icon-download-alt { - background-position: -96px -24px; -} -.icon-download { - background-position: -120px -24px; -} -.icon-upload { - background-position: -144px -24px; -} -.icon-inbox { - background-position: -168px -24px; -} -.icon-play-circle { - background-position: -192px -24px; -} -.icon-repeat { - background-position: -216px -24px; -} -.icon-refresh { - background-position: -240px -24px; -} -.icon-list-alt { - background-position: -264px -24px; -} -.icon-lock { - background-position: -287px -24px; -} -.icon-flag { - background-position: -312px -24px; -} -.icon-headphones { - background-position: -336px -24px; -} -.icon-volume-off { - background-position: -360px -24px; -} -.icon-volume-down { - background-position: -384px -24px; -} -.icon-volume-up { - background-position: -408px -24px; -} -.icon-qrcode { - background-position: -432px -24px; -} -.icon-barcode { - background-position: -456px -24px; -} -.icon-tag { - background-position: 0 -48px; -} -.icon-tags { - background-position: -25px -48px; -} -.icon-book { - background-position: -48px -48px; -} -.icon-bookmark { - background-position: -72px -48px; -} -.icon-print { - background-position: -96px -48px; -} -.icon-camera { - background-position: -120px -48px; -} -.icon-font { - background-position: -144px -48px; -} -.icon-bold { - background-position: -167px -48px; -} -.icon-italic { - background-position: -192px -48px; -} -.icon-text-height { - background-position: -216px -48px; -} -.icon-text-width { - background-position: -240px -48px; -} -.icon-align-left { - background-position: -264px -48px; -} -.icon-align-center { - background-position: -288px -48px; -} -.icon-align-right { - background-position: -312px -48px; -} -.icon-align-justify { - background-position: -336px -48px; -} -.icon-list { - background-position: -360px -48px; -} -.icon-indent-left { - background-position: -384px -48px; -} -.icon-indent-right { - background-position: -408px -48px; -} -.icon-facetime-video { - background-position: -432px -48px; -} -.icon-picture { - background-position: -456px -48px; -} -.icon-pencil { - background-position: 0 -72px; -} -.icon-map-marker { - background-position: -24px -72px; -} -.icon-adjust { - background-position: -48px -72px; -} -.icon-tint { - background-position: -72px -72px; -} -.icon-edit { - background-position: -96px -72px; -} -.icon-share { - background-position: -120px -72px; -} -.icon-check { - background-position: -144px -72px; -} -.icon-move { - background-position: -168px -72px; -} -.icon-step-backward { - background-position: -192px -72px; -} -.icon-fast-backward { - background-position: -216px -72px; -} -.icon-backward { - background-position: -240px -72px; -} -.icon-play { - background-position: -264px -72px; -} -.icon-pause { - background-position: -288px -72px; -} -.icon-stop { - background-position: -312px -72px; -} -.icon-forward { - background-position: -336px -72px; -} -.icon-fast-forward { - background-position: -360px -72px; -} -.icon-step-forward { - background-position: -384px -72px; -} -.icon-eject { - background-position: -408px -72px; -} -.icon-chevron-left { - background-position: -432px -72px; -} -.icon-chevron-right { - background-position: -456px -72px; -} -.icon-plus-sign { - background-position: 0 -96px; -} -.icon-minus-sign { - background-position: -24px -96px; -} -.icon-remove-sign { - background-position: -48px -96px; -} -.icon-ok-sign { - background-position: -72px -96px; -} -.icon-question-sign { - background-position: -96px -96px; -} -.icon-info-sign { - background-position: -120px -96px; -} -.icon-screenshot { - background-position: -144px -96px; -} -.icon-remove-circle { - background-position: -168px -96px; -} -.icon-ok-circle { - background-position: -192px -96px; -} -.icon-ban-circle { - background-position: -216px -96px; -} -.icon-arrow-left { - background-position: -240px -96px; -} -.icon-arrow-right { - background-position: -264px -96px; -} -.icon-arrow-up { - background-position: -289px -96px; -} -.icon-arrow-down { - background-position: -312px -96px; -} -.icon-share-alt { - background-position: -336px -96px; -} -.icon-resize-full { - background-position: -360px -96px; -} -.icon-resize-small { - background-position: -384px -96px; -} -.icon-plus { - background-position: -408px -96px; -} -.icon-minus { - background-position: -433px -96px; -} -.icon-asterisk { - background-position: -456px -96px; -} -.icon-exclamation-sign { - background-position: 0 -120px; -} -.icon-gift { - background-position: -24px -120px; -} -.icon-leaf { - background-position: -48px -120px; -} -.icon-fire { - background-position: -72px -120px; -} -.icon-eye-open { - background-position: -96px -120px; -} -.icon-eye-close { - background-position: -120px -120px; -} -.icon-warning-sign { - background-position: -144px -120px; -} -.icon-plane { - background-position: -168px -120px; -} -.icon-calendar { - background-position: -192px -120px; -} -.icon-random { - background-position: -216px -120px; - width: 16px; -} -.icon-comment { - background-position: -240px -120px; -} -.icon-magnet { - background-position: -264px -120px; -} -.icon-chevron-up { - background-position: -288px -120px; -} -.icon-chevron-down { - background-position: -313px -119px; -} -.icon-retweet { - background-position: -336px -120px; -} -.icon-shopping-cart { - background-position: -360px -120px; -} -.icon-folder-close { - background-position: -384px -120px; -} -.icon-folder-open { - background-position: -408px -120px; - width: 16px; -} -.icon-resize-vertical { - background-position: -432px -119px; -} -.icon-resize-horizontal { - background-position: -456px -118px; -} -.icon-hdd { - background-position: 0 -144px; -} -.icon-bullhorn { - background-position: -24px -144px; -} -.icon-bell { - background-position: -48px -144px; -} -.icon-certificate { - background-position: -72px -144px; -} -.icon-thumbs-up { - background-position: -96px -144px; -} -.icon-thumbs-down { - background-position: -120px -144px; -} -.icon-hand-right { - background-position: -144px -144px; -} -.icon-hand-left { - background-position: -168px -144px; -} -.icon-hand-up { - background-position: -192px -144px; -} -.icon-hand-down { - background-position: -216px -144px; -} -.icon-circle-arrow-right { - background-position: -240px -144px; -} -.icon-circle-arrow-left { - background-position: -264px -144px; -} -.icon-circle-arrow-up { - background-position: -288px -144px; -} -.icon-circle-arrow-down { - background-position: -312px -144px; -} -.icon-globe { - background-position: -336px -144px; -} -.icon-wrench { - background-position: -360px -144px; -} -.icon-tasks { - background-position: -384px -144px; -} -.icon-filter { - background-position: -408px -144px; -} -.icon-briefcase { - background-position: -432px -144px; -} -.icon-fullscreen { - background-position: -456px -144px; -} -.btn-group { - position: relative; - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; - font-size: 0; - vertical-align: middle; - white-space: nowrap; - *margin-left: .3em; -} -.btn-group:first-child { - *margin-left: 0; -} -.btn-group + .btn-group { - margin-left: 5px; -} -.btn-toolbar { - font-size: 0; - margin-top: 10px; - margin-bottom: 10px; -} -.btn-toolbar > .btn + .btn, -.btn-toolbar > .btn-group + .btn, -.btn-toolbar > .btn + .btn-group { - margin-left: 5px; -} -.btn-group > .btn { - position: relative; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.btn-group > .btn + .btn { - margin-left: -1px; -} -.btn-group > .btn, -.btn-group > .dropdown-menu, -.btn-group > .popover { - font-size: 14px; -} -.btn-group > .btn-mini { - font-size: 10.5px; -} -.btn-group > .btn-small { - font-size: 11.9px; -} -.btn-group > .btn-large { - font-size: 17.5px; -} -.btn-group > .btn:first-child { - margin-left: 0; - -webkit-border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; - border-top-left-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - border-bottom-left-radius: 4px; -} -.btn-group > .btn:last-child, -.btn-group > .dropdown-toggle { - -webkit-border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; - border-top-right-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -moz-border-radius-bottomright: 4px; - border-bottom-right-radius: 4px; -} -.btn-group > .btn.large:first-child { - margin-left: 0; - -webkit-border-top-left-radius: 6px; - -moz-border-radius-topleft: 6px; - border-top-left-radius: 6px; - -webkit-border-bottom-left-radius: 6px; - -moz-border-radius-bottomleft: 6px; - border-bottom-left-radius: 6px; -} -.btn-group > .btn.large:last-child, -.btn-group > .large.dropdown-toggle { - -webkit-border-top-right-radius: 6px; - -moz-border-radius-topright: 6px; - border-top-right-radius: 6px; - -webkit-border-bottom-right-radius: 6px; - -moz-border-radius-bottomright: 6px; - border-bottom-right-radius: 6px; -} -.btn-group > .btn:hover, -.btn-group > .btn:focus, -.btn-group > .btn:active, -.btn-group > .btn.active { - z-index: 2; -} -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; -} -.btn-group > .btn + .dropdown-toggle { - padding-left: 8px; - padding-right: 8px; - -webkit-box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); - -moz-box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); - box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); - *padding-top: 5px; - *padding-bottom: 5px; -} -.btn-group > .btn-mini + .dropdown-toggle { - padding-left: 5px; - padding-right: 5px; - *padding-top: 2px; - *padding-bottom: 2px; -} -.btn-group > .btn-small + .dropdown-toggle { - *padding-top: 5px; - *padding-bottom: 4px; -} -.btn-group > .btn-large + .dropdown-toggle { - padding-left: 12px; - padding-right: 12px; - *padding-top: 7px; - *padding-bottom: 7px; -} -.btn-group.open .dropdown-toggle { - background-image: none; - -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); - -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); - box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); -} -.btn-group.open .btn.dropdown-toggle { - background-color: #e6e6e6; -} -.btn-group.open .btn-primary.dropdown-toggle { - background-color: #0044cc; -} -.btn-group.open .btn-warning.dropdown-toggle { - background-color: #f89406; -} -.btn-group.open .btn-danger.dropdown-toggle { - background-color: #bd362f; -} -.btn-group.open .btn-success.dropdown-toggle { - background-color: #51a351; -} -.btn-group.open .btn-info.dropdown-toggle { - background-color: #2f96b4; -} -.btn-group.open .btn-inverse.dropdown-toggle { - background-color: #222222; -} -.btn .caret { - margin-top: 8px; - margin-left: 0; -} -.btn-mini .caret, -.btn-small .caret, -.btn-large .caret { - margin-top: 6px; -} -.btn-large .caret { - border-left-width: 5px; - border-right-width: 5px; - border-top-width: 5px; -} -.dropup .btn-large .caret { - border-bottom-width: 5px; -} -.btn-primary .caret, -.btn-warning .caret, -.btn-danger .caret, -.btn-info .caret, -.btn-success .caret, -.btn-inverse .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} -.btn-group-vertical { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; -} -.btn-group-vertical > .btn { - display: block; - float: none; - max-width: 100%; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.btn-group-vertical > .btn + .btn { - margin-left: 0; - margin-top: -1px; -} -.btn-group-vertical > .btn:first-child { - -webkit-border-radius: 4px 4px 0 0; - -moz-border-radius: 4px 4px 0 0; - border-radius: 4px 4px 0 0; -} -.btn-group-vertical > .btn:last-child { - -webkit-border-radius: 0 0 4px 4px; - -moz-border-radius: 0 0 4px 4px; - border-radius: 0 0 4px 4px; -} -.btn-group-vertical > .btn-large:first-child { - -webkit-border-radius: 6px 6px 0 0; - -moz-border-radius: 6px 6px 0 0; - border-radius: 6px 6px 0 0; -} -.btn-group-vertical > .btn-large:last-child { - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; -} -.nav { - margin-left: 0; - margin-bottom: 20px; - list-style: none; -} -.nav > li > a { - display: block; -} -.nav > li > a:hover { - text-decoration: none; - background-color: #eeeeee; -} -.nav > li > a > img { - max-width: none; -} -.nav > .pull-right { - float: right; -} -.nav-header { - display: block; - padding: 3px 15px; - font-size: 11px; - font-weight: bold; - line-height: 20px; - color: #999999; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); - text-transform: uppercase; -} -.nav li + .nav-header { - margin-top: 9px; -} -.nav-list { - padding-left: 15px; - padding-right: 15px; - margin-bottom: 0; -} -.nav-list > li > a, -.nav-list .nav-header { - margin-left: -15px; - margin-right: -15px; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); -} -.nav-list > li > a { - padding: 3px 15px; -} -.nav-list > .active > a, -.nav-list > .active > a:hover { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); - background-color: #0088cc; -} -.nav-list [class^="icon-"], -.nav-list [class*=" icon-"] { - margin-right: 2px; -} -.nav-list .divider { - *width: 100%; - height: 1px; - margin: 9px 1px; - *margin: -5px 0 5px; - overflow: hidden; - background-color: #e5e5e5; - border-bottom: 1px solid #ffffff; -} -.nav-tabs, -.nav-pills { - *zoom: 1; -} -.nav-tabs:before, -.nav-pills:before, -.nav-tabs:after, -.nav-pills:after { - display: table; - content: ""; - line-height: 0; -} -.nav-tabs:after, -.nav-pills:after { - clear: both; -} -.nav-tabs > li, -.nav-pills > li { - float: left; -} -.nav-tabs > li > a, -.nav-pills > li > a { - padding-right: 12px; - padding-left: 12px; - margin-right: 2px; - line-height: 14px; -} -.nav-tabs { - border-bottom: 1px solid #ddd; -} -.nav-tabs > li { - margin-bottom: -1px; -} -.nav-tabs > li > a { - padding-top: 8px; - padding-bottom: 8px; - line-height: 20px; - border: 1px solid transparent; - -webkit-border-radius: 4px 4px 0 0; - -moz-border-radius: 4px 4px 0 0; - border-radius: 4px 4px 0 0; -} -.nav-tabs > li > a:hover { - border-color: #eeeeee #eeeeee #dddddd; -} -.nav-tabs > .active > a, -.nav-tabs > .active > a:hover { - color: #555555; - background-color: #ffffff; - border: 1px solid #ddd; - border-bottom-color: transparent; - cursor: default; -} -.nav-pills > li > a { - padding-top: 8px; - padding-bottom: 8px; - margin-top: 2px; - margin-bottom: 2px; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; -} -.nav-pills > .active > a, -.nav-pills > .active > a:hover { - color: #ffffff; - background-color: #0088cc; -} -.nav-stacked > li { - float: none; -} -.nav-stacked > li > a { - margin-right: 0; -} -.nav-tabs.nav-stacked { - border-bottom: 0; -} -.nav-tabs.nav-stacked > li > a { - border: 1px solid #ddd; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.nav-tabs.nav-stacked > li:first-child > a { - -webkit-border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; - border-top-right-radius: 4px; - -webkit-border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; - border-top-left-radius: 4px; -} -.nav-tabs.nav-stacked > li:last-child > a { - -webkit-border-bottom-right-radius: 4px; - -moz-border-radius-bottomright: 4px; - border-bottom-right-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - border-bottom-left-radius: 4px; -} -.nav-tabs.nav-stacked > li > a:hover { - border-color: #ddd; - z-index: 2; -} -.nav-pills.nav-stacked > li > a { - margin-bottom: 3px; -} -.nav-pills.nav-stacked > li:last-child > a { - margin-bottom: 1px; -} -.nav-tabs .dropdown-menu { - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; -} -.nav-pills .dropdown-menu { - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} -.nav .dropdown-toggle .caret { - border-top-color: #0088cc; - border-bottom-color: #0088cc; - margin-top: 6px; -} -.nav .dropdown-toggle:hover .caret { - border-top-color: #005580; - border-bottom-color: #005580; -} -/* move down carets for tabs */ -.nav-tabs .dropdown-toggle .caret { - margin-top: 8px; -} -.nav .active .dropdown-toggle .caret { - border-top-color: #fff; - border-bottom-color: #fff; -} -.nav-tabs .active .dropdown-toggle .caret { - border-top-color: #555555; - border-bottom-color: #555555; -} -.nav > .dropdown.active > a:hover { - cursor: pointer; -} -.nav-tabs .open .dropdown-toggle, -.nav-pills .open .dropdown-toggle, -.nav > li.dropdown.open.active > a:hover { - color: #ffffff; - background-color: #999999; - border-color: #999999; -} -.nav li.dropdown.open .caret, -.nav li.dropdown.open.active .caret, -.nav li.dropdown.open a:hover .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; - opacity: 1; - filter: alpha(opacity=100); -} -.tabs-stacked .open > a:hover { - border-color: #999999; -} -.tabbable { - *zoom: 1; -} -.tabbable:before, -.tabbable:after { - display: table; - content: ""; - line-height: 0; -} -.tabbable:after { - clear: both; -} -.tab-content { - overflow: auto; -} -.tabs-below > .nav-tabs, -.tabs-right > .nav-tabs, -.tabs-left > .nav-tabs { - border-bottom: 0; -} -.tab-content > .tab-pane, -.pill-content > .pill-pane { - display: none; -} -.tab-content > .active, -.pill-content > .active { - display: block; -} -.tabs-below > .nav-tabs { - border-top: 1px solid #ddd; -} -.tabs-below > .nav-tabs > li { - margin-top: -1px; - margin-bottom: 0; -} -.tabs-below > .nav-tabs > li > a { - -webkit-border-radius: 0 0 4px 4px; - -moz-border-radius: 0 0 4px 4px; - border-radius: 0 0 4px 4px; -} -.tabs-below > .nav-tabs > li > a:hover { - border-bottom-color: transparent; - border-top-color: #ddd; -} -.tabs-below > .nav-tabs > .active > a, -.tabs-below > .nav-tabs > .active > a:hover { - border-color: transparent #ddd #ddd #ddd; -} -.tabs-left > .nav-tabs > li, -.tabs-right > .nav-tabs > li { - float: none; -} -.tabs-left > .nav-tabs > li > a, -.tabs-right > .nav-tabs > li > a { - min-width: 74px; - margin-right: 0; - margin-bottom: 3px; -} -.tabs-left > .nav-tabs { - float: left; - margin-right: 19px; - border-right: 1px solid #ddd; -} -.tabs-left > .nav-tabs > li > a { - margin-right: -1px; - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} -.tabs-left > .nav-tabs > li > a:hover { - border-color: #eeeeee #dddddd #eeeeee #eeeeee; -} -.tabs-left > .nav-tabs .active > a, -.tabs-left > .nav-tabs .active > a:hover { - border-color: #ddd transparent #ddd #ddd; - *border-right-color: #ffffff; -} -.tabs-right > .nav-tabs { - float: right; - margin-left: 19px; - border-left: 1px solid #ddd; -} -.tabs-right > .nav-tabs > li > a { - margin-left: -1px; - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} -.tabs-right > .nav-tabs > li > a:hover { - border-color: #eeeeee #eeeeee #eeeeee #dddddd; -} -.tabs-right > .nav-tabs .active > a, -.tabs-right > .nav-tabs .active > a:hover { - border-color: #ddd #ddd #ddd transparent; - *border-left-color: #ffffff; -} -.nav > .disabled > a { - color: #999999; -} -.nav > .disabled > a:hover { - text-decoration: none; - background-color: transparent; - cursor: default; -} -.navbar { - overflow: visible; - margin-bottom: 20px; - *position: relative; - *z-index: 2; -} -.navbar-inner { - min-height: 40px; - padding-left: 20px; - padding-right: 20px; - background-color: #fafafa; - background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2)); - background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2); - background-image: -o-linear-gradient(top, #ffffff, #f2f2f2); - background-image: linear-gradient(to bottom, #ffffff, #f2f2f2); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0); - border: 1px solid #d4d4d4; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); - -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); - *zoom: 1; -} -.navbar-inner:before, -.navbar-inner:after { - display: table; - content: ""; - line-height: 0; -} -.navbar-inner:after { - clear: both; -} -.navbar .container { - width: auto; -} -.nav-collapse.collapse { - height: auto; - overflow: visible; -} -.navbar .brand { - float: left; - display: block; - padding: 10px 20px 10px; - margin-left: -20px; - font-size: 20px; - font-weight: 200; - color: #777777; - text-shadow: 0 1px 0 #ffffff; -} -.navbar .brand:hover { - text-decoration: none; -} -.navbar-text { - margin-bottom: 0; - line-height: 40px; - color: #777777; -} -.navbar-link { - color: #777777; -} -.navbar-link:hover { - color: #333333; -} -.navbar .divider-vertical { - height: 40px; - margin: 0 9px; - border-left: 1px solid #f2f2f2; - border-right: 1px solid #ffffff; -} -.navbar .btn, -.navbar .btn-group { - margin-top: 5px; -} -.navbar .btn-group .btn, -.navbar .input-prepend .btn, -.navbar .input-append .btn { - margin-top: 0; -} -.navbar-form { - margin-bottom: 0; - *zoom: 1; -} -.navbar-form:before, -.navbar-form:after { - display: table; - content: ""; - line-height: 0; -} -.navbar-form:after { - clear: both; -} -.navbar-form input, -.navbar-form select, -.navbar-form .radio, -.navbar-form .checkbox { - margin-top: 5px; -} -.navbar-form input, -.navbar-form select, -.navbar-form .btn { - display: inline-block; - margin-bottom: 0; -} -.navbar-form input[type="image"], -.navbar-form input[type="checkbox"], -.navbar-form input[type="radio"] { - margin-top: 3px; -} -.navbar-form .input-append, -.navbar-form .input-prepend { - margin-top: 5px; - white-space: nowrap; -} -.navbar-form .input-append input, -.navbar-form .input-prepend input { - margin-top: 0; -} -.navbar-search { - position: relative; - float: left; - margin-top: 5px; - margin-bottom: 0; -} -.navbar-search .search-query { - margin-bottom: 0; - padding: 4px 14px; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 13px; - font-weight: normal; - line-height: 1; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; -} -.navbar-static-top { - position: static; - margin-bottom: 0; -} -.navbar-static-top .navbar-inner { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - z-index: 1030; - margin-bottom: 0; -} -.navbar-fixed-top .navbar-inner, -.navbar-static-top .navbar-inner { - border-width: 0 0 1px; -} -.navbar-fixed-bottom .navbar-inner { - border-width: 1px 0 0; -} -.navbar-fixed-top .navbar-inner, -.navbar-fixed-bottom .navbar-inner { - padding-left: 0; - padding-right: 0; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.navbar-static-top .container, -.navbar-fixed-top .container, -.navbar-fixed-bottom .container { - width: 940px; -} -.navbar-fixed-top { - top: 0; -} -.navbar-fixed-top .navbar-inner, -.navbar-static-top .navbar-inner { - -webkit-box-shadow: 0 1px 10px rgba(0,0,0,.1); - -moz-box-shadow: 0 1px 10px rgba(0,0,0,.1); - box-shadow: 0 1px 10px rgba(0,0,0,.1); -} -.navbar-fixed-bottom { - bottom: 0; -} -.navbar-fixed-bottom .navbar-inner { - -webkit-box-shadow: 0 -1px 10px rgba(0,0,0,.1); - -moz-box-shadow: 0 -1px 10px rgba(0,0,0,.1); - box-shadow: 0 -1px 10px rgba(0,0,0,.1); -} -.navbar .nav { - position: relative; - left: 0; - display: block; - float: left; - margin: 0 10px 0 0; -} -.navbar .nav.pull-right { - float: right; - margin-right: 0; -} -.navbar .nav > li { - float: left; -} -.navbar .nav > li > a { - float: none; - padding: 10px 15px 10px; - color: #777777; - text-decoration: none; - text-shadow: 0 1px 0 #ffffff; -} -.navbar .nav .dropdown-toggle .caret { - margin-top: 8px; -} -.navbar .nav > li > a:focus, -.navbar .nav > li > a:hover { - background-color: transparent; - color: #333333; - text-decoration: none; -} -.navbar .nav > .active > a, -.navbar .nav > .active > a:hover, -.navbar .nav > .active > a:focus { - color: #555555; - text-decoration: none; - background-color: #e5e5e5; - -webkit-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); - -moz-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); -} -.navbar .btn-navbar { - display: none; - float: right; - padding: 7px 10px; - margin-left: 5px; - margin-right: 5px; - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #ededed; - background-image: -moz-linear-gradient(top, #f2f2f2, #e5e5e5); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5)); - background-image: -webkit-linear-gradient(top, #f2f2f2, #e5e5e5); - background-image: -o-linear-gradient(top, #f2f2f2, #e5e5e5); - background-image: linear-gradient(to bottom, #f2f2f2, #e5e5e5); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0); - border-color: #e5e5e5 #e5e5e5 #bfbfbf; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #e5e5e5; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075); - -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075); - box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075); -} -.navbar .btn-navbar:hover, -.navbar .btn-navbar:active, -.navbar .btn-navbar.active, -.navbar .btn-navbar.disabled, -.navbar .btn-navbar[disabled] { - color: #ffffff; - background-color: #e5e5e5; - *background-color: #d9d9d9; -} -.navbar .btn-navbar:active, -.navbar .btn-navbar.active { - background-color: #cccccc \9; -} -.navbar .btn-navbar .icon-bar { - display: block; - width: 18px; - height: 2px; - background-color: #f5f5f5; - -webkit-border-radius: 1px; - -moz-border-radius: 1px; - border-radius: 1px; - -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); - -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); - box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); -} -.btn-navbar .icon-bar + .icon-bar { - margin-top: 3px; -} -.navbar .nav > li > .dropdown-menu:before { - content: ''; - display: inline-block; - border-left: 7px solid transparent; - border-right: 7px solid transparent; - border-bottom: 7px solid #ccc; - border-bottom-color: rgba(0, 0, 0, 0.2); - position: absolute; - top: -7px; - left: 9px; -} -.navbar .nav > li > .dropdown-menu:after { - content: ''; - display: inline-block; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid #ffffff; - position: absolute; - top: -6px; - left: 10px; -} -.navbar-fixed-bottom .nav > li > .dropdown-menu:before { - border-top: 7px solid #ccc; - border-top-color: rgba(0, 0, 0, 0.2); - border-bottom: 0; - bottom: -7px; - top: auto; -} -.navbar-fixed-bottom .nav > li > .dropdown-menu:after { - border-top: 6px solid #ffffff; - border-bottom: 0; - bottom: -6px; - top: auto; -} -.navbar .nav li.dropdown > a:hover .caret { - border-top-color: #555555; - border-bottom-color: #555555; -} -.navbar .nav li.dropdown.open > .dropdown-toggle, -.navbar .nav li.dropdown.active > .dropdown-toggle, -.navbar .nav li.dropdown.open.active > .dropdown-toggle { - background-color: #e5e5e5; - color: #555555; -} -.navbar .nav li.dropdown > .dropdown-toggle .caret { - border-top-color: #777777; - border-bottom-color: #777777; -} -.navbar .nav li.dropdown.open > .dropdown-toggle .caret, -.navbar .nav li.dropdown.active > .dropdown-toggle .caret, -.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret { - border-top-color: #555555; - border-bottom-color: #555555; -} -.navbar .pull-right > li > .dropdown-menu, -.navbar .nav > li > .dropdown-menu.pull-right { - left: auto; - right: 0; -} -.navbar .pull-right > li > .dropdown-menu:before, -.navbar .nav > li > .dropdown-menu.pull-right:before { - left: auto; - right: 12px; -} -.navbar .pull-right > li > .dropdown-menu:after, -.navbar .nav > li > .dropdown-menu.pull-right:after { - left: auto; - right: 13px; -} -.navbar .pull-right > li > .dropdown-menu .dropdown-menu, -.navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu { - left: auto; - right: 100%; - margin-left: 0; - margin-right: -1px; - -webkit-border-radius: 6px 0 6px 6px; - -moz-border-radius: 6px 0 6px 6px; - border-radius: 6px 0 6px 6px; -} -.navbar-inverse .navbar-inner { - background-color: #1b1b1b; - background-image: -moz-linear-gradient(top, #222222, #111111); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111)); - background-image: -webkit-linear-gradient(top, #222222, #111111); - background-image: -o-linear-gradient(top, #222222, #111111); - background-image: linear-gradient(to bottom, #222222, #111111); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0); - border-color: #252525; -} -.navbar-inverse .brand, -.navbar-inverse .nav > li > a { - color: #999999; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); -} -.navbar-inverse .brand:hover, -.navbar-inverse .nav > li > a:hover { - color: #ffffff; -} -.navbar-inverse .brand { - color: #999999; -} -.navbar-inverse .navbar-text { - color: #999999; -} -.navbar-inverse .nav > li > a:focus, -.navbar-inverse .nav > li > a:hover { - background-color: transparent; - color: #ffffff; -} -.navbar-inverse .nav .active > a, -.navbar-inverse .nav .active > a:hover, -.navbar-inverse .nav .active > a:focus { - color: #ffffff; - background-color: #111111; -} -.navbar-inverse .navbar-link { - color: #999999; -} -.navbar-inverse .navbar-link:hover { - color: #ffffff; -} -.navbar-inverse .divider-vertical { - border-left-color: #111111; - border-right-color: #222222; -} -.navbar-inverse .nav li.dropdown.open > .dropdown-toggle, -.navbar-inverse .nav li.dropdown.active > .dropdown-toggle, -.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle { - background-color: #111111; - color: #ffffff; -} -.navbar-inverse .nav li.dropdown > a:hover .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} -.navbar-inverse .nav li.dropdown > .dropdown-toggle .caret { - border-top-color: #999999; - border-bottom-color: #999999; -} -.navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret, -.navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret, -.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} -.navbar-inverse .navbar-search .search-query { - color: #ffffff; - background-color: #515151; - border-color: #111111; - -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15); - -moz-box-shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15); - box-shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15); - -webkit-transition: none; - -moz-transition: none; - -o-transition: none; - transition: none; -} -.navbar-inverse .navbar-search .search-query:-moz-placeholder { - color: #cccccc; -} -.navbar-inverse .navbar-search .search-query:-ms-input-placeholder { - color: #cccccc; -} -.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder { - color: #cccccc; -} -.navbar-inverse .navbar-search .search-query:focus, -.navbar-inverse .navbar-search .search-query.focused { - padding: 5px 15px; - color: #333333; - text-shadow: 0 1px 0 #ffffff; - background-color: #ffffff; - border: 0; - -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - outline: 0; -} -.navbar-inverse .btn-navbar { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #0e0e0e; - background-image: -moz-linear-gradient(top, #151515, #040404); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404)); - background-image: -webkit-linear-gradient(top, #151515, #040404); - background-image: -o-linear-gradient(top, #151515, #040404); - background-image: linear-gradient(to bottom, #151515, #040404); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0); - border-color: #040404 #040404 #000000; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #040404; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.navbar-inverse .btn-navbar:hover, -.navbar-inverse .btn-navbar:active, -.navbar-inverse .btn-navbar.active, -.navbar-inverse .btn-navbar.disabled, -.navbar-inverse .btn-navbar[disabled] { - color: #ffffff; - background-color: #040404; - *background-color: #000000; -} -.navbar-inverse .btn-navbar:active, -.navbar-inverse .btn-navbar.active { - background-color: #000000 \9; -} -.breadcrumb { - padding: 8px 15px; - margin: 0 0 20px; - list-style: none; - background-color: #f5f5f5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.breadcrumb > li { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; - text-shadow: 0 1px 0 #ffffff; -} -.breadcrumb > li > .divider { - padding: 0 5px; - color: #ccc; -} -.breadcrumb > .active { - color: #999999; -} -.pagination { - margin: 20px 0; -} -.pagination ul { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; - margin-left: 0; - margin-bottom: 0; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); -} -.pagination ul > li { - display: inline; -} -.pagination ul > li > a, -.pagination ul > li > span { - float: left; - padding: 4px 12px; - line-height: 20px; - text-decoration: none; - background-color: #ffffff; - border: 1px solid #dddddd; - border-left-width: 0; -} -.pagination ul > li > a:hover, -.pagination ul > .active > a, -.pagination ul > .active > span { - background-color: #f5f5f5; -} -.pagination ul > .active > a, -.pagination ul > .active > span { - color: #999999; - cursor: default; -} -.pagination ul > .disabled > span, -.pagination ul > .disabled > a, -.pagination ul > .disabled > a:hover { - color: #999999; - background-color: transparent; - cursor: default; -} -.pagination ul > li:first-child > a, -.pagination ul > li:first-child > span { - border-left-width: 1px; - -webkit-border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; - border-top-left-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - border-bottom-left-radius: 4px; -} -.pagination ul > li:last-child > a, -.pagination ul > li:last-child > span { - -webkit-border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; - border-top-right-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -moz-border-radius-bottomright: 4px; - border-bottom-right-radius: 4px; -} -.pagination-centered { - text-align: center; -} -.pagination-right { - text-align: right; -} -.pagination-large ul > li > a, -.pagination-large ul > li > span { - padding: 11px 19px; - font-size: 17.5px; -} -.pagination-large ul > li:first-child > a, -.pagination-large ul > li:first-child > span { - -webkit-border-top-left-radius: 6px; - -moz-border-radius-topleft: 6px; - border-top-left-radius: 6px; - -webkit-border-bottom-left-radius: 6px; - -moz-border-radius-bottomleft: 6px; - border-bottom-left-radius: 6px; -} -.pagination-large ul > li:last-child > a, -.pagination-large ul > li:last-child > span { - -webkit-border-top-right-radius: 6px; - -moz-border-radius-topright: 6px; - border-top-right-radius: 6px; - -webkit-border-bottom-right-radius: 6px; - -moz-border-radius-bottomright: 6px; - border-bottom-right-radius: 6px; -} -.pagination-mini ul > li:first-child > a, -.pagination-small ul > li:first-child > a, -.pagination-mini ul > li:first-child > span, -.pagination-small ul > li:first-child > span { - -webkit-border-top-left-radius: 3px; - -moz-border-radius-topleft: 3px; - border-top-left-radius: 3px; - -webkit-border-bottom-left-radius: 3px; - -moz-border-radius-bottomleft: 3px; - border-bottom-left-radius: 3px; -} -.pagination-mini ul > li:last-child > a, -.pagination-small ul > li:last-child > a, -.pagination-mini ul > li:last-child > span, -.pagination-small ul > li:last-child > span { - -webkit-border-top-right-radius: 3px; - -moz-border-radius-topright: 3px; - border-top-right-radius: 3px; - -webkit-border-bottom-right-radius: 3px; - -moz-border-radius-bottomright: 3px; - border-bottom-right-radius: 3px; -} -.pagination-small ul > li > a, -.pagination-small ul > li > span { - padding: 2px 10px; - font-size: 11.9px; -} -.pagination-mini ul > li > a, -.pagination-mini ul > li > span { - padding: 0 6px; - font-size: 10.5px; -} -.pager { - margin: 20px 0; - list-style: none; - text-align: center; - *zoom: 1; -} -.pager:before, -.pager:after { - display: table; - content: ""; - line-height: 0; -} -.pager:after { - clear: both; -} -.pager li { - display: inline; -} -.pager li > a, -.pager li > span { - display: inline-block; - padding: 5px 14px; - background-color: #fff; - border: 1px solid #ddd; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; -} -.pager li > a:hover { - text-decoration: none; - background-color: #f5f5f5; -} -.pager .next > a, -.pager .next > span { - float: right; -} -.pager .previous > a, -.pager .previous > span { - float: left; -} -.pager .disabled > a, -.pager .disabled > a:hover, -.pager .disabled > span { - color: #999999; - background-color: #fff; - cursor: default; -} -.thumbnails { - margin-left: -20px; - list-style: none; - *zoom: 1; -} -.thumbnails:before, -.thumbnails:after { - display: table; - content: ""; - line-height: 0; -} -.thumbnails:after { - clear: both; -} -.row-fluid .thumbnails { - margin-left: 0; -} -.thumbnails > li { - float: left; - margin-bottom: 20px; - margin-left: 20px; -} -.thumbnail { - display: block; - padding: 4px; - line-height: 20px; - border: 1px solid #ddd; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); - -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); - -webkit-transition: all 0.2s ease-in-out; - -moz-transition: all 0.2s ease-in-out; - -o-transition: all 0.2s ease-in-out; - transition: all 0.2s ease-in-out; -} -a.thumbnail:hover { - border-color: #0088cc; - -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); - -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); - box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); -} -.thumbnail > img { - display: block; - max-width: 100%; - margin-left: auto; - margin-right: auto; -} -.thumbnail .caption { - padding: 9px; - color: #555555; -} -.alert { - padding: 8px 35px 8px 14px; - margin-bottom: 20px; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); - background-color: #fcf8e3; - border: 1px solid #fbeed5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.alert, -.alert h4 { - color: #c09853; -} -.alert h4 { - margin: 0; -} -.alert .close { - position: relative; - top: -2px; - right: -21px; - line-height: 20px; -} -.alert-success { - background-color: #dff0d8; - border-color: #d6e9c6; - color: #468847; -} -.alert-success h4 { - color: #468847; -} -.alert-danger, -.alert-error { - background-color: #f2dede; - border-color: #eed3d7; - color: #b94a48; -} -.alert-danger h4, -.alert-error h4 { - color: #b94a48; -} -.alert-info { - background-color: #d9edf7; - border-color: #bce8f1; - color: #3a87ad; -} -.alert-info h4 { - color: #3a87ad; -} -.alert-block { - padding-top: 14px; - padding-bottom: 14px; -} -.alert-block > p, -.alert-block > ul { - margin-bottom: 0; -} -.alert-block p + p { - margin-top: 5px; -} -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@-moz-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@-ms-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@-o-keyframes progress-bar-stripes { - from { - background-position: 0 0; - } - to { - background-position: 40px 0; - } -} -@keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -.progress { - overflow: hidden; - height: 20px; - margin-bottom: 20px; - background-color: #f7f7f7; - background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9)); - background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: linear-gradient(to bottom, #f5f5f5, #f9f9f9); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0); - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.progress .bar { - width: 0%; - height: 100%; - color: #ffffff; - float: left; - font-size: 12px; - text-align: center; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #0e90d2; - background-image: -moz-linear-gradient(top, #149bdf, #0480be); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be)); - background-image: -webkit-linear-gradient(top, #149bdf, #0480be); - background-image: -o-linear-gradient(top, #149bdf, #0480be); - background-image: linear-gradient(to bottom, #149bdf, #0480be); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0); - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-transition: width 0.6s ease; - -moz-transition: width 0.6s ease; - -o-transition: width 0.6s ease; - transition: width 0.6s ease; -} -.progress .bar + .bar { - -webkit-box-shadow: inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15); - -moz-box-shadow: inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15); - box-shadow: inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15); -} -.progress-striped .bar { - background-color: #149bdf; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - -webkit-background-size: 40px 40px; - -moz-background-size: 40px 40px; - -o-background-size: 40px 40px; - background-size: 40px 40px; -} -.progress.active .bar { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -moz-animation: progress-bar-stripes 2s linear infinite; - -ms-animation: progress-bar-stripes 2s linear infinite; - -o-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; -} -.progress-danger .bar, -.progress .bar-danger { - background-color: #dd514c; - background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); - background-image: linear-gradient(to bottom, #ee5f5b, #c43c35); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0); -} -.progress-danger.progress-striped .bar, -.progress-striped .bar-danger { - background-color: #ee5f5b; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-success .bar, -.progress .bar-success { - background-color: #5eb95e; - background-image: -moz-linear-gradient(top, #62c462, #57a957); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957)); - background-image: -webkit-linear-gradient(top, #62c462, #57a957); - background-image: -o-linear-gradient(top, #62c462, #57a957); - background-image: linear-gradient(to bottom, #62c462, #57a957); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0); -} -.progress-success.progress-striped .bar, -.progress-striped .bar-success { - background-color: #62c462; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-info .bar, -.progress .bar-info { - background-color: #4bb1cf; - background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9)); - background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); - background-image: -o-linear-gradient(top, #5bc0de, #339bb9); - background-image: linear-gradient(to bottom, #5bc0de, #339bb9); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0); -} -.progress-info.progress-striped .bar, -.progress-striped .bar-info { - background-color: #5bc0de; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-warning .bar, -.progress .bar-warning { - background-color: #faa732; - background-image: -moz-linear-gradient(top, #fbb450, #f89406); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); - background-image: -webkit-linear-gradient(top, #fbb450, #f89406); - background-image: -o-linear-gradient(top, #fbb450, #f89406); - background-image: linear-gradient(to bottom, #fbb450, #f89406); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); -} -.progress-warning.progress-striped .bar, -.progress-striped .bar-warning { - background-color: #fbb450; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.hero-unit { - padding: 60px; - margin-bottom: 30px; - font-size: 18px; - font-weight: 200; - line-height: 30px; - color: inherit; - background-color: #eeeeee; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} -.hero-unit h1 { - margin-bottom: 0; - font-size: 60px; - line-height: 1; - color: inherit; - letter-spacing: -1px; -} -.hero-unit li { - line-height: 30px; -} -.media, -.media-body { - overflow: hidden; - *overflow: visible; - zoom: 1; -} -.media, -.media .media { - margin-top: 15px; -} -.media:first-child { - margin-top: 0; -} -.media-object { - display: block; -} -.media-heading { - margin: 0 0 5px; -} -.media .pull-left { - margin-right: 10px; -} -.media .pull-right { - margin-left: 10px; -} -.media-list { - margin-left: 0; - list-style: none; -} -.tooltip { - position: absolute; - z-index: 1030; - display: block; - visibility: visible; - padding: 5px; - font-size: 11px; - opacity: 0; - filter: alpha(opacity=0); -} -.tooltip.in { - opacity: 0.8; - filter: alpha(opacity=80); -} -.tooltip.top { - margin-top: -3px; -} -.tooltip.right { - margin-left: 3px; -} -.tooltip.bottom { - margin-top: 3px; -} -.tooltip.left { - margin-left: -3px; -} -.tooltip-inner { - max-width: 200px; - padding: 3px 8px; - color: #ffffff; - text-align: center; - text-decoration: none; - background-color: #000000; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.tooltip.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-width: 5px 5px 0; - border-top-color: #000000; -} -.tooltip.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-width: 5px 5px 5px 0; - border-right-color: #000000; -} -.tooltip.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-width: 5px 0 5px 5px; - border-left-color: #000000; -} -.tooltip.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000000; -} -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1010; - display: none; - width: 236px; - padding: 1px; - text-align: left; - background-color: #ffffff; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - white-space: normal; -} -.popover.top { - margin-top: -10px; -} -.popover.right { - margin-left: 10px; -} -.popover.bottom { - margin-top: 10px; -} -.popover.left { - margin-left: -10px; -} -.popover-title { - margin: 0; - padding: 8px 14px; - font-size: 14px; - font-weight: normal; - line-height: 18px; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - -webkit-border-radius: 5px 5px 0 0; - -moz-border-radius: 5px 5px 0 0; - border-radius: 5px 5px 0 0; -} -.popover-content { - padding: 9px 14px; -} -.popover .arrow, -.popover .arrow:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.popover .arrow { - border-width: 11px; -} -.popover .arrow:after { - border-width: 10px; - content: ""; -} -.popover.top .arrow { - left: 50%; - margin-left: -11px; - border-bottom-width: 0; - border-top-color: #999; - border-top-color: rgba(0, 0, 0, 0.25); - bottom: -11px; -} -.popover.top .arrow:after { - bottom: 1px; - margin-left: -10px; - border-bottom-width: 0; - border-top-color: #ffffff; -} -.popover.right .arrow { - top: 50%; - left: -11px; - margin-top: -11px; - border-left-width: 0; - border-right-color: #999; - border-right-color: rgba(0, 0, 0, 0.25); -} -.popover.right .arrow:after { - left: 1px; - bottom: -10px; - border-left-width: 0; - border-right-color: #ffffff; -} -.popover.bottom .arrow { - left: 50%; - margin-left: -11px; - border-top-width: 0; - border-bottom-color: #999; - border-bottom-color: rgba(0, 0, 0, 0.25); - top: -11px; -} -.popover.bottom .arrow:after { - top: 1px; - margin-left: -10px; - border-top-width: 0; - border-bottom-color: #ffffff; -} -.popover.left .arrow { - top: 50%; - right: -11px; - margin-top: -11px; - border-right-width: 0; - border-left-color: #999; - border-left-color: rgba(0, 0, 0, 0.25); -} -.popover.left .arrow:after { - right: 1px; - border-right-width: 0; - border-left-color: #ffffff; - bottom: -10px; -} -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - background-color: #000000; -} -.modal-backdrop.fade { - opacity: 0; -} -.modal-backdrop, -.modal-backdrop.fade.in { - opacity: 0.8; - filter: alpha(opacity=80); -} -.modal { - position: fixed; - top: 10%; - left: 50%; - z-index: 1050; - width: 560px; - margin-left: -280px; - background-color: #ffffff; - border: 1px solid #999; - border: 1px solid rgba(0, 0, 0, 0.3); - *border: 1px solid #999; - /* IE6-7 */ - - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - -webkit-background-clip: padding-box; - -moz-background-clip: padding-box; - background-clip: padding-box; - outline: none; -} -.modal.fade { - -webkit-transition: opacity .3s linear, top .3s ease-out; - -moz-transition: opacity .3s linear, top .3s ease-out; - -o-transition: opacity .3s linear, top .3s ease-out; - transition: opacity .3s linear, top .3s ease-out; - top: -25%; -} -.modal.fade.in { - top: 10%; -} -.modal-header { - padding: 9px 15px; - border-bottom: 1px solid #eee; -} -.modal-header .close { - margin-top: 2px; -} -.modal-header h3 { - margin: 0; - line-height: 30px; -} -.modal-body { - position: relative; - overflow-y: auto; - max-height: 400px; - padding: 15px; -} -.modal-form { - margin-bottom: 0; -} -.modal-footer { - padding: 14px 15px 15px; - margin-bottom: 0; - text-align: right; - background-color: #f5f5f5; - border-top: 1px solid #ddd; - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; - -webkit-box-shadow: inset 0 1px 0 #ffffff; - -moz-box-shadow: inset 0 1px 0 #ffffff; - box-shadow: inset 0 1px 0 #ffffff; - *zoom: 1; -} -.modal-footer:before, -.modal-footer:after { - display: table; - content: ""; - line-height: 0; -} -.modal-footer:after { - clear: both; -} -.modal-footer .btn + .btn { - margin-left: 5px; - margin-bottom: 0; -} -.modal-footer .btn-group .btn + .btn { - margin-left: -1px; -} -.modal-footer .btn-block + .btn-block { - margin-left: 0; -} -.dropup, -.dropdown { - position: relative; -} -.dropdown-toggle { - *margin-bottom: -3px; -} -.dropdown-toggle:active, -.open .dropdown-toggle { - outline: 0; -} -.caret { - display: inline-block; - width: 0; - height: 0; - vertical-align: top; - border-top: 4px solid #000000; - border-right: 4px solid transparent; - border-left: 4px solid transparent; - content: ""; -} -.dropdown .caret { - margin-top: 8px; - margin-left: 2px; -} -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; - list-style: none; - background-color: #ffffff; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - *border-right-width: 2px; - *border-bottom-width: 2px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.dropdown-menu.pull-right { - right: 0; - left: auto; -} -.dropdown-menu .divider { - *width: 100%; - height: 1px; - margin: 9px 1px; - *margin: -5px 0 5px; - overflow: hidden; - background-color: #e5e5e5; - border-bottom: 1px solid #ffffff; -} -.dropdown-menu li > a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: 20px; - color: #333333; - white-space: nowrap; -} -.dropdown-menu li > a:hover, -.dropdown-menu li > a:focus, -.dropdown-submenu:hover > a { - text-decoration: none; - color: #ffffff; - background-color: #0081c2; - background-image: -moz-linear-gradient(top, #0088cc, #0077b3); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); - background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); - background-image: -o-linear-gradient(top, #0088cc, #0077b3); - background-image: linear-gradient(to bottom, #0088cc, #0077b3); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); -} -.dropdown-menu .active > a, -.dropdown-menu .active > a:hover { - color: #ffffff; - text-decoration: none; - outline: 0; - background-color: #0081c2; - background-image: -moz-linear-gradient(top, #0088cc, #0077b3); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); - background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); - background-image: -o-linear-gradient(top, #0088cc, #0077b3); - background-image: linear-gradient(to bottom, #0088cc, #0077b3); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); -} -.dropdown-menu .disabled > a, -.dropdown-menu .disabled > a:hover { - color: #999999; -} -.dropdown-menu .disabled > a:hover { - text-decoration: none; - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - cursor: default; -} -.open { - *z-index: 1000; -} -.open > .dropdown-menu { - display: block; -} -.pull-right > .dropdown-menu { - right: 0; - left: auto; -} -.dropup .caret, -.navbar-fixed-bottom .dropdown .caret { - border-top: 0; - border-bottom: 4px solid #000000; - content: ""; -} -.dropup .dropdown-menu, -.navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 1px; -} -.dropdown-submenu { - position: relative; -} -.dropdown-submenu > .dropdown-menu { - top: 0; - left: 100%; - margin-top: -6px; - margin-left: -1px; - -webkit-border-radius: 0 6px 6px 6px; - -moz-border-radius: 0 6px 6px 6px; - border-radius: 0 6px 6px 6px; -} -.dropdown-submenu:hover > .dropdown-menu { - display: block; -} -.dropup .dropdown-submenu > .dropdown-menu { - top: auto; - bottom: 0; - margin-top: 0; - margin-bottom: -2px; - -webkit-border-radius: 5px 5px 5px 0; - -moz-border-radius: 5px 5px 5px 0; - border-radius: 5px 5px 5px 0; -} -.dropdown-submenu > a:after { - display: block; - content: " "; - float: right; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; - border-width: 5px 0 5px 5px; - border-left-color: #cccccc; - margin-top: 5px; - margin-right: -10px; -} -.dropdown-submenu:hover > a:after { - border-left-color: #ffffff; -} -.dropdown-submenu.pull-left { - float: none; -} -.dropdown-submenu.pull-left > .dropdown-menu { - left: -100%; - margin-left: 10px; - -webkit-border-radius: 6px 0 6px 6px; - -moz-border-radius: 6px 0 6px 6px; - border-radius: 6px 0 6px 6px; -} -.dropdown .dropdown-menu .nav-header { - padding-left: 20px; - padding-right: 20px; -} -.typeahead { - z-index: 1051; - margin-top: 2px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.accordion { - margin-bottom: 20px; -} -.accordion-group { - margin-bottom: 2px; - border: 1px solid #e5e5e5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.accordion-heading { - border-bottom: 0; -} -.accordion-heading .accordion-toggle { - display: block; - padding: 8px 15px; -} -.accordion-toggle { - cursor: pointer; -} -.accordion-inner { - padding: 9px 15px; - border-top: 1px solid #e5e5e5; -} -.carousel { - position: relative; - margin-bottom: 20px; - line-height: 1; -} -.carousel-inner { - overflow: hidden; - width: 100%; - position: relative; -} -.carousel-inner > .item { - display: none; - position: relative; - -webkit-transition: 0.6s ease-in-out left; - -moz-transition: 0.6s ease-in-out left; - -o-transition: 0.6s ease-in-out left; - transition: 0.6s ease-in-out left; -} -.carousel-inner > .item > img { - display: block; - line-height: 1; -} -.carousel-inner > .active, -.carousel-inner > .next, -.carousel-inner > .prev { - display: block; -} -.carousel-inner > .active { - left: 0; -} -.carousel-inner > .next, -.carousel-inner > .prev { - position: absolute; - top: 0; - width: 100%; -} -.carousel-inner > .next { - left: 100%; -} -.carousel-inner > .prev { - left: -100%; -} -.carousel-inner > .next.left, -.carousel-inner > .prev.right { - left: 0; -} -.carousel-inner > .active.left { - left: -100%; -} -.carousel-inner > .active.right { - left: 100%; -} -.carousel-control { - position: absolute; - top: 40%; - left: 15px; - width: 40px; - height: 40px; - margin-top: -20px; - font-size: 60px; - font-weight: 100; - line-height: 30px; - color: #ffffff; - text-align: center; - background: #222222; - border: 3px solid #ffffff; - -webkit-border-radius: 23px; - -moz-border-radius: 23px; - border-radius: 23px; - opacity: 0.5; - filter: alpha(opacity=50); -} -.carousel-control.right { - left: auto; - right: 15px; -} -.carousel-control:hover { - color: #ffffff; - text-decoration: none; - opacity: 0.9; - filter: alpha(opacity=90); -} -.carousel-caption { - position: absolute; - left: 0; - right: 0; - bottom: 0; - padding: 15px; - background: #333333; - background: rgba(0, 0, 0, 0.75); -} -.carousel-caption h4, -.carousel-caption p { - color: #ffffff; - line-height: 20px; -} -.carousel-caption h4 { - margin: 0 0 5px; -} -.carousel-caption p { - margin-bottom: 0; -} -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #e3e3e3; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); -} -.well blockquote { - border-color: #ddd; - border-color: rgba(0, 0, 0, 0.15); -} -.well-large { - padding: 24px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} -.well-small { - padding: 9px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -.close { - float: right; - font-size: 20px; - font-weight: bold; - line-height: 20px; - color: #000000; - text-shadow: 0 1px 0 #ffffff; - opacity: 0.2; - filter: alpha(opacity=20); -} -.close:hover { - color: #000000; - text-decoration: none; - cursor: pointer; - opacity: 0.4; - filter: alpha(opacity=40); -} -button.close { - padding: 0; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; -} -.pull-right { - float: right; -} -.pull-left { - float: left; -} -.hide { - display: none; -} -.show { - display: block; -} -.invisible { - visibility: hidden; -} -.affix { - position: fixed; -} -.fade { - opacity: 0; - -webkit-transition: opacity 0.15s linear; - -moz-transition: opacity 0.15s linear; - -o-transition: opacity 0.15s linear; - transition: opacity 0.15s linear; -} -.fade.in { - opacity: 1; -} -.collapse { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition: height 0.35s ease; - -moz-transition: height 0.35s ease; - -o-transition: height 0.35s ease; - transition: height 0.35s ease; -} -.collapse.in { - height: auto; -} -.hidden { - display: none; - visibility: hidden; -} -.visible-phone { - display: none !important; -} -.visible-tablet { - display: none !important; -} -.hidden-desktop { - display: none !important; -} -.visible-desktop { - display: inherit !important; -} -@media (min-width: 768px) and (max-width: 979px) { - .hidden-desktop { - display: inherit !important; - } - .visible-desktop { - display: none !important ; - } - .visible-tablet { - display: inherit !important; - } - .hidden-tablet { - display: none !important; - } -} -@media (max-width: 767px) { - .hidden-desktop { - display: inherit !important; - } - .visible-desktop { - display: none !important; - } - .visible-phone { - display: inherit !important; - } - .hidden-phone { - display: none !important; - } -} -@media (max-width: 767px) { - body { - padding-left: 20px; - padding-right: 20px; - } - .navbar-fixed-top, - .navbar-fixed-bottom, - .navbar-static-top { - margin-left: -20px; - margin-right: -20px; - } - .container-fluid { - padding: 0; - } - .dl-horizontal dt { - float: none; - clear: none; - width: auto; - text-align: left; - } - .dl-horizontal dd { - margin-left: 0; - } - .container { - width: auto; - } - .row-fluid { - width: 100%; - } - .row, - .thumbnails { - margin-left: 0; - } - .thumbnails > li { - float: none; - margin-left: 0; - } - [class*="span"], - .uneditable-input[class*="span"], - .row-fluid [class*="span"] { - float: none; - display: block; - width: 100%; - margin-left: 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - .span12, - .row-fluid .span12 { - width: 100%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - .row-fluid [class*="offset"]:first-child { - margin-left: 0; - } - .input-large, - .input-xlarge, - .input-xxlarge, - input[class*="span"], - select[class*="span"], - textarea[class*="span"], - .uneditable-input { - display: block; - width: 100%; - min-height: 30px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - .input-prepend input, - .input-append input, - .input-prepend input[class*="span"], - .input-append input[class*="span"] { - display: inline-block; - width: auto; - } - .controls-row [class*="span"] + [class*="span"] { - margin-left: 0; - } - .modal { - position: fixed; - top: 20px; - left: 20px; - right: 20px; - width: auto; - margin: 0; - } - .modal.fade { - top: -100px; - } - .modal.fade.in { - top: 20px; - } -} -@media (max-width: 480px) { - .nav-collapse { - -webkit-transform: translate3d(0, 0, 0); - } - .page-header h1 small { - display: block; - line-height: 20px; - } - input[type="checkbox"], - input[type="radio"] { - border: 1px solid #ccc; - } - .form-horizontal .control-label { - float: none; - width: auto; - padding-top: 0; - text-align: left; - } - .form-horizontal .controls { - margin-left: 0; - } - .form-horizontal .control-list { - padding-top: 0; - } - .form-horizontal .form-actions { - padding-left: 10px; - padding-right: 10px; - } - .media .pull-left, - .media .pull-right { - float: none; - display: block; - margin-bottom: 10px; - } - .media-object { - margin-right: 0; - margin-left: 0; - } - .modal { - top: 10px; - left: 10px; - right: 10px; - } - .modal-header .close { - padding: 10px; - margin: -10px; - } - .carousel-caption { - position: static; - } -} -@media (min-width: 768px) and (max-width: 979px) { - .row { - margin-left: -20px; - *zoom: 1; - } - .row:before, - .row:after { - display: table; - content: ""; - line-height: 0; - } - .row:after { - clear: both; - } - [class*="span"] { - float: left; - min-height: 1px; - margin-left: 20px; - } - .container, - .navbar-static-top .container, - .navbar-fixed-top .container, - .navbar-fixed-bottom .container { - width: 724px; - } - .span12 { - width: 724px; - } - .span11 { - width: 662px; - } - .span10 { - width: 600px; - } - .span9 { - width: 538px; - } - .span8 { - width: 476px; - } - .span7 { - width: 414px; - } - .span6 { - width: 352px; - } - .span5 { - width: 290px; - } - .span4 { - width: 228px; - } - .span3 { - width: 166px; - } - .span2 { - width: 104px; - } - .span1 { - width: 42px; - } - .offset12 { - margin-left: 764px; - } - .offset11 { - margin-left: 702px; - } - .offset10 { - margin-left: 640px; - } - .offset9 { - margin-left: 578px; - } - .offset8 { - margin-left: 516px; - } - .offset7 { - margin-left: 454px; - } - .offset6 { - margin-left: 392px; - } - .offset5 { - margin-left: 330px; - } - .offset4 { - margin-left: 268px; - } - .offset3 { - margin-left: 206px; - } - .offset2 { - margin-left: 144px; - } - .offset1 { - margin-left: 82px; - } - .row-fluid { - width: 100%; - *zoom: 1; - } - .row-fluid:before, - .row-fluid:after { - display: table; - content: ""; - line-height: 0; - } - .row-fluid:after { - clear: both; - } - .row-fluid [class*="span"] { - display: block; - width: 100%; - min-height: 30px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - float: left; - margin-left: 2.7624309392265194%; - *margin-left: 2.709239449864817%; - } - .row-fluid [class*="span"]:first-child { - margin-left: 0; - } - .row-fluid .controls-row [class*="span"] + [class*="span"] { - margin-left: 2.7624309392265194%; - } - .row-fluid .span12 { - width: 100%; - *width: 99.94680851063829%; - } - .row-fluid .span11 { - width: 91.43646408839778%; - *width: 91.38327259903608%; - } - .row-fluid .span10 { - width: 82.87292817679558%; - *width: 82.81973668743387%; - } - .row-fluid .span9 { - width: 74.30939226519337%; - *width: 74.25620077583166%; - } - .row-fluid .span8 { - width: 65.74585635359117%; - *width: 65.69266486422946%; - } - .row-fluid .span7 { - width: 57.18232044198895%; - *width: 57.12912895262725%; - } - .row-fluid .span6 { - width: 48.61878453038674%; - *width: 48.56559304102504%; - } - .row-fluid .span5 { - width: 40.05524861878453%; - *width: 40.00205712942283%; - } - .row-fluid .span4 { - width: 31.491712707182323%; - *width: 31.43852121782062%; - } - .row-fluid .span3 { - width: 22.92817679558011%; - *width: 22.87498530621841%; - } - .row-fluid .span2 { - width: 14.3646408839779%; - *width: 14.311449394616199%; - } - .row-fluid .span1 { - width: 5.801104972375691%; - *width: 5.747913483013988%; - } - .row-fluid .offset12 { - margin-left: 105.52486187845304%; - *margin-left: 105.41847889972962%; - } - .row-fluid .offset12:first-child { - margin-left: 102.76243093922652%; - *margin-left: 102.6560479605031%; - } - .row-fluid .offset11 { - margin-left: 96.96132596685082%; - *margin-left: 96.8549429881274%; - } - .row-fluid .offset11:first-child { - margin-left: 94.1988950276243%; - *margin-left: 94.09251204890089%; - } - .row-fluid .offset10 { - margin-left: 88.39779005524862%; - *margin-left: 88.2914070765252%; - } - .row-fluid .offset10:first-child { - margin-left: 85.6353591160221%; - *margin-left: 85.52897613729868%; - } - .row-fluid .offset9 { - margin-left: 79.8342541436464%; - *margin-left: 79.72787116492299%; - } - .row-fluid .offset9:first-child { - margin-left: 77.07182320441989%; - *margin-left: 76.96544022569647%; - } - .row-fluid .offset8 { - margin-left: 71.2707182320442%; - *margin-left: 71.16433525332079%; - } - .row-fluid .offset8:first-child { - margin-left: 68.50828729281768%; - *margin-left: 68.40190431409427%; - } - .row-fluid .offset7 { - margin-left: 62.70718232044199%; - *margin-left: 62.600799341718584%; - } - .row-fluid .offset7:first-child { - margin-left: 59.94475138121547%; - *margin-left: 59.838368402492065%; - } - .row-fluid .offset6 { - margin-left: 54.14364640883978%; - *margin-left: 54.037263430116376%; - } - .row-fluid .offset6:first-child { - margin-left: 51.38121546961326%; - *margin-left: 51.27483249088986%; - } - .row-fluid .offset5 { - margin-left: 45.58011049723757%; - *margin-left: 45.47372751851417%; - } - .row-fluid .offset5:first-child { - margin-left: 42.81767955801105%; - *margin-left: 42.71129657928765%; - } - .row-fluid .offset4 { - margin-left: 37.01657458563536%; - *margin-left: 36.91019160691196%; - } - .row-fluid .offset4:first-child { - margin-left: 34.25414364640884%; - *margin-left: 34.14776066768544%; - } - .row-fluid .offset3 { - margin-left: 28.45303867403315%; - *margin-left: 28.346655695309746%; - } - .row-fluid .offset3:first-child { - margin-left: 25.69060773480663%; - *margin-left: 25.584224756083227%; - } - .row-fluid .offset2 { - margin-left: 19.88950276243094%; - *margin-left: 19.783119783707537%; - } - .row-fluid .offset2:first-child { - margin-left: 17.12707182320442%; - *margin-left: 17.02068884448102%; - } - .row-fluid .offset1 { - margin-left: 11.32596685082873%; - *margin-left: 11.219583872105325%; - } - .row-fluid .offset1:first-child { - margin-left: 8.56353591160221%; - *margin-left: 8.457152932878806%; - } - input, - textarea, - .uneditable-input { - margin-left: 0; - } - .controls-row [class*="span"] + [class*="span"] { - margin-left: 20px; - } - input.span12, textarea.span12, .uneditable-input.span12 { - width: 710px; - } - input.span11, textarea.span11, .uneditable-input.span11 { - width: 648px; - } - input.span10, textarea.span10, .uneditable-input.span10 { - width: 586px; - } - input.span9, textarea.span9, .uneditable-input.span9 { - width: 524px; - } - input.span8, textarea.span8, .uneditable-input.span8 { - width: 462px; - } - input.span7, textarea.span7, .uneditable-input.span7 { - width: 400px; - } - input.span6, textarea.span6, .uneditable-input.span6 { - width: 338px; - } - input.span5, textarea.span5, .uneditable-input.span5 { - width: 276px; - } - input.span4, textarea.span4, .uneditable-input.span4 { - width: 214px; - } - input.span3, textarea.span3, .uneditable-input.span3 { - width: 152px; - } - input.span2, textarea.span2, .uneditable-input.span2 { - width: 90px; - } - input.span1, textarea.span1, .uneditable-input.span1 { - width: 28px; - } -} -@media (min-width: 1200px) { - .row { - margin-left: -30px; - *zoom: 1; - } - .row:before, - .row:after { - display: table; - content: ""; - line-height: 0; - } - .row:after { - clear: both; - } - [class*="span"] { - float: left; - min-height: 1px; - margin-left: 30px; - } - .container, - .navbar-static-top .container, - .navbar-fixed-top .container, - .navbar-fixed-bottom .container { - width: 1170px; - } - .span12 { - width: 1170px; - } - .span11 { - width: 1070px; - } - .span10 { - width: 970px; - } - .span9 { - width: 870px; - } - .span8 { - width: 770px; - } - .span7 { - width: 670px; - } - .span6 { - width: 570px; - } - .span5 { - width: 470px; - } - .span4 { - width: 370px; - } - .span3 { - width: 270px; - } - .span2 { - width: 170px; - } - .span1 { - width: 70px; - } - .offset12 { - margin-left: 1230px; - } - .offset11 { - margin-left: 1130px; - } - .offset10 { - margin-left: 1030px; - } - .offset9 { - margin-left: 930px; - } - .offset8 { - margin-left: 830px; - } - .offset7 { - margin-left: 730px; - } - .offset6 { - margin-left: 630px; - } - .offset5 { - margin-left: 530px; - } - .offset4 { - margin-left: 430px; - } - .offset3 { - margin-left: 330px; - } - .offset2 { - margin-left: 230px; - } - .offset1 { - margin-left: 130px; - } - .row-fluid { - width: 100%; - *zoom: 1; - } - .row-fluid:before, - .row-fluid:after { - display: table; - content: ""; - line-height: 0; - } - .row-fluid:after { - clear: both; - } - .row-fluid [class*="span"] { - display: block; - width: 100%; - min-height: 30px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - float: left; - margin-left: 2.564102564102564%; - *margin-left: 2.5109110747408616%; - } - .row-fluid [class*="span"]:first-child { - margin-left: 0; - } - .row-fluid .controls-row [class*="span"] + [class*="span"] { - margin-left: 2.564102564102564%; - } - .row-fluid .span12 { - width: 100%; - *width: 99.94680851063829%; - } - .row-fluid .span11 { - width: 91.45299145299145%; - *width: 91.39979996362975%; - } - .row-fluid .span10 { - width: 82.90598290598291%; - *width: 82.8527914166212%; - } - .row-fluid .span9 { - width: 74.35897435897436%; - *width: 74.30578286961266%; - } - .row-fluid .span8 { - width: 65.81196581196582%; - *width: 65.75877432260411%; - } - .row-fluid .span7 { - width: 57.26495726495726%; - *width: 57.21176577559556%; - } - .row-fluid .span6 { - width: 48.717948717948715%; - *width: 48.664757228587014%; - } - .row-fluid .span5 { - width: 40.17094017094017%; - *width: 40.11774868157847%; - } - .row-fluid .span4 { - width: 31.623931623931625%; - *width: 31.570740134569924%; - } - .row-fluid .span3 { - width: 23.076923076923077%; - *width: 23.023731587561375%; - } - .row-fluid .span2 { - width: 14.52991452991453%; - *width: 14.476723040552828%; - } - .row-fluid .span1 { - width: 5.982905982905983%; - *width: 5.929714493544281%; - } - .row-fluid .offset12 { - margin-left: 105.12820512820512%; - *margin-left: 105.02182214948171%; - } - .row-fluid .offset12:first-child { - margin-left: 102.56410256410257%; - *margin-left: 102.45771958537915%; - } - .row-fluid .offset11 { - margin-left: 96.58119658119658%; - *margin-left: 96.47481360247316%; - } - .row-fluid .offset11:first-child { - margin-left: 94.01709401709402%; - *margin-left: 93.91071103837061%; - } - .row-fluid .offset10 { - margin-left: 88.03418803418803%; - *margin-left: 87.92780505546462%; - } - .row-fluid .offset10:first-child { - margin-left: 85.47008547008548%; - *margin-left: 85.36370249136206%; - } - .row-fluid .offset9 { - margin-left: 79.48717948717949%; - *margin-left: 79.38079650845607%; - } - .row-fluid .offset9:first-child { - margin-left: 76.92307692307693%; - *margin-left: 76.81669394435352%; - } - .row-fluid .offset8 { - margin-left: 70.94017094017094%; - *margin-left: 70.83378796144753%; - } - .row-fluid .offset8:first-child { - margin-left: 68.37606837606839%; - *margin-left: 68.26968539734497%; - } - .row-fluid .offset7 { - margin-left: 62.393162393162385%; - *margin-left: 62.28677941443899%; - } - .row-fluid .offset7:first-child { - margin-left: 59.82905982905982%; - *margin-left: 59.72267685033642%; - } - .row-fluid .offset6 { - margin-left: 53.84615384615384%; - *margin-left: 53.739770867430444%; - } - .row-fluid .offset6:first-child { - margin-left: 51.28205128205128%; - *margin-left: 51.175668303327875%; - } - .row-fluid .offset5 { - margin-left: 45.299145299145295%; - *margin-left: 45.1927623204219%; - } - .row-fluid .offset5:first-child { - margin-left: 42.73504273504273%; - *margin-left: 42.62865975631933%; - } - .row-fluid .offset4 { - margin-left: 36.75213675213675%; - *margin-left: 36.645753773413354%; - } - .row-fluid .offset4:first-child { - margin-left: 34.18803418803419%; - *margin-left: 34.081651209310785%; - } - .row-fluid .offset3 { - margin-left: 28.205128205128204%; - *margin-left: 28.0987452264048%; - } - .row-fluid .offset3:first-child { - margin-left: 25.641025641025642%; - *margin-left: 25.53464266230224%; - } - .row-fluid .offset2 { - margin-left: 19.65811965811966%; - *margin-left: 19.551736679396257%; - } - .row-fluid .offset2:first-child { - margin-left: 17.094017094017094%; - *margin-left: 16.98763411529369%; - } - .row-fluid .offset1 { - margin-left: 11.11111111111111%; - *margin-left: 11.004728132387708%; - } - .row-fluid .offset1:first-child { - margin-left: 8.547008547008547%; - *margin-left: 8.440625568285142%; - } - input, - textarea, - .uneditable-input { - margin-left: 0; - } - .controls-row [class*="span"] + [class*="span"] { - margin-left: 30px; - } - input.span12, textarea.span12, .uneditable-input.span12 { - width: 1156px; - } - input.span11, textarea.span11, .uneditable-input.span11 { - width: 1056px; - } - input.span10, textarea.span10, .uneditable-input.span10 { - width: 956px; - } - input.span9, textarea.span9, .uneditable-input.span9 { - width: 856px; - } - input.span8, textarea.span8, .uneditable-input.span8 { - width: 756px; - } - input.span7, textarea.span7, .uneditable-input.span7 { - width: 656px; - } - input.span6, textarea.span6, .uneditable-input.span6 { - width: 556px; - } - input.span5, textarea.span5, .uneditable-input.span5 { - width: 456px; - } - input.span4, textarea.span4, .uneditable-input.span4 { - width: 356px; - } - input.span3, textarea.span3, .uneditable-input.span3 { - width: 256px; - } - input.span2, textarea.span2, .uneditable-input.span2 { - width: 156px; - } - input.span1, textarea.span1, .uneditable-input.span1 { - width: 56px; - } - .thumbnails { - margin-left: -30px; - } - .thumbnails > li { - margin-left: 30px; - } - .row-fluid .thumbnails { - margin-left: 0; - } -} -@media (max-width: 979px) { - body { - padding-top: 0; - } - .navbar-fixed-top, - .navbar-fixed-bottom { - position: static; - } - .navbar-fixed-top { - margin-bottom: 20px; - } - .navbar-fixed-bottom { - margin-top: 20px; - } - .navbar-fixed-top .navbar-inner, - .navbar-fixed-bottom .navbar-inner { - padding: 5px; - } - .navbar .container { - width: auto; - padding: 0; - } - .navbar .brand { - padding-left: 10px; - padding-right: 10px; - margin: 0 0 0 -5px; - } - .nav-collapse { - clear: both; - } - .nav-collapse .nav { - float: none; - margin: 0 0 10px; - } - .nav-collapse .nav > li { - float: none; - } - .nav-collapse .nav > li > a { - margin-bottom: 2px; - } - .nav-collapse .nav > .divider-vertical { - display: none; - } - .nav-collapse .nav .nav-header { - color: #777777; - text-shadow: none; - } - .nav-collapse .nav > li > a, - .nav-collapse .dropdown-menu a { - padding: 9px 15px; - font-weight: bold; - color: #777777; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - } - .nav-collapse .btn { - padding: 4px 10px 4px; - font-weight: normal; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - } - .nav-collapse .dropdown-menu li + li a { - margin-bottom: 2px; - } - .nav-collapse .nav > li > a:hover, - .nav-collapse .dropdown-menu a:hover { - background-color: #f2f2f2; - } - .navbar-inverse .nav-collapse .nav > li > a, - .navbar-inverse .nav-collapse .dropdown-menu a { - color: #999999; - } - .navbar-inverse .nav-collapse .nav > li > a:hover, - .navbar-inverse .nav-collapse .dropdown-menu a:hover { - background-color: #111111; - } - .nav-collapse.in .btn-group { - margin-top: 5px; - padding: 0; - } - .nav-collapse .dropdown-menu { - position: static; - top: auto; - left: auto; - float: none; - display: none; - max-width: none; - margin: 0 15px; - padding: 0; - background-color: transparent; - border: none; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; - } - .nav-collapse .open > .dropdown-menu { - display: block; - } - .nav-collapse .dropdown-menu:before, - .nav-collapse .dropdown-menu:after { - display: none; - } - .nav-collapse .dropdown-menu .divider { - display: none; - } - .nav-collapse .nav > li > .dropdown-menu:before, - .nav-collapse .nav > li > .dropdown-menu:after { - display: none; - } - .nav-collapse .navbar-form, - .nav-collapse .navbar-search { - float: none; - padding: 10px 15px; - margin: 10px 0; - border-top: 1px solid #f2f2f2; - border-bottom: 1px solid #f2f2f2; - -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1); - -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1); - box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1); - } - .navbar-inverse .nav-collapse .navbar-form, - .navbar-inverse .nav-collapse .navbar-search { - border-top-color: #111111; - border-bottom-color: #111111; - } - .navbar .nav-collapse .nav.pull-right { - float: none; - margin-left: 0; - } - .nav-collapse, - .nav-collapse.collapse { - overflow: hidden; - height: 0; - } - .navbar .btn-navbar { - display: block; - } - .navbar-static .navbar-inner { - padding-left: 10px; - padding-right: 10px; - } -} -@media (min-width: 980px) { - .nav-collapse.collapse { - height: auto !important; - overflow: visible !important; - } -} diff --git a/media/css/vendor/highlight.css b/media/css/vendor/highlight.css deleted file mode 100644 index 847efe19d..000000000 --- a/media/css/vendor/highlight.css +++ /dev/null @@ -1,136 +0,0 @@ -/* -Docco style used in http://jashkenas.github.com/docco/ converted by Simon Madine (@thingsinjars) -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - color: #000; - background: #F4F6F2; - -webkit-text-size-adjust: none; -} - -.hljs-comment, -.hljs-template_comment, -.diff .hljs-header, -.hljs-javadoc { - color: #408080; - font-style: italic; -} - -.hljs-keyword, -.assignment, -.hljs-literal, -.css .rule .hljs-keyword, -.hljs-winutils, -.javascript .hljs-title, -.lisp .hljs-title, -.hljs-subst { - color: #954121; -} - -.hljs-number, -.hljs-hexcolor { - color: #40a070; -} - -.hljs-string, -.hljs-tag .hljs-value, -.hljs-phpdoc, -.hljs-dartdoc, -.tex .hljs-formula { - color: #219161; -} - -.hljs-title, -.hljs-id { - color: #19469d; -} -.hljs-params { - color: #00f; -} - -.javascript .hljs-title, -.lisp .hljs-title, -.hljs-subst { - font-weight: normal; -} - -.hljs-class .hljs-title, -.haskell .hljs-label, -.tex .hljs-command { - color: #458; - font-weight: bold; -} - -.hljs-tag, -.hljs-tag .hljs-title, -.hljs-rules .hljs-property, -.django .hljs-tag .hljs-keyword { - color: #000080; - font-weight: normal; -} - -.hljs-attribute, -.hljs-variable, -.instancevar, -.lisp .hljs-body { - color: #008080; -} - -.hljs-regexp { - color: #b68; -} - -.hljs-class { - color: #458; - font-weight: bold; -} - -.hljs-symbol, -.ruby .hljs-symbol .hljs-string, -.ruby .hljs-symbol .hljs-keyword, -.ruby .hljs-symbol .keymethods, -.lisp .hljs-keyword, -.tex .hljs-special, -.input_number { - color: #990073; -} - -.builtin, -.constructor, -.hljs-built_in, -.lisp .hljs-title { - color: #0086b3; -} - -.hljs-preprocessor, -.hljs-pragma, -.hljs-pi, -.hljs-doctype, -.hljs-shebang, -.hljs-cdata { - color: #999; - font-weight: bold; -} - -.hljs-deletion { - background: #fdd; -} - -.hljs-addition { - background: #dfd; -} - -.diff .hljs-change { - background: #0086b3; -} - -.hljs-chunk { - color: #aaa; -} - -.tex .hljs-formula { - opacity: 0.5; -} diff --git a/media/extensions/edge/manifest.json b/media/extensions/edge/manifest.json new file mode 100644 index 000000000..b02440b00 --- /dev/null +++ b/media/extensions/edge/manifest.json @@ -0,0 +1,24 @@ +{ + "name": "NewsBlur", + "short_name": "NewsBlur", + "description": "A personalized RSS news reader.", + "display": "standalone", + "id": ".", + "start_url": ".", + "scope": "/", + "background_color": "#F6F8F0", + "theme_color": "#F6F8F0", + "icons": [ + { + "src": "https://www.newsblur.com/media/img/logo_512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "https://www.newsblur.com/media/img/logo_black_512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/media/img/logo_black_512.png b/media/img/logo_black_512.png new file mode 100644 index 0000000000000000000000000000000000000000..1fa478ca8c6f2e0f671e9eef7cc1ffcca15470e3 GIT binary patch literal 34035 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 last_timestamp) { - console.log(['New story older than last/newest dashboard story', timestamp, '<', last_timestamp]); + // console.log(['New story older than last/newest dashboard story', timestamp, '<', last_timestamp]); return; } } diff --git a/media/js/newsblur/views/story_list_view.js b/media/js/newsblur/views/story_list_view.js index 570eb5294..e21e9b7bb 100644 --- a/media/js/newsblur/views/story_list_view.js +++ b/media/js/newsblur/views/story_list_view.js @@ -329,7 +329,7 @@ NEWSBLUR.Views.StoryListView = Backbone.View.extend({ var $feed_scroll = NEWSBLUR.reader.$s.$feed_scroll; this.$('.NB-end-line').remove(); - var $endline = $.make('div', { className: "NB-end-line NB-short" }); + var $endline = $.make('div', { className: "NB-end-line NB-load-line NB-short" }); $endline.css({'background': '#FFF'}); $feed_scroll.append($endline); }, diff --git a/media/js/newsblur/views/story_tab_view.js b/media/js/newsblur/views/story_tab_view.js index 59fa7b497..ec7c45be9 100644 --- a/media/js/newsblur/views/story_tab_view.js +++ b/media/js/newsblur/views/story_tab_view.js @@ -107,8 +107,8 @@ NEWSBLUR.Views.StoryTabView = Backbone.View.extend({ // proxied_https: true // }, "Imperfect proxy due
to http over https"); } else if (!correct && this.flags.proxied_https) { - NEWSBLUR.reader.switch_taskbar_view('text', {skip_save_type: 'story'}); - NEWSBLUR.app.taskbar_info.show_stories_error({}, "Sorry, the original story
could not be proxied."); + // NEWSBLUR.reader.switch_taskbar_view('text', {skip_save_type: 'story'}); + // NEWSBLUR.app.taskbar_info.show_stories_error({}, "Sorry, the original story
could not be proxied."); } }, diff --git a/media/js/newsblur/views/story_titles_view.js b/media/js/newsblur/views/story_titles_view.js index 528a41d3b..2d92cd50e 100644 --- a/media/js/newsblur/views/story_titles_view.js +++ b/media/js/newsblur/views/story_titles_view.js @@ -198,7 +198,7 @@ NEWSBLUR.Views.StoryTitlesView = Backbone.View.extend({ var $story_titles = this.$story_titles; this.$('.NB-end-line').remove(); - var $endline = $.make('div', { className: "NB-end-line NB-short" }); + var $endline = $.make('div', { className: "NB-end-line NB-load-line NB-short" }); $endline.css({'background': '#FFF'}); this.$el.append($endline); @@ -266,9 +266,9 @@ NEWSBLUR.Views.StoryTitlesView = Backbone.View.extend({ var empty_space = pane_height - last_story_height - endbar_height; if (empty_space > 0) endbar_height += empty_space + 1; - endbar_height /= 2; // Splitting padding between top and bottom + // endbar_height /= 2; // Splitting padding between top and bottom $end_stories_line.css('paddingBottom', endbar_height); - $end_stories_line.css('paddingTop', endbar_height); + // $end_stories_line.css('paddingTop', endbar_height); // console.log(["endbar height list", endbar_height, empty_space, pane_height, last_story_height]); } diff --git a/media/js/vendor/audio.js b/media/js/vendor/audio.js index aeeefcdbe..98392f129 100755 --- a/media/js/vendor/audio.js +++ b/media/js/vendor/audio.js @@ -7,20 +7,27 @@ scripts = document.getElementsByTagName('script'); for (var i = 0, ii = scripts.length; i < ii; i++) { var path = scripts[i].getAttribute('src'); - if(re.test(path)) return path.replace(re, ''); + if(re.test(path)) + { + var f = path.split ( '/' ); + f.pop (); + return f.join ( '/' ) + '/'; + } } + // when no script found, an empty string causes the least confusion. + return ''; })(); - + // ##The audiojs interface // This is the global object which provides an interface for creating new `audiojs` instances. // It also stores all of the construction helper methods and variables. container[audiojs] = { instanceCount: 0, instances: {}, - // The markup for the swf. It is injected into the page if there is not support for the `