From e50afe5c6b5150204e1db9b505c669d995f498b6 Mon Sep 17 00:00:00 2001
From: dynastxu <151742029+ETOofficial@users.noreply.github.com>
Date: Fri, 7 Nov 2025 15:09:46 +0800
Subject: [PATCH] =?UTF-8?q?=E7=A7=BB=E9=99=A4=E5=AD=90=E6=A0=91=E4=BB=A5?=
=?UTF-8?q?=E4=BE=BF=E9=87=8D=E6=96=B0=E6=B7=BB=E5=8A=A0=E5=85=B6=E4=BB=96?=
=?UTF-8?q?=E5=88=86=E6=94=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/DjangoBlog/.dockerignore | 12 -
src/DjangoBlog/.gitattributes | 6 -
src/DjangoBlog/.github/ISSUE_TEMPLATE.md | 18 -
.../.github/workflows/codeql-analysis.yml | 49 -
.../.github/workflows/deploy-master.yml | 176 -
src/DjangoBlog/.github/workflows/django.yml | 371 ---
src/DjangoBlog/.github/workflows/docker.yml | 43 -
.../.github/workflows/publish-release.yml | 39 -
src/DjangoBlog/.gitignore | 79 -
src/DjangoBlog/Dockerfile | 15 -
src/DjangoBlog/LICENSE | 20 -
src/DjangoBlog/README.md | 158 -
src/DjangoBlog/accounts/__init__.py | 0
src/DjangoBlog/accounts/admin.py | 60 -
src/DjangoBlog/accounts/apps.py | 5 -
src/DjangoBlog/accounts/forms.py | 117 -
.../accounts/migrations/0001_initial.py | 49 -
...s_remove_bloguser_created_time_and_more.py | 46 -
.../accounts/migrations/__init__.py | 0
src/DjangoBlog/accounts/models.py | 35 -
.../accounts/templatetags/__init__.py | 0
src/DjangoBlog/accounts/tests.py | 207 --
src/DjangoBlog/accounts/urls.py | 28 -
src/DjangoBlog/accounts/user_login_backend.py | 26 -
src/DjangoBlog/accounts/utils.py | 49 -
src/DjangoBlog/accounts/views.py | 204 --
src/DjangoBlog/blog/__init__.py | 0
src/DjangoBlog/blog/admin.py | 114 -
src/DjangoBlog/blog/apps.py | 5 -
src/DjangoBlog/blog/context_processors.py | 43 -
src/DjangoBlog/blog/documents.py | 213 --
src/DjangoBlog/blog/forms.py | 19 -
src/DjangoBlog/blog/management/__init__.py | 0
.../blog/management/commands/__init__.py | 0
.../blog/management/commands/build_index.py | 18 -
.../management/commands/build_search_words.py | 13 -
.../blog/management/commands/clear_cache.py | 11 -
.../management/commands/create_testdata.py | 40 -
.../blog/management/commands/ping_baidu.py | 50 -
.../management/commands/sync_user_avatar.py | 47 -
src/DjangoBlog/blog/middleware.py | 42 -
.../blog/migrations/0001_initial.py | 137 -
...002_blogsettings_global_footer_and_more.py | 23 -
.../0003_blogsettings_comment_need_review.py | 17 -
...de_blogsettings_analytics_code_and_more.py | 27 -
...options_alter_category_options_and_more.py | 300 --
.../0006_alter_blogsettings_options.py | 17 -
src/DjangoBlog/blog/migrations/__init__.py | 0
src/DjangoBlog/blog/models.py | 376 ---
src/DjangoBlog/blog/search_indexes.py | 13 -
.../blog/static/account/css/account.css | 9 -
.../blog/static/account/js/account.js | 47 -
.../blog/static/assets/css/bootstrap.min.css | 6 -
.../blog/static/assets/css/docs.min.css | 11 -
.../css/ie10-viewport-bug-workaround.css | 13 -
.../blog/static/assets/css/signin.css | 58 -
.../static/assets/css/todc-bootstrap.min.css | 6 -
.../blog/static/assets/img/checkmark.png | Bin 221 -> 0 bytes
.../assets/js/ie-emulation-modes-warning.js | 51 -
.../assets/js/ie10-viewport-bug-workaround.js | 23 -
src/DjangoBlog/blog/static/blog/css/ie.css | 273 --
.../blog/static/blog/css/nprogress.css | 74 -
.../blog/static/blog/css/oauth_style.css | 305 --
src/DjangoBlog/blog/static/blog/css/style.css | 2898 -----------------
...MiZpBA-UFUIcVXSCEkx2cmqvXlWqW106F15M.woff2 | Bin 26368 -> 0 bytes
...MiZpBA-UFUIcVXSCEkx2cmqvXlWqWt06F15M.woff2 | Bin 37752 -> 0 bytes
...MiZpBA-UFUIcVXSCEkx2cmqvXlWqWtE6F15M.woff2 | Bin 54944 -> 0 bytes
...MiZpBA-UFUIcVXSCEkx2cmqvXlWqWtU6F15M.woff2 | Bin 4844 -> 0 bytes
...MiZpBA-UFUIcVXSCEkx2cmqvXlWqWtk6F15M.woff2 | Bin 17212 -> 0 bytes
...MiZpBA-UFUIcVXSCEkx2cmqvXlWqWu06F15M.woff2 | Bin 17880 -> 0 bytes
...126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWuU6F.woff2 | Bin 50216 -> 0 bytes
...MiZpBA-UFUIcVXSCEkx2cmqvXlWqWuk6F15M.woff2 | Bin 22920 -> 0 bytes
...MiZpBA-UFUIcVXSCEkx2cmqvXlWqWvU6F15M.woff2 | Bin 32016 -> 0 bytes
...MiZpBA-UFUIcVXSCEkx2cmqvXlWqWxU6F15M.woff2 | Bin 56528 -> 0 bytes
...Gs126MiZpBA-UvWbX2vVnXBbObj2OVTS-muw.woff2 | Bin 48320 -> 0 bytes
...126MiZpBA-UvWbX2vVnXBbObj2OVTS2mu1aB.woff2 | Bin 16920 -> 0 bytes
...126MiZpBA-UvWbX2vVnXBbObj2OVTSCmu1aB.woff2 | Bin 16496 -> 0 bytes
...126MiZpBA-UvWbX2vVnXBbObj2OVTSGmu1aB.woff2 | Bin 35156 -> 0 bytes
...126MiZpBA-UvWbX2vVnXBbObj2OVTSKmu1aB.woff2 | Bin 49268 -> 0 bytes
...126MiZpBA-UvWbX2vVnXBbObj2OVTSOmu1aB.woff2 | Bin 4504 -> 0 bytes
...126MiZpBA-UvWbX2vVnXBbObj2OVTSumu1aB.woff2 | Bin 26588 -> 0 bytes
...126MiZpBA-UvWbX2vVnXBbObj2OVTSymu1aB.woff2 | Bin 21332 -> 0 bytes
...126MiZpBA-UvWbX2vVnXBbObj2OVTUGmu1aB.woff2 | Bin 26596 -> 0 bytes
...126MiZpBA-UvWbX2vVnXBbObj2OVTVOmu1aB.woff2 | Bin 51912 -> 0 bytes
.../blog/static/blog/fonts/open-sans.css | 600 ----
.../blog/static/blog/img/avatar.png | Bin 1493 -> 0 bytes
.../blog/static/blog/img/icon-sn.svg | 1 -
src/DjangoBlog/blog/static/blog/js/blog.js | 91 -
src/DjangoBlog/blog/static/blog/js/html5.js | 8 -
.../blog/static/blog/js/jquery-3.6.0.min.js | 2 -
.../blog/static/blog/js/mathjax-loader.js | 142 -
.../blog/static/blog/js/navigation.js | 55 -
.../blog/static/blog/js/nprogress.js | 480 ---
.../blog/static/pygments/default.css | 293 --
src/DjangoBlog/blog/templatetags/__init__.py | 0
src/DjangoBlog/blog/templatetags/blog_tags.py | 554 ----
src/DjangoBlog/blog/tests.py | 232 --
src/DjangoBlog/blog/urls.py | 62 -
src/DjangoBlog/blog/views.py | 380 ---
src/DjangoBlog/codecov.yml | 87 -
src/DjangoBlog/comments/__init__.py | 0
src/DjangoBlog/comments/admin.py | 49 -
src/DjangoBlog/comments/apps.py | 5 -
src/DjangoBlog/comments/forms.py | 13 -
.../comments/migrations/0001_initial.py | 38 -
.../0002_alter_comment_is_enable.py | 18 -
...ns_remove_comment_created_time_and_more.py | 60 -
.../comments/migrations/__init__.py | 0
src/DjangoBlog/comments/models.py | 39 -
.../comments/templatetags/__init__.py | 0
.../comments/templatetags/comments_tags.py | 30 -
src/DjangoBlog/comments/tests.py | 109 -
src/DjangoBlog/comments/urls.py | 11 -
src/DjangoBlog/comments/utils.py | 38 -
src/DjangoBlog/comments/views.py | 63 -
.../docker-compose/docker-compose.es.yml | 48 -
.../deploy/docker-compose/docker-compose.yml | 60 -
src/DjangoBlog/deploy/entrypoint.sh | 31 -
src/DjangoBlog/deploy/k8s/configmap.yaml | 119 -
src/DjangoBlog/deploy/k8s/deployment.yaml | 274 --
src/DjangoBlog/deploy/k8s/gateway.yaml | 17 -
src/DjangoBlog/deploy/k8s/pv.yaml | 94 -
src/DjangoBlog/deploy/k8s/pvc.yaml | 60 -
src/DjangoBlog/deploy/k8s/service.yaml | 80 -
src/DjangoBlog/deploy/k8s/storageclass.yaml | 10 -
src/DjangoBlog/deploy/nginx.conf | 50 -
src/DjangoBlog/djangoblog/__init__.py | 1 -
src/DjangoBlog/djangoblog/admin_site.py | 64 -
src/DjangoBlog/djangoblog/apps.py | 11 -
src/DjangoBlog/djangoblog/blog_signals.py | 122 -
.../djangoblog/elasticsearch_backend.py | 183 --
src/DjangoBlog/djangoblog/feeds.py | 40 -
src/DjangoBlog/djangoblog/logentryadmin.py | 91 -
.../djangoblog/plugin_manage/base_plugin.py | 194 --
.../plugin_manage/hook_constants.py | 22 -
.../djangoblog/plugin_manage/hooks.py | 44 -
.../djangoblog/plugin_manage/loader.py | 64 -
src/DjangoBlog/djangoblog/settings.py | 404 ---
src/DjangoBlog/djangoblog/sitemap.py | 59 -
src/DjangoBlog/djangoblog/spider_notify.py | 21 -
src/DjangoBlog/djangoblog/tests.py | 32 -
src/DjangoBlog/djangoblog/urls.py | 78 -
src/DjangoBlog/djangoblog/utils.py | 272 --
.../djangoblog/whoosh_cn_backend.py | 1044 ------
src/DjangoBlog/djangoblog/wsgi.py | 16 -
src/DjangoBlog/docs/README-en.md | 158 -
src/DjangoBlog/docs/config-en.md | 64 -
src/DjangoBlog/docs/config.md | 58 -
src/DjangoBlog/docs/docker-en.md | 114 -
src/DjangoBlog/docs/docker.md | 114 -
src/DjangoBlog/docs/es.md | 28 -
src/DjangoBlog/docs/imgs/alipay.jpg | Bin 17961 -> 0 bytes
src/DjangoBlog/docs/imgs/pycharm_logo.png | Bin 132045 -> 0 bytes
src/DjangoBlog/docs/imgs/wechat.jpg | Bin 24722 -> 0 bytes
src/DjangoBlog/docs/k8s-en.md | 141 -
src/DjangoBlog/docs/k8s.md | 141 -
.../locale/en/LC_MESSAGES/django.mo | Bin 11097 -> 0 bytes
.../locale/en/LC_MESSAGES/django.po | 685 ----
.../locale/zh_Hans/LC_MESSAGES/django.mo | Bin 10321 -> 0 bytes
.../locale/zh_Hans/LC_MESSAGES/django.po | 667 ----
.../locale/zh_Hant/LC_MESSAGES/django.mo | Bin 10268 -> 0 bytes
.../locale/zh_Hant/LC_MESSAGES/django.po | 668 ----
src/DjangoBlog/manage.py | 22 -
src/DjangoBlog/oauth/__init__.py | 0
src/DjangoBlog/oauth/admin.py | 54 -
src/DjangoBlog/oauth/apps.py | 5 -
src/DjangoBlog/oauth/forms.py | 12 -
.../oauth/migrations/0001_initial.py | 57 -
...ptions_alter_oauthuser_options_and_more.py | 86 -
.../0003_alter_oauthuser_nickname.py | 18 -
src/DjangoBlog/oauth/migrations/__init__.py | 0
src/DjangoBlog/oauth/models.py | 67 -
src/DjangoBlog/oauth/oauthmanager.py | 504 ---
src/DjangoBlog/oauth/templatetags/__init__.py | 1 -
.../oauth/templatetags/oauth_tags.py | 22 -
src/DjangoBlog/oauth/tests.py | 249 --
src/DjangoBlog/oauth/urls.py | 25 -
src/DjangoBlog/oauth/views.py | 253 --
src/DjangoBlog/owntracks/__init__.py | 0
src/DjangoBlog/owntracks/admin.py | 7 -
src/DjangoBlog/owntracks/apps.py | 5 -
.../owntracks/migrations/0001_initial.py | 31 -
...0002_alter_owntracklog_options_and_more.py | 22 -
.../owntracks/migrations/__init__.py | 0
src/DjangoBlog/owntracks/models.py | 20 -
src/DjangoBlog/owntracks/tests.py | 64 -
src/DjangoBlog/owntracks/urls.py | 12 -
src/DjangoBlog/owntracks/views.py | 127 -
src/DjangoBlog/plugins/__init__.py | 1 -
.../plugins/article_copyright/__init__.py | 1 -
.../plugins/article_copyright/plugin.py | 37 -
.../article_recommendation/__init__.py | 1 -
.../plugins/article_recommendation/plugin.py | 205 --
.../css/recommendation.css | 166 -
.../js/recommendation.js | 93 -
.../plugins/external_links/__init__.py | 1 -
.../plugins/external_links/plugin.py | 48 -
.../plugins/image_lazy_loading/__init__.py | 1 -
.../plugins/image_lazy_loading/plugin.py | 182 --
.../plugins/reading_time/__init__.py | 1 -
src/DjangoBlog/plugins/reading_time/plugin.py | 51 -
.../plugins/seo_optimizer/__init__.py | 1 -
.../plugins/seo_optimizer/plugin.py | 147 -
src/DjangoBlog/plugins/view_count/__init__.py | 1 -
src/DjangoBlog/plugins/view_count/plugin.py | 18 -
src/DjangoBlog/requirements.txt | Bin 1654 -> 0 bytes
.../servermanager/MemcacheStorage.py | 32 -
src/DjangoBlog/servermanager/__init__.py | 0
src/DjangoBlog/servermanager/admin.py | 19 -
src/DjangoBlog/servermanager/api/__init__.py | 1 -
src/DjangoBlog/servermanager/api/blogapi.py | 27 -
src/DjangoBlog/servermanager/api/commonapi.py | 64 -
src/DjangoBlog/servermanager/apps.py | 5 -
.../servermanager/migrations/0001_initial.py | 45 -
...002_alter_emailsendlog_options_and_more.py | 32 -
.../servermanager/migrations/__init__.py | 0
src/DjangoBlog/servermanager/models.py | 33 -
src/DjangoBlog/servermanager/robot.py | 187 --
src/DjangoBlog/servermanager/tests.py | 79 -
src/DjangoBlog/servermanager/urls.py | 10 -
src/DjangoBlog/servermanager/views.py | 1 -
.../templates/account/forget_password.html | 30 -
src/DjangoBlog/templates/account/login.html | 46 -
.../templates/account/registration_form.html | 29 -
src/DjangoBlog/templates/account/result.html | 27 -
.../templates/blog/article_archives.html | 60 -
.../templates/blog/article_detail.html | 52 -
.../templates/blog/article_index.html | 42 -
src/DjangoBlog/templates/blog/error_page.html | 45 -
src/DjangoBlog/templates/blog/links_list.html | 44 -
.../templates/blog/tags/article_info.html | 79 -
.../blog/tags/article_meta_info.html | 57 -
.../blog/tags/article_pagination.html | 17 -
.../templates/blog/tags/article_tag_list.html | 19 -
.../templates/blog/tags/breadcrumb.html | 19 -
.../templates/blog/tags/sidebar.html | 136 -
.../templates/comments/tags/comment_item.html | 37 -
.../comments/tags/comment_item_tree.html | 57 -
.../templates/comments/tags/comment_list.html | 45 -
.../templates/comments/tags/post_comment.html | 33 -
.../templates/oauth/bindsuccess.html | 22 -
.../templates/oauth/oauth_applications.html | 13 -
.../templates/oauth/require_email.html | 46 -
.../templates/owntracks/show_log_dates.html | 17 -
.../templates/owntracks/show_maps.html | 135 -
.../article_recommendation/__init__.py | 1 -
.../article_recommendation/bottom_widget.html | 23 -
.../sidebar_widget.html | 17 -
.../templates/plugins/css_includes.html | 4 -
.../templates/plugins/js_includes.html | 4 -
.../search/indexes/blog/article_text.txt | 3 -
src/DjangoBlog/templates/search/search.html | 66 -
.../templates/share_layout/adsense.html | 6 -
.../templates/share_layout/base.html | 119 -
.../templates/share_layout/base_account.html | 47 -
.../templates/share_layout/footer.html | 56 -
.../templates/share_layout/nav.html | 30 -
.../templates/share_layout/nav_node.html | 19 -
258 files changed, 21669 deletions(-)
delete mode 100644 src/DjangoBlog/.dockerignore
delete mode 100644 src/DjangoBlog/.gitattributes
delete mode 100644 src/DjangoBlog/.github/ISSUE_TEMPLATE.md
delete mode 100644 src/DjangoBlog/.github/workflows/codeql-analysis.yml
delete mode 100644 src/DjangoBlog/.github/workflows/deploy-master.yml
delete mode 100644 src/DjangoBlog/.github/workflows/django.yml
delete mode 100644 src/DjangoBlog/.github/workflows/docker.yml
delete mode 100644 src/DjangoBlog/.github/workflows/publish-release.yml
delete mode 100644 src/DjangoBlog/.gitignore
delete mode 100644 src/DjangoBlog/Dockerfile
delete mode 100644 src/DjangoBlog/LICENSE
delete mode 100644 src/DjangoBlog/README.md
delete mode 100644 src/DjangoBlog/accounts/__init__.py
delete mode 100644 src/DjangoBlog/accounts/admin.py
delete mode 100644 src/DjangoBlog/accounts/apps.py
delete mode 100644 src/DjangoBlog/accounts/forms.py
delete mode 100644 src/DjangoBlog/accounts/migrations/0001_initial.py
delete mode 100644 src/DjangoBlog/accounts/migrations/0002_alter_bloguser_options_remove_bloguser_created_time_and_more.py
delete mode 100644 src/DjangoBlog/accounts/migrations/__init__.py
delete mode 100644 src/DjangoBlog/accounts/models.py
delete mode 100644 src/DjangoBlog/accounts/templatetags/__init__.py
delete mode 100644 src/DjangoBlog/accounts/tests.py
delete mode 100644 src/DjangoBlog/accounts/urls.py
delete mode 100644 src/DjangoBlog/accounts/user_login_backend.py
delete mode 100644 src/DjangoBlog/accounts/utils.py
delete mode 100644 src/DjangoBlog/accounts/views.py
delete mode 100644 src/DjangoBlog/blog/__init__.py
delete mode 100644 src/DjangoBlog/blog/admin.py
delete mode 100644 src/DjangoBlog/blog/apps.py
delete mode 100644 src/DjangoBlog/blog/context_processors.py
delete mode 100644 src/DjangoBlog/blog/documents.py
delete mode 100644 src/DjangoBlog/blog/forms.py
delete mode 100644 src/DjangoBlog/blog/management/__init__.py
delete mode 100644 src/DjangoBlog/blog/management/commands/__init__.py
delete mode 100644 src/DjangoBlog/blog/management/commands/build_index.py
delete mode 100644 src/DjangoBlog/blog/management/commands/build_search_words.py
delete mode 100644 src/DjangoBlog/blog/management/commands/clear_cache.py
delete mode 100644 src/DjangoBlog/blog/management/commands/create_testdata.py
delete mode 100644 src/DjangoBlog/blog/management/commands/ping_baidu.py
delete mode 100644 src/DjangoBlog/blog/management/commands/sync_user_avatar.py
delete mode 100644 src/DjangoBlog/blog/middleware.py
delete mode 100644 src/DjangoBlog/blog/migrations/0001_initial.py
delete mode 100644 src/DjangoBlog/blog/migrations/0002_blogsettings_global_footer_and_more.py
delete mode 100644 src/DjangoBlog/blog/migrations/0003_blogsettings_comment_need_review.py
delete mode 100644 src/DjangoBlog/blog/migrations/0004_rename_analyticscode_blogsettings_analytics_code_and_more.py
delete mode 100644 src/DjangoBlog/blog/migrations/0005_alter_article_options_alter_category_options_and_more.py
delete mode 100644 src/DjangoBlog/blog/migrations/0006_alter_blogsettings_options.py
delete mode 100644 src/DjangoBlog/blog/migrations/__init__.py
delete mode 100644 src/DjangoBlog/blog/models.py
delete mode 100644 src/DjangoBlog/blog/search_indexes.py
delete mode 100644 src/DjangoBlog/blog/static/account/css/account.css
delete mode 100644 src/DjangoBlog/blog/static/account/js/account.js
delete mode 100644 src/DjangoBlog/blog/static/assets/css/bootstrap.min.css
delete mode 100644 src/DjangoBlog/blog/static/assets/css/docs.min.css
delete mode 100644 src/DjangoBlog/blog/static/assets/css/ie10-viewport-bug-workaround.css
delete mode 100644 src/DjangoBlog/blog/static/assets/css/signin.css
delete mode 100644 src/DjangoBlog/blog/static/assets/css/todc-bootstrap.min.css
delete mode 100644 src/DjangoBlog/blog/static/assets/img/checkmark.png
delete mode 100644 src/DjangoBlog/blog/static/assets/js/ie-emulation-modes-warning.js
delete mode 100644 src/DjangoBlog/blog/static/assets/js/ie10-viewport-bug-workaround.js
delete mode 100644 src/DjangoBlog/blog/static/blog/css/ie.css
delete mode 100644 src/DjangoBlog/blog/static/blog/css/nprogress.css
delete mode 100644 src/DjangoBlog/blog/static/blog/css/oauth_style.css
delete mode 100644 src/DjangoBlog/blog/static/blog/css/style.css
delete mode 100644 src/DjangoBlog/blog/static/blog/fonts/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqW106F15M.woff2
delete mode 100644 src/DjangoBlog/blog/static/blog/fonts/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWt06F15M.woff2
delete mode 100644 src/DjangoBlog/blog/static/blog/fonts/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWtE6F15M.woff2
delete mode 100644 src/DjangoBlog/blog/static/blog/fonts/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWtU6F15M.woff2
delete mode 100644 src/DjangoBlog/blog/static/blog/fonts/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWtk6F15M.woff2
delete mode 100644 src/DjangoBlog/blog/static/blog/fonts/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWu06F15M.woff2
delete mode 100644 src/DjangoBlog/blog/static/blog/fonts/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWuU6F.woff2
delete mode 100644 src/DjangoBlog/blog/static/blog/fonts/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWuk6F15M.woff2
delete mode 100644 src/DjangoBlog/blog/static/blog/fonts/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWvU6F15M.woff2
delete mode 100644 src/DjangoBlog/blog/static/blog/fonts/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWxU6F15M.woff2
delete mode 100644 src/DjangoBlog/blog/static/blog/fonts/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS-muw.woff2
delete mode 100644 src/DjangoBlog/blog/static/blog/fonts/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS2mu1aB.woff2
delete mode 100644 src/DjangoBlog/blog/static/blog/fonts/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSCmu1aB.woff2
delete mode 100644 src/DjangoBlog/blog/static/blog/fonts/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSGmu1aB.woff2
delete mode 100644 src/DjangoBlog/blog/static/blog/fonts/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSKmu1aB.woff2
delete mode 100644 src/DjangoBlog/blog/static/blog/fonts/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSOmu1aB.woff2
delete mode 100644 src/DjangoBlog/blog/static/blog/fonts/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSumu1aB.woff2
delete mode 100644 src/DjangoBlog/blog/static/blog/fonts/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSymu1aB.woff2
delete mode 100644 src/DjangoBlog/blog/static/blog/fonts/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTUGmu1aB.woff2
delete mode 100644 src/DjangoBlog/blog/static/blog/fonts/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTVOmu1aB.woff2
delete mode 100644 src/DjangoBlog/blog/static/blog/fonts/open-sans.css
delete mode 100644 src/DjangoBlog/blog/static/blog/img/avatar.png
delete mode 100644 src/DjangoBlog/blog/static/blog/img/icon-sn.svg
delete mode 100644 src/DjangoBlog/blog/static/blog/js/blog.js
delete mode 100644 src/DjangoBlog/blog/static/blog/js/html5.js
delete mode 100644 src/DjangoBlog/blog/static/blog/js/jquery-3.6.0.min.js
delete mode 100644 src/DjangoBlog/blog/static/blog/js/mathjax-loader.js
delete mode 100644 src/DjangoBlog/blog/static/blog/js/navigation.js
delete mode 100644 src/DjangoBlog/blog/static/blog/js/nprogress.js
delete mode 100755 src/DjangoBlog/blog/static/pygments/default.css
delete mode 100644 src/DjangoBlog/blog/templatetags/__init__.py
delete mode 100644 src/DjangoBlog/blog/templatetags/blog_tags.py
delete mode 100644 src/DjangoBlog/blog/tests.py
delete mode 100644 src/DjangoBlog/blog/urls.py
delete mode 100644 src/DjangoBlog/blog/views.py
delete mode 100644 src/DjangoBlog/codecov.yml
delete mode 100644 src/DjangoBlog/comments/__init__.py
delete mode 100644 src/DjangoBlog/comments/admin.py
delete mode 100644 src/DjangoBlog/comments/apps.py
delete mode 100644 src/DjangoBlog/comments/forms.py
delete mode 100644 src/DjangoBlog/comments/migrations/0001_initial.py
delete mode 100644 src/DjangoBlog/comments/migrations/0002_alter_comment_is_enable.py
delete mode 100644 src/DjangoBlog/comments/migrations/0003_alter_comment_options_remove_comment_created_time_and_more.py
delete mode 100644 src/DjangoBlog/comments/migrations/__init__.py
delete mode 100644 src/DjangoBlog/comments/models.py
delete mode 100644 src/DjangoBlog/comments/templatetags/__init__.py
delete mode 100644 src/DjangoBlog/comments/templatetags/comments_tags.py
delete mode 100644 src/DjangoBlog/comments/tests.py
delete mode 100644 src/DjangoBlog/comments/urls.py
delete mode 100644 src/DjangoBlog/comments/utils.py
delete mode 100644 src/DjangoBlog/comments/views.py
delete mode 100644 src/DjangoBlog/deploy/docker-compose/docker-compose.es.yml
delete mode 100644 src/DjangoBlog/deploy/docker-compose/docker-compose.yml
delete mode 100644 src/DjangoBlog/deploy/entrypoint.sh
delete mode 100644 src/DjangoBlog/deploy/k8s/configmap.yaml
delete mode 100644 src/DjangoBlog/deploy/k8s/deployment.yaml
delete mode 100644 src/DjangoBlog/deploy/k8s/gateway.yaml
delete mode 100644 src/DjangoBlog/deploy/k8s/pv.yaml
delete mode 100644 src/DjangoBlog/deploy/k8s/pvc.yaml
delete mode 100644 src/DjangoBlog/deploy/k8s/service.yaml
delete mode 100644 src/DjangoBlog/deploy/k8s/storageclass.yaml
delete mode 100644 src/DjangoBlog/deploy/nginx.conf
delete mode 100644 src/DjangoBlog/djangoblog/__init__.py
delete mode 100644 src/DjangoBlog/djangoblog/admin_site.py
delete mode 100644 src/DjangoBlog/djangoblog/apps.py
delete mode 100644 src/DjangoBlog/djangoblog/blog_signals.py
delete mode 100644 src/DjangoBlog/djangoblog/elasticsearch_backend.py
delete mode 100644 src/DjangoBlog/djangoblog/feeds.py
delete mode 100644 src/DjangoBlog/djangoblog/logentryadmin.py
delete mode 100644 src/DjangoBlog/djangoblog/plugin_manage/base_plugin.py
delete mode 100644 src/DjangoBlog/djangoblog/plugin_manage/hook_constants.py
delete mode 100644 src/DjangoBlog/djangoblog/plugin_manage/hooks.py
delete mode 100644 src/DjangoBlog/djangoblog/plugin_manage/loader.py
delete mode 100644 src/DjangoBlog/djangoblog/settings.py
delete mode 100644 src/DjangoBlog/djangoblog/sitemap.py
delete mode 100644 src/DjangoBlog/djangoblog/spider_notify.py
delete mode 100644 src/DjangoBlog/djangoblog/tests.py
delete mode 100644 src/DjangoBlog/djangoblog/urls.py
delete mode 100644 src/DjangoBlog/djangoblog/utils.py
delete mode 100644 src/DjangoBlog/djangoblog/whoosh_cn_backend.py
delete mode 100644 src/DjangoBlog/djangoblog/wsgi.py
delete mode 100644 src/DjangoBlog/docs/README-en.md
delete mode 100644 src/DjangoBlog/docs/config-en.md
delete mode 100644 src/DjangoBlog/docs/config.md
delete mode 100644 src/DjangoBlog/docs/docker-en.md
delete mode 100644 src/DjangoBlog/docs/docker.md
delete mode 100644 src/DjangoBlog/docs/es.md
delete mode 100644 src/DjangoBlog/docs/imgs/alipay.jpg
delete mode 100644 src/DjangoBlog/docs/imgs/pycharm_logo.png
delete mode 100644 src/DjangoBlog/docs/imgs/wechat.jpg
delete mode 100644 src/DjangoBlog/docs/k8s-en.md
delete mode 100644 src/DjangoBlog/docs/k8s.md
delete mode 100644 src/DjangoBlog/locale/en/LC_MESSAGES/django.mo
delete mode 100644 src/DjangoBlog/locale/en/LC_MESSAGES/django.po
delete mode 100644 src/DjangoBlog/locale/zh_Hans/LC_MESSAGES/django.mo
delete mode 100644 src/DjangoBlog/locale/zh_Hans/LC_MESSAGES/django.po
delete mode 100644 src/DjangoBlog/locale/zh_Hant/LC_MESSAGES/django.mo
delete mode 100644 src/DjangoBlog/locale/zh_Hant/LC_MESSAGES/django.po
delete mode 100755 src/DjangoBlog/manage.py
delete mode 100644 src/DjangoBlog/oauth/__init__.py
delete mode 100644 src/DjangoBlog/oauth/admin.py
delete mode 100644 src/DjangoBlog/oauth/apps.py
delete mode 100644 src/DjangoBlog/oauth/forms.py
delete mode 100644 src/DjangoBlog/oauth/migrations/0001_initial.py
delete mode 100644 src/DjangoBlog/oauth/migrations/0002_alter_oauthconfig_options_alter_oauthuser_options_and_more.py
delete mode 100644 src/DjangoBlog/oauth/migrations/0003_alter_oauthuser_nickname.py
delete mode 100644 src/DjangoBlog/oauth/migrations/__init__.py
delete mode 100644 src/DjangoBlog/oauth/models.py
delete mode 100644 src/DjangoBlog/oauth/oauthmanager.py
delete mode 100644 src/DjangoBlog/oauth/templatetags/__init__.py
delete mode 100644 src/DjangoBlog/oauth/templatetags/oauth_tags.py
delete mode 100644 src/DjangoBlog/oauth/tests.py
delete mode 100644 src/DjangoBlog/oauth/urls.py
delete mode 100644 src/DjangoBlog/oauth/views.py
delete mode 100644 src/DjangoBlog/owntracks/__init__.py
delete mode 100644 src/DjangoBlog/owntracks/admin.py
delete mode 100644 src/DjangoBlog/owntracks/apps.py
delete mode 100644 src/DjangoBlog/owntracks/migrations/0001_initial.py
delete mode 100644 src/DjangoBlog/owntracks/migrations/0002_alter_owntracklog_options_and_more.py
delete mode 100644 src/DjangoBlog/owntracks/migrations/__init__.py
delete mode 100644 src/DjangoBlog/owntracks/models.py
delete mode 100644 src/DjangoBlog/owntracks/tests.py
delete mode 100644 src/DjangoBlog/owntracks/urls.py
delete mode 100644 src/DjangoBlog/owntracks/views.py
delete mode 100644 src/DjangoBlog/plugins/__init__.py
delete mode 100644 src/DjangoBlog/plugins/article_copyright/__init__.py
delete mode 100644 src/DjangoBlog/plugins/article_copyright/plugin.py
delete mode 100644 src/DjangoBlog/plugins/article_recommendation/__init__.py
delete mode 100644 src/DjangoBlog/plugins/article_recommendation/plugin.py
delete mode 100644 src/DjangoBlog/plugins/article_recommendation/static/article_recommendation/css/recommendation.css
delete mode 100644 src/DjangoBlog/plugins/article_recommendation/static/article_recommendation/js/recommendation.js
delete mode 100644 src/DjangoBlog/plugins/external_links/__init__.py
delete mode 100644 src/DjangoBlog/plugins/external_links/plugin.py
delete mode 100644 src/DjangoBlog/plugins/image_lazy_loading/__init__.py
delete mode 100644 src/DjangoBlog/plugins/image_lazy_loading/plugin.py
delete mode 100644 src/DjangoBlog/plugins/reading_time/__init__.py
delete mode 100644 src/DjangoBlog/plugins/reading_time/plugin.py
delete mode 100644 src/DjangoBlog/plugins/seo_optimizer/__init__.py
delete mode 100644 src/DjangoBlog/plugins/seo_optimizer/plugin.py
delete mode 100644 src/DjangoBlog/plugins/view_count/__init__.py
delete mode 100644 src/DjangoBlog/plugins/view_count/plugin.py
delete mode 100644 src/DjangoBlog/requirements.txt
delete mode 100644 src/DjangoBlog/servermanager/MemcacheStorage.py
delete mode 100644 src/DjangoBlog/servermanager/__init__.py
delete mode 100644 src/DjangoBlog/servermanager/admin.py
delete mode 100644 src/DjangoBlog/servermanager/api/__init__.py
delete mode 100644 src/DjangoBlog/servermanager/api/blogapi.py
delete mode 100644 src/DjangoBlog/servermanager/api/commonapi.py
delete mode 100644 src/DjangoBlog/servermanager/apps.py
delete mode 100644 src/DjangoBlog/servermanager/migrations/0001_initial.py
delete mode 100644 src/DjangoBlog/servermanager/migrations/0002_alter_emailsendlog_options_and_more.py
delete mode 100644 src/DjangoBlog/servermanager/migrations/__init__.py
delete mode 100644 src/DjangoBlog/servermanager/models.py
delete mode 100644 src/DjangoBlog/servermanager/robot.py
delete mode 100644 src/DjangoBlog/servermanager/tests.py
delete mode 100644 src/DjangoBlog/servermanager/urls.py
delete mode 100644 src/DjangoBlog/servermanager/views.py
delete mode 100644 src/DjangoBlog/templates/account/forget_password.html
delete mode 100644 src/DjangoBlog/templates/account/login.html
delete mode 100644 src/DjangoBlog/templates/account/registration_form.html
delete mode 100644 src/DjangoBlog/templates/account/result.html
delete mode 100644 src/DjangoBlog/templates/blog/article_archives.html
delete mode 100755 src/DjangoBlog/templates/blog/article_detail.html
delete mode 100644 src/DjangoBlog/templates/blog/article_index.html
delete mode 100644 src/DjangoBlog/templates/blog/error_page.html
delete mode 100644 src/DjangoBlog/templates/blog/links_list.html
delete mode 100644 src/DjangoBlog/templates/blog/tags/article_info.html
delete mode 100644 src/DjangoBlog/templates/blog/tags/article_meta_info.html
delete mode 100644 src/DjangoBlog/templates/blog/tags/article_pagination.html
delete mode 100644 src/DjangoBlog/templates/blog/tags/article_tag_list.html
delete mode 100644 src/DjangoBlog/templates/blog/tags/breadcrumb.html
delete mode 100755 src/DjangoBlog/templates/blog/tags/sidebar.html
delete mode 100644 src/DjangoBlog/templates/comments/tags/comment_item.html
delete mode 100644 src/DjangoBlog/templates/comments/tags/comment_item_tree.html
delete mode 100644 src/DjangoBlog/templates/comments/tags/comment_list.html
delete mode 100644 src/DjangoBlog/templates/comments/tags/post_comment.html
delete mode 100644 src/DjangoBlog/templates/oauth/bindsuccess.html
delete mode 100644 src/DjangoBlog/templates/oauth/oauth_applications.html
delete mode 100644 src/DjangoBlog/templates/oauth/require_email.html
delete mode 100644 src/DjangoBlog/templates/owntracks/show_log_dates.html
delete mode 100644 src/DjangoBlog/templates/owntracks/show_maps.html
delete mode 100644 src/DjangoBlog/templates/plugins/article_recommendation/__init__.py
delete mode 100644 src/DjangoBlog/templates/plugins/article_recommendation/bottom_widget.html
delete mode 100644 src/DjangoBlog/templates/plugins/article_recommendation/sidebar_widget.html
delete mode 100644 src/DjangoBlog/templates/plugins/css_includes.html
delete mode 100644 src/DjangoBlog/templates/plugins/js_includes.html
delete mode 100644 src/DjangoBlog/templates/search/indexes/blog/article_text.txt
delete mode 100644 src/DjangoBlog/templates/search/search.html
delete mode 100644 src/DjangoBlog/templates/share_layout/adsense.html
delete mode 100644 src/DjangoBlog/templates/share_layout/base.html
delete mode 100644 src/DjangoBlog/templates/share_layout/base_account.html
delete mode 100644 src/DjangoBlog/templates/share_layout/footer.html
delete mode 100644 src/DjangoBlog/templates/share_layout/nav.html
delete mode 100644 src/DjangoBlog/templates/share_layout/nav_node.html
diff --git a/src/DjangoBlog/.dockerignore b/src/DjangoBlog/.dockerignore
deleted file mode 100644
index becd6f9..0000000
--- a/src/DjangoBlog/.dockerignore
+++ /dev/null
@@ -1,12 +0,0 @@
-bin/data/
-# virtualenv
-venv/
-collectedstatic/
-djangoblog/whoosh_index/
-uploads/
-settings_production.py
-*.md
-docs/
-logs/
-static/
-.github/
diff --git a/src/DjangoBlog/.gitattributes b/src/DjangoBlog/.gitattributes
deleted file mode 100644
index fd52ece..0000000
--- a/src/DjangoBlog/.gitattributes
+++ /dev/null
@@ -1,6 +0,0 @@
-blog/static/* linguist-vendored
-*.js linguist-vendored
-*.css linguist-vendored
-* text=auto
-*.sh text eol=lf
-*.conf text eol=lf
\ No newline at end of file
diff --git a/src/DjangoBlog/.github/ISSUE_TEMPLATE.md b/src/DjangoBlog/.github/ISSUE_TEMPLATE.md
deleted file mode 100644
index 2b5b7aa..0000000
--- a/src/DjangoBlog/.github/ISSUE_TEMPLATE.md
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-**我确定我已经查看了** (标注`[ ]`为`[x]`)
-
-- [ ] [DjangoBlog的readme](https://github.com/liangliangyy/DjangoBlog/blob/master/README.md)
-- [ ] [配置说明](https://github.com/liangliangyy/DjangoBlog/blob/master/bin/config.md)
-- [ ] [其他 Issues](https://github.com/liangliangyy/DjangoBlog/issues)
-
-----
-
-**我要申请** (标注`[ ]`为`[x]`)
-
-- [ ] BUG 反馈
-- [ ] 添加新的特性或者功能
-- [ ] 请求技术支持
diff --git a/src/DjangoBlog/.github/workflows/codeql-analysis.yml b/src/DjangoBlog/.github/workflows/codeql-analysis.yml
deleted file mode 100644
index 52775e0..0000000
--- a/src/DjangoBlog/.github/workflows/codeql-analysis.yml
+++ /dev/null
@@ -1,49 +0,0 @@
-name: "CodeQL"
-
-on:
- push:
- branches:
- - master
- - dev
- paths-ignore:
- - '**/*.md'
- - '**/*.css'
- - '**/*.js'
- - '**/*.yml'
- - '**/*.txt'
- pull_request:
- branches:
- - master
- - dev
- paths-ignore:
- - '**/*.md'
- - '**/*.css'
- - '**/*.js'
- - '**/*.yml'
- - '**/*.txt'
- schedule:
- - cron: '30 1 * * 0'
-
-
-jobs:
- CodeQL-Build:
- runs-on: ubuntu-latest
- permissions:
- security-events: write
- actions: read
- contents: read
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v3
-
- - name: Initialize CodeQL
- uses: github/codeql-action/init@v3
- with:
- languages: python
-
- - name: Autobuild
- uses: github/codeql-action/autobuild@v3
-
- - name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@v3
\ No newline at end of file
diff --git a/src/DjangoBlog/.github/workflows/deploy-master.yml b/src/DjangoBlog/.github/workflows/deploy-master.yml
deleted file mode 100644
index c07a326..0000000
--- a/src/DjangoBlog/.github/workflows/deploy-master.yml
+++ /dev/null
@@ -1,176 +0,0 @@
-name: 自动部署到生产环境
-
-on:
- workflow_run:
- workflows: ["Django CI"]
- types:
- - completed
- branches:
- - master
- workflow_dispatch:
- inputs:
- environment:
- description: '部署环境'
- required: true
- default: 'production'
- type: choice
- options:
- - production
- - staging
- image_tag:
- description: '镜像标签 (默认: latest)'
- required: false
- default: 'latest'
- type: string
- skip_tests:
- description: '跳过测试直接部署'
- required: false
- default: false
- type: boolean
-
-env:
- REGISTRY: registry.cn-shenzhen.aliyuncs.com
- IMAGE_NAME: liangliangyy/djangoblog
- NAMESPACE: djangoblog
-
-jobs:
- deploy:
- name: 构建镜像并部署到生产环境
- runs-on: ubuntu-latest
- if: ${{ github.event.workflow_run.conclusion == 'success' || github.event_name == 'workflow_dispatch' }}
-
- steps:
- - name: 检出代码
- uses: actions/checkout@v4
-
- - name: 设置部署参数
- id: deploy-params
- run: |
- if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
- echo "trigger_type=手动触发" >> $GITHUB_OUTPUT
- echo "environment=${{ github.event.inputs.environment }}" >> $GITHUB_OUTPUT
- echo "image_tag=${{ github.event.inputs.image_tag }}" >> $GITHUB_OUTPUT
- echo "skip_tests=${{ github.event.inputs.skip_tests }}" >> $GITHUB_OUTPUT
- else
- echo "trigger_type=CI自动触发" >> $GITHUB_OUTPUT
- echo "environment=production" >> $GITHUB_OUTPUT
- echo "image_tag=latest" >> $GITHUB_OUTPUT
- echo "skip_tests=false" >> $GITHUB_OUTPUT
- fi
-
- - name: 显示部署信息
- run: |
- echo "🚀 部署信息:"
- echo " 触发方式: ${{ steps.deploy-params.outputs.trigger_type }}"
- echo " 部署环境: ${{ steps.deploy-params.outputs.environment }}"
- echo " 镜像标签: ${{ steps.deploy-params.outputs.image_tag }}"
- echo " 跳过测试: ${{ steps.deploy-params.outputs.skip_tests }}"
-
- - name: 设置Docker Buildx
- uses: docker/setup-buildx-action@v3
-
- - name: 登录私有镜像仓库
- uses: docker/login-action@v3
- with:
- registry: ${{ env.REGISTRY }}
- username: ${{ secrets.REGISTRY_USERNAME }}
- password: ${{ secrets.REGISTRY_PASSWORD }}
-
- - name: 提取镜像元数据
- id: meta
- uses: docker/metadata-action@v5
- with:
- images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
- tags: |
- type=ref,event=branch
- type=sha,prefix={{branch}}-
- type=raw,value=${{ steps.deploy-params.outputs.image_tag }}
-
- - name: 构建并推送Docker镜像
- uses: docker/build-push-action@v5
- with:
- context: .
- file: ./Dockerfile
- push: true
- tags: ${{ steps.meta.outputs.tags }}
- labels: ${{ steps.meta.outputs.labels }}
- cache-from: type=gha
- cache-to: type=gha,mode=max
- platforms: linux/amd64
-
- - name: 部署到生产服务器
- uses: appleboy/ssh-action@v1.0.3
- with:
- host: ${{ secrets.PRODUCTION_HOST }}
- username: ${{ secrets.PRODUCTION_USER }}
- key: ${{ secrets.PRODUCTION_SSH_KEY }}
- port: ${{ secrets.PRODUCTION_PORT || 22 }}
- script: |
- echo "🚀 开始部署 DjangoBlog..."
-
- # 检查kubectl是否可用
- if ! command -v kubectl &> /dev/null; then
- echo "❌ 错误: kubectl 未安装或不在PATH中"
- exit 1
- fi
-
- # 检查命名空间是否存在
- if ! kubectl get namespace ${{ env.NAMESPACE }} &> /dev/null; then
- echo "❌ 错误: 命名空间 ${{ env.NAMESPACE }} 不存在"
- exit 1
- fi
-
- # 更新deployment镜像
- echo "📦 更新deployment镜像为: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.deploy-params.outputs.image_tag }}"
- kubectl set image deployment/djangoblog \
- djangoblog=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.deploy-params.outputs.image_tag }} \
- -n ${{ env.NAMESPACE }}
-
- # 重启deployment
- echo "🔄 重启deployment..."
- kubectl -n ${{ env.NAMESPACE }} rollout restart deployment djangoblog
-
- # 等待deployment完成
- echo "⏳ 等待deployment完成..."
- kubectl rollout status deployment/djangoblog -n ${{ env.NAMESPACE }} --timeout=300s
-
- # 检查deployment状态
- echo "✅ 检查deployment状态..."
- kubectl get deployment djangoblog -n ${{ env.NAMESPACE }}
- kubectl get pods -l app=djangoblog -n ${{ env.NAMESPACE }}
-
- echo "🎉 部署完成!"
-
- - name: 发送部署通知
- if: always()
- run: |
- # 设置通知内容
- if [ "${{ job.status }}" = "success" ]; then
- TITLE="✅ DjangoBlog部署成功"
- STATUS="成功"
- else
- TITLE="❌ DjangoBlog部署失败"
- STATUS="失败"
- fi
-
- MESSAGE="部署状态: ${STATUS}
- 触发方式: ${{ steps.deploy-params.outputs.trigger_type }}
- 部署环境: ${{ steps.deploy-params.outputs.environment }}
- 镜像标签: ${{ steps.deploy-params.outputs.image_tag }}
- 提交者: ${{ github.actor }}
- 时间: $(date '+%Y-%m-%d %H:%M:%S')
-
- 查看详情: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
-
- # 发送Server酱通知
- if [ -n "${{ secrets.SERVERCHAN_KEY }}" ]; then
- echo "{\"title\": \"${TITLE}\", \"desp\": \"${MESSAGE}\"}" > /tmp/serverchan.json
-
- curl --location "https://sctapi.ftqq.com/${{ secrets.SERVERCHAN_KEY }}.send" \
- --header "Content-Type: application/json" \
- --data @/tmp/serverchan.json \
- --silent > /dev/null
-
- rm -f /tmp/serverchan.json
- echo "📱 部署通知已发送"
- fi
\ No newline at end of file
diff --git a/src/DjangoBlog/.github/workflows/django.yml b/src/DjangoBlog/.github/workflows/django.yml
deleted file mode 100644
index ebe7953..0000000
--- a/src/DjangoBlog/.github/workflows/django.yml
+++ /dev/null
@@ -1,371 +0,0 @@
-name: Django CI
-
-on:
- push:
- branches:
- - master
- - dev
- paths-ignore:
- - '**/*.md'
- - '**/*.css'
- - '**/*.js'
- pull_request:
- branches:
- - master
- - dev
- paths-ignore:
- - '**/*.md'
- - '**/*.css'
- - '**/*.js'
-
-jobs:
- test:
- runs-on: ubuntu-latest
- strategy:
- fail-fast: false
- matrix:
- include:
- # 标准测试 - Python 3.10
- - python-version: "3.10"
- test-type: "standard"
- database: "mysql"
- elasticsearch: false
- coverage: false
-
- # 标准测试 - Python 3.11
- - python-version: "3.11"
- test-type: "standard"
- database: "mysql"
- elasticsearch: false
- coverage: false
-
- # 完整测试 - 包含ES和覆盖率
- - python-version: "3.11"
- test-type: "full"
- database: "mysql"
- elasticsearch: true
- coverage: true
-
- # Docker构建测试
- - python-version: "3.11"
- test-type: "docker"
- database: "none"
- elasticsearch: false
- coverage: false
-
- name: Test (${{ matrix.test-type }}, Python ${{ matrix.python-version }})
-
- steps:
- - name: Checkout代码
- uses: actions/checkout@v4
-
- - name: 设置测试信息
- id: test-info
- run: |
- echo "test_name=${{ matrix.test-type }}-py${{ matrix.python-version }}" >> $GITHUB_OUTPUT
- if [ "${{ matrix.test-type }}" = "docker" ]; then
- echo "skip_python_setup=true" >> $GITHUB_OUTPUT
- else
- echo "skip_python_setup=false" >> $GITHUB_OUTPUT
- fi
-
- # MySQL数据库设置 (只有需要数据库的测试才执行)
- - name: 启动MySQL数据库
- if: matrix.database == 'mysql'
- uses: samin/mysql-action@v1.3
- with:
- host port: 3306
- container port: 3306
- character set server: utf8mb4
- collation server: utf8mb4_general_ci
- mysql version: latest
- mysql root password: root
- mysql database: djangoblog
- mysql user: root
- mysql password: root
-
- # Elasticsearch设置 (只有完整测试才执行)
- - name: 配置系统参数 (ES)
- if: matrix.elasticsearch == true
- run: |
- sudo swapoff -a
- sudo sysctl -w vm.swappiness=1
- sudo sysctl -w fs.file-max=262144
- sudo sysctl -w vm.max_map_count=262144
-
- - name: 启动Elasticsearch
- if: matrix.elasticsearch == true
- uses: miyataka/elasticsearch-github-actions@1
- with:
- stack-version: '7.12.1'
- plugins: 'https://release.infinilabs.com/analysis-ik/stable/elasticsearch-analysis-ik-7.12.1.zip'
-
- # Python环境设置 (Docker测试跳过)
- - name: 设置Python ${{ matrix.python-version }}
- if: steps.test-info.outputs.skip_python_setup == 'false'
- uses: actions/setup-python@v5
- with:
- python-version: ${{ matrix.python-version }}
- cache: 'pip'
- cache-dependency-path: 'requirements.txt'
-
- # 多层缓存策略优化
- - name: 缓存Python依赖
- if: steps.test-info.outputs.skip_python_setup == 'false'
- uses: actions/cache@v4
- with:
- path: |
- ~/.cache/pip
- .pytest_cache
- key: ${{ runner.os }}-python-${{ matrix.python-version }}-${{ hashFiles('requirements.txt') }}-${{ hashFiles('**/pyproject.toml') }}
- restore-keys: |
- ${{ runner.os }}-python-${{ matrix.python-version }}-${{ hashFiles('requirements.txt') }}-
- ${{ runner.os }}-python-${{ matrix.python-version }}-
- ${{ runner.os }}-python-
-
- # Django缓存优化 (测试数据库等)
- - name: 缓存Django资源
- if: matrix.test-type != 'docker'
- uses: actions/cache@v4
- with:
- path: |
- .coverage*
- htmlcov/
- .django_cache/
- key: ${{ runner.os }}-django-${{ matrix.test-type }}-${{ github.sha }}
- restore-keys: |
- ${{ runner.os }}-django-${{ matrix.test-type }}-
- ${{ runner.os }}-django-
-
- - name: 安装Python依赖
- if: steps.test-info.outputs.skip_python_setup == 'false'
- run: |
- echo "📦 安装Python依赖 (Python ${{ matrix.python-version }})"
- python -m pip install --upgrade pip setuptools wheel
-
- # 安装基础依赖
- pip install -r requirements.txt
-
- # 根据测试类型安装额外依赖
- if [ "${{ matrix.coverage }}" = "true" ]; then
- echo "📊 安装覆盖率工具"
- pip install coverage[toml]
- fi
-
- # 验证关键依赖
- echo "🔍 验证关键依赖安装"
- python -c "import django; print(f'Django version: {django.get_version()}')"
- python -c "import MySQLdb; print('MySQL client: OK')" || python -c "import pymysql; print('PyMySQL client: OK')"
-
- if [ "${{ matrix.elasticsearch }}" = "true" ]; then
- python -c "import elasticsearch; print('Elasticsearch client: OK')"
- fi
-
- # Django环境准备
- - name: 准备Django环境
- if: matrix.test-type != 'docker'
- env:
- DJANGO_MYSQL_PASSWORD: root
- DJANGO_MYSQL_HOST: 127.0.0.1
- DJANGO_ELASTICSEARCH_HOST: ${{ matrix.elasticsearch && '127.0.0.1:9200' || '' }}
- run: |
- echo "🔧 准备Django测试环境"
-
- # 等待数据库就绪
- echo "⏳ 等待MySQL数据库启动..."
- for i in {1..30}; do
- if python -c "import MySQLdb; MySQLdb.connect(host='127.0.0.1', user='root', passwd='root', db='djangoblog')" 2>/dev/null; then
- echo "✅ MySQL数据库连接成功"
- break
- fi
- echo "🔄 等待数据库启动... ($i/30)"
- sleep 2
- done
-
- # 等待Elasticsearch就绪 (如果启用)
- if [ "${{ matrix.elasticsearch }}" = "true" ]; then
- echo "⏳ 等待Elasticsearch启动..."
- for i in {1..30}; do
- if curl -s http://127.0.0.1:9200/_cluster/health | grep -q '"status":"green"\|"status":"yellow"'; then
- echo "✅ Elasticsearch连接成功"
- break
- fi
- echo "🔄 等待Elasticsearch启动... ($i/30)"
- sleep 2
- done
- fi
-
- # Django测试执行
- - name: 执行数据库迁移
- if: matrix.test-type != 'docker'
- env:
- DJANGO_MYSQL_PASSWORD: root
- DJANGO_MYSQL_HOST: 127.0.0.1
- DJANGO_ELASTICSEARCH_HOST: ${{ matrix.elasticsearch && '127.0.0.1:9200' || '' }}
- run: |
- echo "🗄️ 执行数据库迁移"
-
- # 检查迁移文件
- echo "📋 检查待应用的迁移..."
- python manage.py showmigrations
-
- # 检查是否有未创建的迁移
- python manage.py makemigrations --check --verbosity 2
-
- # 执行迁移
- python manage.py migrate --verbosity 2
-
- echo "✅ 数据库迁移完成"
-
- - name: 运行Django测试
- if: matrix.test-type != 'docker'
- env:
- DJANGO_MYSQL_PASSWORD: root
- DJANGO_MYSQL_HOST: 127.0.0.1
- DJANGO_ELASTICSEARCH_HOST: ${{ matrix.elasticsearch && '127.0.0.1:9200' || '' }}
- run: |
- echo "🧪 开始执行 ${{ matrix.test-type }} 测试 (Python ${{ matrix.python-version }})"
-
- # 显示Django配置信息
- python manage.py diffsettings | head -20
-
- # 运行测试
- if [ "${{ matrix.coverage }}" = "true" ]; then
- echo "📊 运行测试并生成覆盖率报告"
- coverage run --source='.' --omit='*/venv/*,*/migrations/*,*/tests/*,manage.py' manage.py test --verbosity=2
-
- echo "📈 生成覆盖率报告"
- coverage xml
- coverage report --show-missing
- coverage html
-
- echo "📋 覆盖率统计:"
- coverage report | tail -1
- else
- echo "🧪 运行标准测试"
- python manage.py test --verbosity=2 --failfast
- fi
-
- echo "✅ 测试执行完成"
-
- # 覆盖率报告上传 (只有完整测试才执行)
- - name: 上传覆盖率到Codecov
- if: matrix.coverage == true && success()
- uses: codecov/codecov-action@v4
- with:
- token: ${{ secrets.CODECOV_TOKEN }}
- file: ./coverage.xml
- flags: unittests
- name: codecov-${{ steps.test-info.outputs.test_name }}
- fail_ci_if_error: false
- verbose: true
-
- - name: 上传覆盖率到Codecov (备用)
- if: matrix.coverage == true && failure()
- uses: codecov/codecov-action@v4
- with:
- file: ./coverage.xml
- flags: unittests
- name: codecov-${{ steps.test-info.outputs.test_name }}-fallback
- fail_ci_if_error: false
- verbose: true
-
- # Docker构建测试
- - name: 设置QEMU
- if: matrix.test-type == 'docker'
- uses: docker/setup-qemu-action@v3
-
- - name: 设置Docker Buildx
- if: matrix.test-type == 'docker'
- uses: docker/setup-buildx-action@v3
-
- - name: Docker构建测试
- if: matrix.test-type == 'docker'
- uses: docker/build-push-action@v5
- with:
- context: .
- push: false
- tags: djangoblog/djangoblog:test-${{ github.sha }}
- cache-from: type=gha
- cache-to: type=gha,mode=max
-
- # 收集测试工件 (失败时收集调试信息)
- - name: 收集测试工件
- if: failure() && matrix.test-type != 'docker'
- run: |
- echo "🔍 收集测试失败的调试信息"
-
- # 收集Django日志
- if [ -d "logs" ]; then
- echo "📄 Django日志文件:"
- ls -la logs/
- if [ -f "logs/djangoblog.log" ]; then
- echo "🔍 最新日志内容:"
- tail -100 logs/djangoblog.log
- fi
- fi
-
- # 显示数据库状态
- echo "🗄️ 数据库连接状态:"
- python -c "
- try:
- from django.db import connection
- cursor = connection.cursor()
- cursor.execute('SELECT VERSION()')
- print(f'MySQL版本: {cursor.fetchone()[0]}')
- cursor.execute('SHOW TABLES')
- tables = cursor.fetchall()
- print(f'数据库表数量: {len(tables)}')
- except Exception as e:
- print(f'数据库连接错误: {e}')
- " || true
-
- # Elasticsearch状态 (如果启用)
- if [ "${{ matrix.elasticsearch }}" = "true" ]; then
- echo "🔍 Elasticsearch状态:"
- curl -s http://127.0.0.1:9200/_cluster/health?pretty || true
- fi
-
- # 上传测试工件
- - name: 上传覆盖率HTML报告
- if: matrix.coverage == true && always()
- uses: actions/upload-artifact@v4
- with:
- name: coverage-report-${{ steps.test-info.outputs.test_name }}
- path: htmlcov/
- retention-days: 30
-
- # 性能统计
- - name: 测试性能统计
- if: always() && matrix.test-type != 'docker'
- run: |
- echo "⚡ 测试性能统计:"
- echo " 开始时间: $(date -d '@${{ job.started_at }}' '+%Y-%m-%d %H:%M:%S' 2>/dev/null || echo '未知')"
- echo " 当前时间: $(date '+%Y-%m-%d %H:%M:%S')"
-
- # 系统资源使用情况
- echo "💻 系统资源:"
- echo " CPU使用: $(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)%"
- echo " 内存使用: $(free -h | awk '/^Mem:/ {printf "%.1f%%", $3/$2 * 100}')"
- echo " 磁盘使用: $(df -h / | awk 'NR==2{printf "%s", $5}')"
-
- # 测试结果汇总
- - name: 测试完成总结
- if: always()
- run: |
- echo "📋 ============ 测试执行总结 ============"
- echo " 🏷️ 测试类型: ${{ matrix.test-type }}"
- echo " 🐍 Python版本: ${{ matrix.python-version }}"
- echo " 🗄️ 数据库: ${{ matrix.database }}"
- echo " 🔍 Elasticsearch: ${{ matrix.elasticsearch }}"
- echo " 📊 覆盖率: ${{ matrix.coverage }}"
- echo " ⚡ 状态: ${{ job.status }}"
- echo " 📅 完成时间: $(date '+%Y-%m-%d %H:%M:%S')"
- echo "============================================"
-
- # 根据测试结果显示不同消息
- if [ "${{ job.status }}" = "success" ]; then
- echo "🎉 测试执行成功!"
- else
- echo "❌ 测试执行失败,请检查上面的日志"
- fi
diff --git a/src/DjangoBlog/.github/workflows/docker.yml b/src/DjangoBlog/.github/workflows/docker.yml
deleted file mode 100644
index 904fef5..0000000
--- a/src/DjangoBlog/.github/workflows/docker.yml
+++ /dev/null
@@ -1,43 +0,0 @@
-name: docker
-
-on:
- push:
- paths-ignore:
- - '**/*.md'
- - '**/*.yml'
- branches:
- - 'master'
- - 'dev'
-
-jobs:
- docker:
- runs-on: ubuntu-latest
- steps:
- - name: Set env to docker dev tag
- if: endsWith(github.ref, '/dev')
- run: |
- echo "DOCKER_TAG=test" >> $GITHUB_ENV
- - name: Set env to docker latest tag
- if: endsWith(github.ref, '/master')
- run: |
- echo "DOCKER_TAG=latest" >> $GITHUB_ENV
- - name: Checkout
- uses: actions/checkout@v4
- - name: Set up QEMU
- uses: docker/setup-qemu-action@v3
- - name: Set up Docker Buildx
- uses: docker/setup-buildx-action@v3
-
- - name: Login to DockerHub
- uses: docker/login-action@v3
- with:
- username: ${{ secrets.DOCKERHUB_USERNAME }}
- password: ${{ secrets.DOCKERHUB_TOKEN }}
- - name: Build and push
- uses: docker/build-push-action@v5
- with:
- context: .
- push: true
- tags: ${{ secrets.DOCKERHUB_USERNAME }}/djangoblog:${{env.DOCKER_TAG}}
-
-
diff --git a/src/DjangoBlog/.github/workflows/publish-release.yml b/src/DjangoBlog/.github/workflows/publish-release.yml
deleted file mode 100644
index 5eb0853..0000000
--- a/src/DjangoBlog/.github/workflows/publish-release.yml
+++ /dev/null
@@ -1,39 +0,0 @@
-name: publish release
-
-on:
- release:
- types: [ published ]
-
-jobs:
- docker:
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v3
-
- - name: Docker meta
- id: meta
- uses: docker/metadata-action@v3
- with:
- images: name/app
- - name: Set up QEMU
- uses: docker/setup-qemu-action@v2
- - name: Set up Docker Buildx
- uses: docker/setup-buildx-action@v2
- - name: Login to DockerHub
- uses: docker/login-action@v2
- with:
- username: ${{ secrets.DOCKERHUB_USERNAME }}
- password: ${{ secrets.DOCKERHUB_TOKEN }}
- - name: Build and push
- uses: docker/build-push-action@v3
- with:
- context: .
- push: true
- platforms: |
- linux/amd64
- linux/arm64
- linux/arm/v7
- linux/arm/v6
- linux/386
- tags: ${{ secrets.DOCKERHUB_USERNAME }}/djangoblog:${{ github.event.release.tag_name }}
diff --git a/src/DjangoBlog/.gitignore b/src/DjangoBlog/.gitignore
deleted file mode 100644
index 76302b1..0000000
--- a/src/DjangoBlog/.gitignore
+++ /dev/null
@@ -1,79 +0,0 @@
-# Byte-compiled / optimized / DLL files
-__pycache__/
-*.py[cod]
-*$py.class
-
-# C extensions
-*.so
-
-# Distribution / packaging
-.Python
-env/
-build/
-develop-eggs/
-dist/
-downloads/
-eggs/
-.eggs/
-lib/
-lib64/
-parts/
-sdist/
-var/
-*.egg-info/
-.installed.cfg
-*.egg
-
-# PyInstaller
-# Usually these files are written by a python script from a template
-# before PyInstaller builds the exe, so as to inject date/other infos into it.
-*.manifest
-*.spec
-
-# Installer logs
-pip-log.txt
-pip-delete-this-directory.txt
-
-# Unit test / coverage reports
-htmlcov/
-.tox/
-.coverage
-.coverage.*
-.cache
-nosetests.xml
-coverage.xml
-*,cover
-
-# Translations
-*.pot
-
-# Django stuff:
-*.log
-logs/
-
-# Sphinx documentation
-docs/_build/
-
-# PyBuilder
-target/
-
-
-# PyCharm
-# http://www.jetbrains.com/pycharm/webhelp/project.html
-.idea
-.iml
-# virtualenv
-venv/
-
-collectedstatic/
-djangoblog/whoosh_index/
-google93fd32dbd906620a.html
-baidu_verify_FlHL7cUyC9.html
-BingSiteAuth.xml
-cb9339dbe2ff86a5aa169d28dba5f615.txt
-werobot_session.*
-django.jpg
-uploads/
-settings_production.py
-werobot_session.db
-bin/datas/
diff --git a/src/DjangoBlog/Dockerfile b/src/DjangoBlog/Dockerfile
deleted file mode 100644
index 80b46ac..0000000
--- a/src/DjangoBlog/Dockerfile
+++ /dev/null
@@ -1,15 +0,0 @@
-FROM python:3.11
-ENV PYTHONUNBUFFERED 1
-WORKDIR /code/djangoblog/
-RUN apt-get update && \
- apt-get install default-libmysqlclient-dev gettext -y && \
- rm -rf /var/lib/apt/lists/*
-ADD requirements.txt requirements.txt
-RUN pip install --upgrade pip && \
- pip install --no-cache-dir -r requirements.txt && \
- pip install --no-cache-dir gunicorn[gevent] && \
- pip cache purge
-
-ADD . .
-RUN chmod +x /code/djangoblog/deploy/entrypoint.sh
-ENTRYPOINT ["/code/djangoblog/deploy/entrypoint.sh"]
diff --git a/src/DjangoBlog/LICENSE b/src/DjangoBlog/LICENSE
deleted file mode 100644
index 3b08474..0000000
--- a/src/DjangoBlog/LICENSE
+++ /dev/null
@@ -1,20 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2025 车亮亮
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/src/DjangoBlog/README.md b/src/DjangoBlog/README.md
deleted file mode 100644
index 56aa4cc..0000000
--- a/src/DjangoBlog/README.md
+++ /dev/null
@@ -1,158 +0,0 @@
-# DjangoBlog
-
-
-
-
-
-
-
-
-
- 一款功能强大、设计优雅的现代化博客系统
-
- English • 简体中文
-
-
----
-
-DjangoBlog 是一款基于 Python 3.10 和 Django 4.0 构建的高性能博客平台。它不仅提供了传统博客的所有核心功能,还通过一个灵活的插件系统,让您可以轻松扩展和定制您的网站。无论您是个人博主、技术爱好者还是内容创作者,DjangoBlog 都旨在为您提供一个稳定、高效且易于维护的写作和发布环境。
-
-## ✨ 特性亮点
-
-- **强大的内容管理**: 支持文章、独立页面、分类和标签的完整管理。内置强大的 Markdown 编辑器,支持代码语法高亮。
-- **全文搜索**: 集成搜索引擎,提供快速、精准的文章内容搜索。
-- **互动评论系统**: 支持回复、邮件提醒等功能,评论内容同样支持 Markdown。
-- **灵活的侧边栏**: 可自定义展示最新文章、最多阅读、标签云等模块。
-- **社交化登录**: 内置 OAuth 支持,已集成 Google, GitHub, Facebook, 微博, QQ 等主流平台。
-- **高性能缓存**: 原生支持 Redis 缓存,并提供自动刷新机制,确保网站高速响应。
-- **SEO 友好**: 具备基础 SEO 功能,新内容发布后可自动通知 Google 和百度。
-- **便捷的插件系统**: 通过创建独立的插件来扩展博客功能,代码解耦,易于维护。我们已经通过插件实现了文章浏览计数、SEO 优化等功能!
-- **集成图床**: 内置简单的图床功能,方便图片上传和管理。
-- **自动化前端**: 集成 `django-compressor`,自动压缩和优化 CSS 及 JavaScript 文件。
-- **健壮的运维**: 内置网站异常邮件提醒和微信公众号管理功能。
-
-## 🛠️ 技术栈
-
-- **后端**: Python 3.10, Django 4.0
-- **数据库**: MySQL, SQLite (可配置)
-- **缓存**: Redis
-- **前端**: HTML5, CSS3, JavaScript
-- **搜索**: Whoosh, Elasticsearch (可配置)
-- **编辑器**: Markdown (mdeditor)
-
-## 🚀 快速开始
-
-### 1. 环境准备
-
-确保您的系统中已安装 Python 3.10+ 和 MySQL/MariaDB。
-
-### 2. 克隆与安装
-
-```bash
-# 克隆项目到本地
-git clone https://github.com/liangliangyy/DjangoBlog.git
-cd DjangoBlog
-
-# 安装依赖
-pip install -r requirements.txt
-```
-
-### 3. 项目配置
-
-- **数据库**:
- 打开 `djangoblog/settings.py` 文件,找到 `DATABASES` 配置项,修改为您的 MySQL 连接信息。
-
- ```python
- DATABASES = {
- 'default': {
- 'ENGINE': 'django.db.backends.mysql',
- 'NAME': 'djangoblog',
- 'USER': 'root',
- 'PASSWORD': 'your_password',
- 'HOST': '127.0.0.1',
- 'PORT': 3306,
- }
- }
- ```
- 在 MySQL 中创建数据库:
- ```sql
- CREATE DATABASE `djangoblog` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- ```
-
-- **更多配置**:
- 关于邮件发送、OAuth 登录、缓存等更多高级配置,请参阅我们的 [详细配置文档](/docs/config.md)。
-
-### 4. 初始化数据库
-
-```bash
-python manage.py makemigrations
-python manage.py migrate
-
-# 创建一个超级管理员账户
-python manage.py createsuperuser
-```
-
-### 5. 运行项目
-
-```bash
-# (可选) 生成一些测试数据
-python manage.py create_testdata
-
-# (可选) 收集和压缩静态文件
-python manage.py collectstatic --noinput
-python manage.py compress --force
-
-# 启动开发服务器
-python manage.py runserver
-```
-
-现在,在您的浏览器中访问 `http://127.0.0.1:8000/`,您应该能看到 DjangoBlog 的首页了!
-
-## 部署
-
-- **传统部署**: 我们为您准备了非常详细的 [服务器部署教程](https://www.lylinux.net/article/2019/8/5/58.html)。
-- **Docker 部署**: 项目已全面支持 Docker。如果您熟悉容器化技术,请参考 [Docker 部署文档](/docs/docker.md) 来快速启动。
-- **Kubernetes 部署**: 我们也提供了完整的 [Kubernetes 部署指南](/docs/k8s.md),助您轻松上云。
-
-## 🧩 插件系统
-
-插件系统是 DjangoBlog 的核心特色之一。它允许您在不修改核心代码的情况下,通过编写独立的插件来为您的博客添加新功能。
-
-- **工作原理**: 插件通过在预定义的“钩子”上注册回调函数来工作。例如,当一篇文章被渲染时,`after_article_body_get` 钩子会被触发,所有注册到此钩子的函数都会被执行。
-- **现有插件**: `view_count`(浏览计数), `seo_optimizer`(SEO优化)等都是通过插件系统实现的。
-- **开发您自己的插件**: 只需在 `plugins` 目录下创建一个新的文件夹,并编写您的 `plugin.py`。欢迎探索并为 DjangoBlog 社区贡献您的创意!
-
-## 🤝 贡献指南
-
-我们热烈欢迎任何形式的贡献!如果您有好的想法或发现了 Bug,请随时提交 Issue 或 Pull Request。
-
-## 📄 许可证
-
-本项目基于 [MIT License](LICENSE) 开源。
-
----
-
-## ❤️ 支持与赞助
-
-如果您觉得这个项目对您有帮助,并且希望支持我继续维护和开发新功能,欢迎请我喝杯咖啡!您的每一份支持都是我前进的最大动力。
-
-
-
-
-
-
- (左) 支付宝 / (右) 微信
-
-
-## 🙏 鸣谢
-
-特别感谢 **JetBrains** 为本项目提供的免费开源许可证。
-
-
-
-
-
-
-
----
-> 如果本项目帮助到了你,请在[这里](https://github.com/liangliangyy/DjangoBlog/issues/214)留下你的网址,让更多的人看到。您的回复将会是我继续更新维护下去的动力。
diff --git a/src/DjangoBlog/accounts/__init__.py b/src/DjangoBlog/accounts/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/src/DjangoBlog/accounts/admin.py b/src/DjangoBlog/accounts/admin.py
deleted file mode 100644
index 29d162a..0000000
--- a/src/DjangoBlog/accounts/admin.py
+++ /dev/null
@@ -1,60 +0,0 @@
-from django import forms
-from django.contrib.auth.admin import UserAdmin
-from django.contrib.auth.forms import UserChangeForm
-from django.contrib.auth.forms import UsernameField
-from django.utils.translation import gettext_lazy as _
-
-# Register your models here.
-from .models import BlogUser
-
-
-class BlogUserCreationForm(forms.ModelForm):
- password1 = forms.CharField(label=_('password'), widget=forms.PasswordInput)
- password2 = forms.CharField(label=_('Enter password again'), widget=forms.PasswordInput)
-
- class Meta:
- model = BlogUser
- fields = ('email',)
-
- def clean_password2(self):
- # Check that the two password entries match
- password1 = self.cleaned_data.get("password1")
- password2 = self.cleaned_data.get("password2")
- if password1 and password2 and password1 != password2:
- raise forms.ValidationError(_("passwords do not match"))
- return password2
-
- def save(self, commit=True):
- # Save the provided password in hashed format
- user = super().save(commit=False)
- user.set_password(self.cleaned_data["password1"])
- if commit:
- user.source = 'adminsite'
- user.save()
- return user
-
-
-class BlogUserChangeForm(UserChangeForm):
- class Meta:
- model = BlogUser
- fields = '__all__'
- field_classes = {'username': UsernameField}
-
- def __init__(self, *args, **kwargs):
- super().__init__(*args, **kwargs)
-
-
-class BlogUserAdmin(UserAdmin):
- form = BlogUserChangeForm
- add_form = BlogUserCreationForm
- list_display = (
- 'id',
- 'nickname',
- 'username',
- 'email',
- 'last_login',
- 'date_joined',
- 'source')
- list_display_links = ('id', 'username')
- ordering = ('-id',)
- search_fields = ('username', 'nickname', 'email')
diff --git a/src/DjangoBlog/accounts/apps.py b/src/DjangoBlog/accounts/apps.py
deleted file mode 100644
index 9b3fc5a..0000000
--- a/src/DjangoBlog/accounts/apps.py
+++ /dev/null
@@ -1,5 +0,0 @@
-from django.apps import AppConfig
-
-
-class AccountsConfig(AppConfig):
- name = 'accounts'
diff --git a/src/DjangoBlog/accounts/forms.py b/src/DjangoBlog/accounts/forms.py
deleted file mode 100644
index fce4137..0000000
--- a/src/DjangoBlog/accounts/forms.py
+++ /dev/null
@@ -1,117 +0,0 @@
-from django import forms
-from django.contrib.auth import get_user_model, password_validation
-from django.contrib.auth.forms import AuthenticationForm, UserCreationForm
-from django.core.exceptions import ValidationError
-from django.forms import widgets
-from django.utils.translation import gettext_lazy as _
-from . import utils
-from .models import BlogUser
-
-
-class LoginForm(AuthenticationForm):
- def __init__(self, *args, **kwargs):
- super(LoginForm, self).__init__(*args, **kwargs)
- self.fields['username'].widget = widgets.TextInput(
- attrs={'placeholder': "username", "class": "form-control"})
- self.fields['password'].widget = widgets.PasswordInput(
- attrs={'placeholder': "password", "class": "form-control"})
-
-
-class RegisterForm(UserCreationForm):
- def __init__(self, *args, **kwargs):
- super(RegisterForm, self).__init__(*args, **kwargs)
-
- self.fields['username'].widget = widgets.TextInput(
- attrs={'placeholder': "username", "class": "form-control"})
- self.fields['email'].widget = widgets.EmailInput(
- attrs={'placeholder': "email", "class": "form-control"})
- self.fields['password1'].widget = widgets.PasswordInput(
- attrs={'placeholder': "password", "class": "form-control"})
- self.fields['password2'].widget = widgets.PasswordInput(
- attrs={'placeholder': "repeat password", "class": "form-control"})
-
- def clean_email(self):
- email = self.cleaned_data['email']
- if get_user_model().objects.filter(email=email).exists():
- raise ValidationError(_("email already exists"))
- return email
-
- class Meta:
- model = get_user_model()
- fields = ("username", "email")
-
-
-class ForgetPasswordForm(forms.Form):
- new_password1 = forms.CharField(
- label=_("New password"),
- widget=forms.PasswordInput(
- attrs={
- "class": "form-control",
- 'placeholder': _("New password")
- }
- ),
- )
-
- new_password2 = forms.CharField(
- label="确认密码",
- widget=forms.PasswordInput(
- attrs={
- "class": "form-control",
- 'placeholder': _("Confirm password")
- }
- ),
- )
-
- email = forms.EmailField(
- label='邮箱',
- widget=forms.TextInput(
- attrs={
- 'class': 'form-control',
- 'placeholder': _("Email")
- }
- ),
- )
-
- code = forms.CharField(
- label=_('Code'),
- widget=forms.TextInput(
- attrs={
- 'class': 'form-control',
- 'placeholder': _("Code")
- }
- ),
- )
-
- def clean_new_password2(self):
- password1 = self.data.get("new_password1")
- password2 = self.data.get("new_password2")
- if password1 and password2 and password1 != password2:
- raise ValidationError(_("passwords do not match"))
- password_validation.validate_password(password2)
-
- return password2
-
- def clean_email(self):
- user_email = self.cleaned_data.get("email")
- if not BlogUser.objects.filter(
- email=user_email
- ).exists():
- # todo 这里的报错提示可以判断一个邮箱是不是注册过,如果不想暴露可以修改
- raise ValidationError(_("email does not exist"))
- return user_email
-
- def clean_code(self):
- code = self.cleaned_data.get("code")
- error = utils.verify(
- email=self.cleaned_data.get("email"),
- code=code,
- )
- if error:
- raise ValidationError(error)
- return code
-
-
-class ForgetPasswordCodeForm(forms.Form):
- email = forms.EmailField(
- label=_('Email'),
- )
diff --git a/src/DjangoBlog/accounts/migrations/0001_initial.py b/src/DjangoBlog/accounts/migrations/0001_initial.py
deleted file mode 100644
index d2fbcab..0000000
--- a/src/DjangoBlog/accounts/migrations/0001_initial.py
+++ /dev/null
@@ -1,49 +0,0 @@
-# Generated by Django 4.1.7 on 2023-03-02 07:14
-
-import django.contrib.auth.models
-import django.contrib.auth.validators
-from django.db import migrations, models
-import django.utils.timezone
-
-
-class Migration(migrations.Migration):
-
- initial = True
-
- dependencies = [
- ('auth', '0012_alter_user_first_name_max_length'),
- ]
-
- operations = [
- migrations.CreateModel(
- name='BlogUser',
- fields=[
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('password', models.CharField(max_length=128, verbose_name='password')),
- ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
- ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')),
- ('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')),
- ('first_name', models.CharField(blank=True, max_length=150, verbose_name='first name')),
- ('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')),
- ('email', models.EmailField(blank=True, max_length=254, verbose_name='email address')),
- ('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')),
- ('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')),
- ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')),
- ('nickname', models.CharField(blank=True, max_length=100, verbose_name='昵称')),
- ('created_time', models.DateTimeField(default=django.utils.timezone.now, verbose_name='创建时间')),
- ('last_mod_time', models.DateTimeField(default=django.utils.timezone.now, verbose_name='修改时间')),
- ('source', models.CharField(blank=True, max_length=100, verbose_name='创建来源')),
- ('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.group', verbose_name='groups')),
- ('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.permission', verbose_name='user permissions')),
- ],
- options={
- 'verbose_name': '用户',
- 'verbose_name_plural': '用户',
- 'ordering': ['-id'],
- 'get_latest_by': 'id',
- },
- managers=[
- ('objects', django.contrib.auth.models.UserManager()),
- ],
- ),
- ]
diff --git a/src/DjangoBlog/accounts/migrations/0002_alter_bloguser_options_remove_bloguser_created_time_and_more.py b/src/DjangoBlog/accounts/migrations/0002_alter_bloguser_options_remove_bloguser_created_time_and_more.py
deleted file mode 100644
index 1a9f509..0000000
--- a/src/DjangoBlog/accounts/migrations/0002_alter_bloguser_options_remove_bloguser_created_time_and_more.py
+++ /dev/null
@@ -1,46 +0,0 @@
-# Generated by Django 4.2.5 on 2023-09-06 13:13
-
-from django.db import migrations, models
-import django.utils.timezone
-
-
-class Migration(migrations.Migration):
-
- dependencies = [
- ('accounts', '0001_initial'),
- ]
-
- operations = [
- migrations.AlterModelOptions(
- name='bloguser',
- options={'get_latest_by': 'id', 'ordering': ['-id'], 'verbose_name': 'user', 'verbose_name_plural': 'user'},
- ),
- migrations.RemoveField(
- model_name='bloguser',
- name='created_time',
- ),
- migrations.RemoveField(
- model_name='bloguser',
- name='last_mod_time',
- ),
- migrations.AddField(
- model_name='bloguser',
- name='creation_time',
- field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='creation time'),
- ),
- migrations.AddField(
- model_name='bloguser',
- name='last_modify_time',
- field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='last modify time'),
- ),
- migrations.AlterField(
- model_name='bloguser',
- name='nickname',
- field=models.CharField(blank=True, max_length=100, verbose_name='nick name'),
- ),
- migrations.AlterField(
- model_name='bloguser',
- name='source',
- field=models.CharField(blank=True, max_length=100, verbose_name='create source'),
- ),
- ]
diff --git a/src/DjangoBlog/accounts/migrations/__init__.py b/src/DjangoBlog/accounts/migrations/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/src/DjangoBlog/accounts/models.py b/src/DjangoBlog/accounts/models.py
deleted file mode 100644
index 3baddbb..0000000
--- a/src/DjangoBlog/accounts/models.py
+++ /dev/null
@@ -1,35 +0,0 @@
-from django.contrib.auth.models import AbstractUser
-from django.db import models
-from django.urls import reverse
-from django.utils.timezone import now
-from django.utils.translation import gettext_lazy as _
-from djangoblog.utils import get_current_site
-
-
-# Create your models here.
-
-class BlogUser(AbstractUser):
- nickname = models.CharField(_('nick name'), max_length=100, blank=True)
- creation_time = models.DateTimeField(_('creation time'), default=now)
- last_modify_time = models.DateTimeField(_('last modify time'), default=now)
- source = models.CharField(_('create source'), max_length=100, blank=True)
-
- def get_absolute_url(self):
- return reverse(
- 'blog:author_detail', kwargs={
- 'author_name': self.username})
-
- def __str__(self):
- return self.email
-
- def get_full_url(self):
- site = get_current_site().domain
- url = "https://{site}{path}".format(site=site,
- path=self.get_absolute_url())
- return url
-
- class Meta:
- ordering = ['-id']
- verbose_name = _('user')
- verbose_name_plural = verbose_name
- get_latest_by = 'id'
diff --git a/src/DjangoBlog/accounts/templatetags/__init__.py b/src/DjangoBlog/accounts/templatetags/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/src/DjangoBlog/accounts/tests.py b/src/DjangoBlog/accounts/tests.py
deleted file mode 100644
index 6893411..0000000
--- a/src/DjangoBlog/accounts/tests.py
+++ /dev/null
@@ -1,207 +0,0 @@
-from django.test import Client, RequestFactory, TestCase
-from django.urls import reverse
-from django.utils import timezone
-from django.utils.translation import gettext_lazy as _
-
-from accounts.models import BlogUser
-from blog.models import Article, Category
-from djangoblog.utils import *
-from . import utils
-
-
-# Create your tests here.
-
-class AccountTest(TestCase):
- def setUp(self):
- self.client = Client()
- self.factory = RequestFactory()
- self.blog_user = BlogUser.objects.create_user(
- username="test",
- email="admin@admin.com",
- password="12345678"
- )
- self.new_test = "xxx123--="
-
- def test_validate_account(self):
- site = get_current_site().domain
- user = BlogUser.objects.create_superuser(
- email="liangliangyy1@gmail.com",
- username="liangliangyy1",
- password="qwer!@#$ggg")
- testuser = BlogUser.objects.get(username='liangliangyy1')
-
- loginresult = self.client.login(
- username='liangliangyy1',
- password='qwer!@#$ggg')
- self.assertEqual(loginresult, True)
- response = self.client.get('/admin/')
- self.assertEqual(response.status_code, 200)
-
- category = Category()
- category.name = "categoryaaa"
- category.creation_time = timezone.now()
- category.last_modify_time = timezone.now()
- category.save()
-
- article = Article()
- article.title = "nicetitleaaa"
- article.body = "nicecontentaaa"
- article.author = user
- article.category = category
- article.type = 'a'
- article.status = 'p'
- article.save()
-
- response = self.client.get(article.get_admin_url())
- self.assertEqual(response.status_code, 200)
-
- def test_validate_register(self):
- self.assertEquals(
- 0, len(
- BlogUser.objects.filter(
- email='user123@user.com')))
- response = self.client.post(reverse('account:register'), {
- 'username': 'user1233',
- 'email': 'user123@user.com',
- 'password1': 'password123!q@wE#R$T',
- 'password2': 'password123!q@wE#R$T',
- })
- self.assertEquals(
- 1, len(
- BlogUser.objects.filter(
- email='user123@user.com')))
- user = BlogUser.objects.filter(email='user123@user.com')[0]
- sign = get_sha256(get_sha256(settings.SECRET_KEY + str(user.id)))
- path = reverse('accounts:result')
- url = '{path}?type=validation&id={id}&sign={sign}'.format(
- path=path, id=user.id, sign=sign)
- response = self.client.get(url)
- self.assertEqual(response.status_code, 200)
-
- self.client.login(username='user1233', password='password123!q@wE#R$T')
- user = BlogUser.objects.filter(email='user123@user.com')[0]
- user.is_superuser = True
- user.is_staff = True
- user.save()
- delete_sidebar_cache()
- category = Category()
- category.name = "categoryaaa"
- category.creation_time = timezone.now()
- category.last_modify_time = timezone.now()
- category.save()
-
- article = Article()
- article.category = category
- article.title = "nicetitle333"
- article.body = "nicecontentttt"
- article.author = user
-
- article.type = 'a'
- article.status = 'p'
- article.save()
-
- response = self.client.get(article.get_admin_url())
- self.assertEqual(response.status_code, 200)
-
- response = self.client.get(reverse('account:logout'))
- self.assertIn(response.status_code, [301, 302, 200])
-
- response = self.client.get(article.get_admin_url())
- self.assertIn(response.status_code, [301, 302, 200])
-
- response = self.client.post(reverse('account:login'), {
- 'username': 'user1233',
- 'password': 'password123'
- })
- self.assertIn(response.status_code, [301, 302, 200])
-
- response = self.client.get(article.get_admin_url())
- self.assertIn(response.status_code, [301, 302, 200])
-
- def test_verify_email_code(self):
- to_email = "admin@admin.com"
- code = generate_code()
- utils.set_code(to_email, code)
- utils.send_verify_email(to_email, code)
-
- err = utils.verify("admin@admin.com", code)
- self.assertEqual(err, None)
-
- err = utils.verify("admin@123.com", code)
- self.assertEqual(type(err), str)
-
- def test_forget_password_email_code_success(self):
- resp = self.client.post(
- path=reverse("account:forget_password_code"),
- data=dict(email="admin@admin.com")
- )
-
- self.assertEqual(resp.status_code, 200)
- self.assertEqual(resp.content.decode("utf-8"), "ok")
-
- def test_forget_password_email_code_fail(self):
- resp = self.client.post(
- path=reverse("account:forget_password_code"),
- data=dict()
- )
- self.assertEqual(resp.content.decode("utf-8"), "错误的邮箱")
-
- resp = self.client.post(
- path=reverse("account:forget_password_code"),
- data=dict(email="admin@com")
- )
- self.assertEqual(resp.content.decode("utf-8"), "错误的邮箱")
-
- def test_forget_password_email_success(self):
- code = generate_code()
- utils.set_code(self.blog_user.email, code)
- data = dict(
- new_password1=self.new_test,
- new_password2=self.new_test,
- email=self.blog_user.email,
- code=code,
- )
- resp = self.client.post(
- path=reverse("account:forget_password"),
- data=data
- )
- self.assertEqual(resp.status_code, 302)
-
- # 验证用户密码是否修改成功
- blog_user = BlogUser.objects.filter(
- email=self.blog_user.email,
- ).first() # type: BlogUser
- self.assertNotEqual(blog_user, None)
- self.assertEqual(blog_user.check_password(data["new_password1"]), True)
-
- def test_forget_password_email_not_user(self):
- data = dict(
- new_password1=self.new_test,
- new_password2=self.new_test,
- email="123@123.com",
- code="123456",
- )
- resp = self.client.post(
- path=reverse("account:forget_password"),
- data=data
- )
-
- self.assertEqual(resp.status_code, 200)
-
-
- def test_forget_password_email_code_error(self):
- code = generate_code()
- utils.set_code(self.blog_user.email, code)
- data = dict(
- new_password1=self.new_test,
- new_password2=self.new_test,
- email=self.blog_user.email,
- code="111111",
- )
- resp = self.client.post(
- path=reverse("account:forget_password"),
- data=data
- )
-
- self.assertEqual(resp.status_code, 200)
-
diff --git a/src/DjangoBlog/accounts/urls.py b/src/DjangoBlog/accounts/urls.py
deleted file mode 100644
index 107a801..0000000
--- a/src/DjangoBlog/accounts/urls.py
+++ /dev/null
@@ -1,28 +0,0 @@
-from django.urls import path
-from django.urls import re_path
-
-from . import views
-from .forms import LoginForm
-
-app_name = "accounts"
-
-urlpatterns = [re_path(r'^login/$',
- views.LoginView.as_view(success_url='/'),
- name='login',
- kwargs={'authentication_form': LoginForm}),
- re_path(r'^register/$',
- views.RegisterView.as_view(success_url="/"),
- name='register'),
- re_path(r'^logout/$',
- views.LogoutView.as_view(),
- name='logout'),
- path(r'account/result.html',
- views.account_result,
- name='result'),
- re_path(r'^forget_password/$',
- views.ForgetPasswordView.as_view(),
- name='forget_password'),
- re_path(r'^forget_password_code/$',
- views.ForgetPasswordEmailCode.as_view(),
- name='forget_password_code'),
- ]
diff --git a/src/DjangoBlog/accounts/user_login_backend.py b/src/DjangoBlog/accounts/user_login_backend.py
deleted file mode 100644
index 73cdca1..0000000
--- a/src/DjangoBlog/accounts/user_login_backend.py
+++ /dev/null
@@ -1,26 +0,0 @@
-from django.contrib.auth import get_user_model
-from django.contrib.auth.backends import ModelBackend
-
-
-class EmailOrUsernameModelBackend(ModelBackend):
- """
- 允许使用用户名或邮箱登录
- """
-
- def authenticate(self, request, username=None, password=None, **kwargs):
- if '@' in username:
- kwargs = {'email': username}
- else:
- kwargs = {'username': username}
- try:
- user = get_user_model().objects.get(**kwargs)
- if user.check_password(password):
- return user
- except get_user_model().DoesNotExist:
- return None
-
- def get_user(self, username):
- try:
- return get_user_model().objects.get(pk=username)
- except get_user_model().DoesNotExist:
- return None
diff --git a/src/DjangoBlog/accounts/utils.py b/src/DjangoBlog/accounts/utils.py
deleted file mode 100644
index 4b94bdf..0000000
--- a/src/DjangoBlog/accounts/utils.py
+++ /dev/null
@@ -1,49 +0,0 @@
-import typing
-from datetime import timedelta
-
-from django.core.cache import cache
-from django.utils.translation import gettext
-from django.utils.translation import gettext_lazy as _
-
-from djangoblog.utils import send_email
-
-_code_ttl = timedelta(minutes=5)
-
-
-def send_verify_email(to_mail: str, code: str, subject: str = _("Verify Email")):
- """发送重设密码验证码
- Args:
- to_mail: 接受邮箱
- subject: 邮件主题
- code: 验证码
- """
- html_content = _(
- "You are resetting the password, the verification code is:%(code)s, valid within 5 minutes, please keep it "
- "properly") % {'code': code}
- send_email([to_mail], subject, html_content)
-
-
-def verify(email: str, code: str) -> typing.Optional[str]:
- """验证code是否有效
- Args:
- email: 请求邮箱
- code: 验证码
- Return:
- 如果有错误就返回错误str
- Node:
- 这里的错误处理不太合理,应该采用raise抛出
- 否测调用方也需要对error进行处理
- """
- cache_code = get_code(email)
- if cache_code != code:
- return gettext("Verification code error")
-
-
-def set_code(email: str, code: str):
- """设置code"""
- cache.set(email, code, _code_ttl.seconds)
-
-
-def get_code(email: str) -> typing.Optional[str]:
- """获取code"""
- return cache.get(email)
diff --git a/src/DjangoBlog/accounts/views.py b/src/DjangoBlog/accounts/views.py
deleted file mode 100644
index ae67aec..0000000
--- a/src/DjangoBlog/accounts/views.py
+++ /dev/null
@@ -1,204 +0,0 @@
-import logging
-from django.utils.translation import gettext_lazy as _
-from django.conf import settings
-from django.contrib import auth
-from django.contrib.auth import REDIRECT_FIELD_NAME
-from django.contrib.auth import get_user_model
-from django.contrib.auth import logout
-from django.contrib.auth.forms import AuthenticationForm
-from django.contrib.auth.hashers import make_password
-from django.http import HttpResponseRedirect, HttpResponseForbidden
-from django.http.request import HttpRequest
-from django.http.response import HttpResponse
-from django.shortcuts import get_object_or_404
-from django.shortcuts import render
-from django.urls import reverse
-from django.utils.decorators import method_decorator
-from django.utils.http import url_has_allowed_host_and_scheme
-from django.views import View
-from django.views.decorators.cache import never_cache
-from django.views.decorators.csrf import csrf_protect
-from django.views.decorators.debug import sensitive_post_parameters
-from django.views.generic import FormView, RedirectView
-
-from djangoblog.utils import send_email, get_sha256, get_current_site, generate_code, delete_sidebar_cache
-from . import utils
-from .forms import RegisterForm, LoginForm, ForgetPasswordForm, ForgetPasswordCodeForm
-from .models import BlogUser
-
-logger = logging.getLogger(__name__)
-
-
-# Create your views here.
-
-class RegisterView(FormView):
- form_class = RegisterForm
- template_name = 'account/registration_form.html'
-
- @method_decorator(csrf_protect)
- def dispatch(self, *args, **kwargs):
- return super(RegisterView, self).dispatch(*args, **kwargs)
-
- def form_valid(self, form):
- if form.is_valid():
- user = form.save(False)
- user.is_active = False
- user.source = 'Register'
- user.save(True)
- site = get_current_site().domain
- sign = get_sha256(get_sha256(settings.SECRET_KEY + str(user.id)))
-
- if settings.DEBUG:
- site = '127.0.0.1:8000'
- path = reverse('account:result')
- url = "http://{site}{path}?type=validation&id={id}&sign={sign}".format(
- site=site, path=path, id=user.id, sign=sign)
-
- content = """
- 请点击下面链接验证您的邮箱
-
- {url}
-
- 再次感谢您!
-
- 如果上面链接无法打开,请将此链接复制至浏览器。
- {url}
- """.format(url=url)
- send_email(
- emailto=[
- user.email,
- ],
- title='验证您的电子邮箱',
- content=content)
-
- url = reverse('accounts:result') + \
- '?type=register&id=' + str(user.id)
- return HttpResponseRedirect(url)
- else:
- return self.render_to_response({
- 'form': form
- })
-
-
-class LogoutView(RedirectView):
- url = '/login/'
-
- @method_decorator(never_cache)
- def dispatch(self, request, *args, **kwargs):
- return super(LogoutView, self).dispatch(request, *args, **kwargs)
-
- def get(self, request, *args, **kwargs):
- logout(request)
- delete_sidebar_cache()
- return super(LogoutView, self).get(request, *args, **kwargs)
-
-
-class LoginView(FormView):
- form_class = LoginForm
- template_name = 'account/login.html'
- success_url = '/'
- redirect_field_name = REDIRECT_FIELD_NAME
- login_ttl = 2626560 # 一个月的时间
-
- @method_decorator(sensitive_post_parameters('password'))
- @method_decorator(csrf_protect)
- @method_decorator(never_cache)
- def dispatch(self, request, *args, **kwargs):
-
- return super(LoginView, self).dispatch(request, *args, **kwargs)
-
- def get_context_data(self, **kwargs):
- redirect_to = self.request.GET.get(self.redirect_field_name)
- if redirect_to is None:
- redirect_to = '/'
- kwargs['redirect_to'] = redirect_to
-
- return super(LoginView, self).get_context_data(**kwargs)
-
- def form_valid(self, form):
- form = AuthenticationForm(data=self.request.POST, request=self.request)
-
- if form.is_valid():
- delete_sidebar_cache()
- logger.info(self.redirect_field_name)
-
- auth.login(self.request, form.get_user())
- if self.request.POST.get("remember"):
- self.request.session.set_expiry(self.login_ttl)
- return super(LoginView, self).form_valid(form)
- # return HttpResponseRedirect('/')
- else:
- return self.render_to_response({
- 'form': form
- })
-
- def get_success_url(self):
-
- redirect_to = self.request.POST.get(self.redirect_field_name)
- if not url_has_allowed_host_and_scheme(
- url=redirect_to, allowed_hosts=[
- self.request.get_host()]):
- redirect_to = self.success_url
- return redirect_to
-
-
-def account_result(request):
- type = request.GET.get('type')
- id = request.GET.get('id')
-
- user = get_object_or_404(get_user_model(), id=id)
- logger.info(type)
- if user.is_active:
- return HttpResponseRedirect('/')
- if type and type in ['register', 'validation']:
- if type == 'register':
- content = '''
- 恭喜您注册成功,一封验证邮件已经发送到您的邮箱,请验证您的邮箱后登录本站。
- '''
- title = '注册成功'
- else:
- c_sign = get_sha256(get_sha256(settings.SECRET_KEY + str(user.id)))
- sign = request.GET.get('sign')
- if sign != c_sign:
- return HttpResponseForbidden()
- user.is_active = True
- user.save()
- content = '''
- 恭喜您已经成功的完成邮箱验证,您现在可以使用您的账号来登录本站。
- '''
- title = '验证成功'
- return render(request, 'account/result.html', {
- 'title': title,
- 'content': content
- })
- else:
- return HttpResponseRedirect('/')
-
-
-class ForgetPasswordView(FormView):
- form_class = ForgetPasswordForm
- template_name = 'account/forget_password.html'
-
- def form_valid(self, form):
- if form.is_valid():
- blog_user = BlogUser.objects.filter(email=form.cleaned_data.get("email")).get()
- blog_user.password = make_password(form.cleaned_data["new_password2"])
- blog_user.save()
- return HttpResponseRedirect('/login/')
- else:
- return self.render_to_response({'form': form})
-
-
-class ForgetPasswordEmailCode(View):
-
- def post(self, request: HttpRequest):
- form = ForgetPasswordCodeForm(request.POST)
- if not form.is_valid():
- return HttpResponse("错误的邮箱")
- to_email = form.cleaned_data["email"]
-
- code = generate_code()
- utils.send_verify_email(to_email, code)
- utils.set_code(to_email, code)
-
- return HttpResponse("ok")
diff --git a/src/DjangoBlog/blog/__init__.py b/src/DjangoBlog/blog/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/src/DjangoBlog/blog/admin.py b/src/DjangoBlog/blog/admin.py
deleted file mode 100644
index 69d7f8e..0000000
--- a/src/DjangoBlog/blog/admin.py
+++ /dev/null
@@ -1,114 +0,0 @@
-from django import forms
-from django.contrib import admin
-from django.contrib.auth import get_user_model
-from django.urls import reverse
-from django.utils.html import format_html
-from django.utils.translation import gettext_lazy as _
-
-# Register your models here.
-from .models import Article, Category, Tag, Links, SideBar, BlogSettings
-
-
-class ArticleForm(forms.ModelForm):
- # body = forms.CharField(widget=AdminPagedownWidget())
-
- class Meta:
- model = Article
- fields = '__all__'
-
-
-def makr_article_publish(modeladmin, request, queryset):
- queryset.update(status='p')
-
-
-def draft_article(modeladmin, request, queryset):
- queryset.update(status='d')
-
-
-def close_article_commentstatus(modeladmin, request, queryset):
- queryset.update(comment_status='c')
-
-
-def open_article_commentstatus(modeladmin, request, queryset):
- queryset.update(comment_status='o')
-
-
-makr_article_publish.short_description = _('Publish selected articles')
-draft_article.short_description = _('Draft selected articles')
-close_article_commentstatus.short_description = _('Close article comments')
-open_article_commentstatus.short_description = _('Open article comments')
-
-
-class ArticlelAdmin(admin.ModelAdmin):
- list_per_page = 20
- search_fields = ('body', 'title')
- form = ArticleForm
- list_display = (
- 'id',
- 'title',
- 'author',
- 'link_to_category',
- 'creation_time',
- 'views',
- 'status',
- 'type',
- 'article_order')
- list_display_links = ('id', 'title')
- list_filter = ('status', 'type', 'category')
- date_hierarchy = 'creation_time'
- filter_horizontal = ('tags',)
- exclude = ('creation_time', 'last_modify_time')
- view_on_site = True
- actions = [
- makr_article_publish,
- draft_article,
- close_article_commentstatus,
- open_article_commentstatus]
- raw_id_fields = ('author', 'category',)
-
- def link_to_category(self, obj):
- info = (obj.category._meta.app_label, obj.category._meta.model_name)
- link = reverse('admin:%s_%s_change' % info, args=(obj.category.id,))
- return format_html(u'%s' % (link, obj.category.name))
-
- link_to_category.short_description = _('category')
-
- def get_form(self, request, obj=None, **kwargs):
- form = super(ArticlelAdmin, self).get_form(request, obj, **kwargs)
- form.base_fields['author'].queryset = get_user_model(
- ).objects.filter(is_superuser=True)
- return form
-
- def save_model(self, request, obj, form, change):
- super(ArticlelAdmin, self).save_model(request, obj, form, change)
-
- def get_view_on_site_url(self, obj=None):
- if obj:
- url = obj.get_full_url()
- return url
- else:
- from djangoblog.utils import get_current_site
- site = get_current_site().domain
- return site
-
-
-class TagAdmin(admin.ModelAdmin):
- exclude = ('slug', 'last_mod_time', 'creation_time')
-
-
-class CategoryAdmin(admin.ModelAdmin):
- list_display = ('name', 'parent_category', 'index')
- exclude = ('slug', 'last_mod_time', 'creation_time')
-
-
-class LinksAdmin(admin.ModelAdmin):
- exclude = ('last_mod_time', 'creation_time')
-
-
-class SideBarAdmin(admin.ModelAdmin):
- list_display = ('name', 'content', 'is_enable', 'sequence')
- exclude = ('last_mod_time', 'creation_time')
-
-
-class BlogSettingsAdmin(admin.ModelAdmin):
- pass
diff --git a/src/DjangoBlog/blog/apps.py b/src/DjangoBlog/blog/apps.py
deleted file mode 100644
index 7930587..0000000
--- a/src/DjangoBlog/blog/apps.py
+++ /dev/null
@@ -1,5 +0,0 @@
-from django.apps import AppConfig
-
-
-class BlogConfig(AppConfig):
- name = 'blog'
diff --git a/src/DjangoBlog/blog/context_processors.py b/src/DjangoBlog/blog/context_processors.py
deleted file mode 100644
index 73e3088..0000000
--- a/src/DjangoBlog/blog/context_processors.py
+++ /dev/null
@@ -1,43 +0,0 @@
-import logging
-
-from django.utils import timezone
-
-from djangoblog.utils import cache, get_blog_setting
-from .models import Category, Article
-
-logger = logging.getLogger(__name__)
-
-
-def seo_processor(requests):
- key = 'seo_processor'
- value = cache.get(key)
- if value:
- return value
- else:
- logger.info('set processor cache.')
- setting = get_blog_setting()
- value = {
- 'SITE_NAME': setting.site_name,
- 'SHOW_GOOGLE_ADSENSE': setting.show_google_adsense,
- 'GOOGLE_ADSENSE_CODES': setting.google_adsense_codes,
- 'SITE_SEO_DESCRIPTION': setting.site_seo_description,
- 'SITE_DESCRIPTION': setting.site_description,
- 'SITE_KEYWORDS': setting.site_keywords,
- 'SITE_BASE_URL': requests.scheme + '://' + requests.get_host() + '/',
- 'ARTICLE_SUB_LENGTH': setting.article_sub_length,
- 'nav_category_list': Category.objects.all(),
- 'nav_pages': Article.objects.filter(
- type='p',
- status='p'),
- 'OPEN_SITE_COMMENT': setting.open_site_comment,
- 'BEIAN_CODE': setting.beian_code,
- 'ANALYTICS_CODE': setting.analytics_code,
- "BEIAN_CODE_GONGAN": setting.gongan_beiancode,
- "SHOW_GONGAN_CODE": setting.show_gongan_code,
- "CURRENT_YEAR": timezone.now().year,
- "GLOBAL_HEADER": setting.global_header,
- "GLOBAL_FOOTER": setting.global_footer,
- "COMMENT_NEED_REVIEW": setting.comment_need_review,
- }
- cache.set(key, value, 60 * 60 * 10)
- return value
diff --git a/src/DjangoBlog/blog/documents.py b/src/DjangoBlog/blog/documents.py
deleted file mode 100644
index 0f1db7b..0000000
--- a/src/DjangoBlog/blog/documents.py
+++ /dev/null
@@ -1,213 +0,0 @@
-import time
-
-import elasticsearch.client
-from django.conf import settings
-from elasticsearch_dsl import Document, InnerDoc, Date, Integer, Long, Text, Object, GeoPoint, Keyword, Boolean
-from elasticsearch_dsl.connections import connections
-
-from blog.models import Article
-
-ELASTICSEARCH_ENABLED = hasattr(settings, 'ELASTICSEARCH_DSL')
-
-if ELASTICSEARCH_ENABLED:
- connections.create_connection(
- hosts=[settings.ELASTICSEARCH_DSL['default']['hosts']])
- from elasticsearch import Elasticsearch
-
- es = Elasticsearch(settings.ELASTICSEARCH_DSL['default']['hosts'])
- from elasticsearch.client import IngestClient
-
- c = IngestClient(es)
- try:
- c.get_pipeline('geoip')
- except elasticsearch.exceptions.NotFoundError:
- c.put_pipeline('geoip', body='''{
- "description" : "Add geoip info",
- "processors" : [
- {
- "geoip" : {
- "field" : "ip"
- }
- }
- ]
- }''')
-
-
-class GeoIp(InnerDoc):
- continent_name = Keyword()
- country_iso_code = Keyword()
- country_name = Keyword()
- location = GeoPoint()
-
-
-class UserAgentBrowser(InnerDoc):
- Family = Keyword()
- Version = Keyword()
-
-
-class UserAgentOS(UserAgentBrowser):
- pass
-
-
-class UserAgentDevice(InnerDoc):
- Family = Keyword()
- Brand = Keyword()
- Model = Keyword()
-
-
-class UserAgent(InnerDoc):
- browser = Object(UserAgentBrowser, required=False)
- os = Object(UserAgentOS, required=False)
- device = Object(UserAgentDevice, required=False)
- string = Text()
- is_bot = Boolean()
-
-
-class ElapsedTimeDocument(Document):
- url = Keyword()
- time_taken = Long()
- log_datetime = Date()
- ip = Keyword()
- geoip = Object(GeoIp, required=False)
- useragent = Object(UserAgent, required=False)
-
- class Index:
- name = 'performance'
- settings = {
- "number_of_shards": 1,
- "number_of_replicas": 0
- }
-
- class Meta:
- doc_type = 'ElapsedTime'
-
-
-class ElaspedTimeDocumentManager:
- @staticmethod
- def build_index():
- from elasticsearch import Elasticsearch
- client = Elasticsearch(settings.ELASTICSEARCH_DSL['default']['hosts'])
- res = client.indices.exists(index="performance")
- if not res:
- ElapsedTimeDocument.init()
-
- @staticmethod
- def delete_index():
- from elasticsearch import Elasticsearch
- es = Elasticsearch(settings.ELASTICSEARCH_DSL['default']['hosts'])
- es.indices.delete(index='performance', ignore=[400, 404])
-
- @staticmethod
- def create(url, time_taken, log_datetime, useragent, ip):
- ElaspedTimeDocumentManager.build_index()
- ua = UserAgent()
- ua.browser = UserAgentBrowser()
- ua.browser.Family = useragent.browser.family
- ua.browser.Version = useragent.browser.version_string
-
- ua.os = UserAgentOS()
- ua.os.Family = useragent.os.family
- ua.os.Version = useragent.os.version_string
-
- ua.device = UserAgentDevice()
- ua.device.Family = useragent.device.family
- ua.device.Brand = useragent.device.brand
- ua.device.Model = useragent.device.model
- ua.string = useragent.ua_string
- ua.is_bot = useragent.is_bot
-
- doc = ElapsedTimeDocument(
- meta={
- 'id': int(
- round(
- time.time() *
- 1000))
- },
- url=url,
- time_taken=time_taken,
- log_datetime=log_datetime,
- useragent=ua, ip=ip)
- doc.save(pipeline="geoip")
-
-
-class ArticleDocument(Document):
- body = Text(analyzer='ik_max_word', search_analyzer='ik_smart')
- title = Text(analyzer='ik_max_word', search_analyzer='ik_smart')
- author = Object(properties={
- 'nickname': Text(analyzer='ik_max_word', search_analyzer='ik_smart'),
- 'id': Integer()
- })
- category = Object(properties={
- 'name': Text(analyzer='ik_max_word', search_analyzer='ik_smart'),
- 'id': Integer()
- })
- tags = Object(properties={
- 'name': Text(analyzer='ik_max_word', search_analyzer='ik_smart'),
- 'id': Integer()
- })
-
- pub_time = Date()
- status = Text()
- comment_status = Text()
- type = Text()
- views = Integer()
- article_order = Integer()
-
- class Index:
- name = 'blog'
- settings = {
- "number_of_shards": 1,
- "number_of_replicas": 0
- }
-
- class Meta:
- doc_type = 'Article'
-
-
-class ArticleDocumentManager():
-
- def __init__(self):
- self.create_index()
-
- def create_index(self):
- ArticleDocument.init()
-
- def delete_index(self):
- from elasticsearch import Elasticsearch
- es = Elasticsearch(settings.ELASTICSEARCH_DSL['default']['hosts'])
- es.indices.delete(index='blog', ignore=[400, 404])
-
- def convert_to_doc(self, articles):
- return [
- ArticleDocument(
- meta={
- 'id': article.id},
- body=article.body,
- title=article.title,
- author={
- 'nickname': article.author.username,
- 'id': article.author.id},
- category={
- 'name': article.category.name,
- 'id': article.category.id},
- tags=[
- {
- 'name': t.name,
- 'id': t.id} for t in article.tags.all()],
- pub_time=article.pub_time,
- status=article.status,
- comment_status=article.comment_status,
- type=article.type,
- views=article.views,
- article_order=article.article_order) for article in articles]
-
- def rebuild(self, articles=None):
- ArticleDocument.init()
- articles = articles if articles else Article.objects.all()
- docs = self.convert_to_doc(articles)
- for doc in docs:
- doc.save()
-
- def update_docs(self, docs):
- for doc in docs:
- doc.save()
diff --git a/src/DjangoBlog/blog/forms.py b/src/DjangoBlog/blog/forms.py
deleted file mode 100644
index 715be76..0000000
--- a/src/DjangoBlog/blog/forms.py
+++ /dev/null
@@ -1,19 +0,0 @@
-import logging
-
-from django import forms
-from haystack.forms import SearchForm
-
-logger = logging.getLogger(__name__)
-
-
-class BlogSearchForm(SearchForm):
- querydata = forms.CharField(required=True)
-
- def search(self):
- datas = super(BlogSearchForm, self).search()
- if not self.is_valid():
- return self.no_query_found()
-
- if self.cleaned_data['querydata']:
- logger.info(self.cleaned_data['querydata'])
- return datas
diff --git a/src/DjangoBlog/blog/management/__init__.py b/src/DjangoBlog/blog/management/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/src/DjangoBlog/blog/management/commands/__init__.py b/src/DjangoBlog/blog/management/commands/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/src/DjangoBlog/blog/management/commands/build_index.py b/src/DjangoBlog/blog/management/commands/build_index.py
deleted file mode 100644
index 3c4acd7..0000000
--- a/src/DjangoBlog/blog/management/commands/build_index.py
+++ /dev/null
@@ -1,18 +0,0 @@
-from django.core.management.base import BaseCommand
-
-from blog.documents import ElapsedTimeDocument, ArticleDocumentManager, ElaspedTimeDocumentManager, \
- ELASTICSEARCH_ENABLED
-
-
-# TODO 参数化
-class Command(BaseCommand):
- help = 'build search index'
-
- def handle(self, *args, **options):
- if ELASTICSEARCH_ENABLED:
- ElaspedTimeDocumentManager.build_index()
- manager = ElapsedTimeDocument()
- manager.init()
- manager = ArticleDocumentManager()
- manager.delete_index()
- manager.rebuild()
diff --git a/src/DjangoBlog/blog/management/commands/build_search_words.py b/src/DjangoBlog/blog/management/commands/build_search_words.py
deleted file mode 100644
index cfe7e0d..0000000
--- a/src/DjangoBlog/blog/management/commands/build_search_words.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from django.core.management.base import BaseCommand
-
-from blog.models import Tag, Category
-
-
-# TODO 参数化
-class Command(BaseCommand):
- help = 'build search words'
-
- def handle(self, *args, **options):
- datas = set([t.name for t in Tag.objects.all()] +
- [t.name for t in Category.objects.all()])
- print('\n'.join(datas))
diff --git a/src/DjangoBlog/blog/management/commands/clear_cache.py b/src/DjangoBlog/blog/management/commands/clear_cache.py
deleted file mode 100644
index 0d66172..0000000
--- a/src/DjangoBlog/blog/management/commands/clear_cache.py
+++ /dev/null
@@ -1,11 +0,0 @@
-from django.core.management.base import BaseCommand
-
-from djangoblog.utils import cache
-
-
-class Command(BaseCommand):
- help = 'clear the whole cache'
-
- def handle(self, *args, **options):
- cache.clear()
- self.stdout.write(self.style.SUCCESS('Cleared cache\n'))
diff --git a/src/DjangoBlog/blog/management/commands/create_testdata.py b/src/DjangoBlog/blog/management/commands/create_testdata.py
deleted file mode 100644
index 675d2ba..0000000
--- a/src/DjangoBlog/blog/management/commands/create_testdata.py
+++ /dev/null
@@ -1,40 +0,0 @@
-from django.contrib.auth import get_user_model
-from django.contrib.auth.hashers import make_password
-from django.core.management.base import BaseCommand
-
-from blog.models import Article, Tag, Category
-
-
-class Command(BaseCommand):
- help = 'create test datas'
-
- def handle(self, *args, **options):
- user = get_user_model().objects.get_or_create(
- email='test@test.com', username='测试用户', password=make_password('test!q@w#eTYU'))[0]
-
- pcategory = Category.objects.get_or_create(
- name='我是父类目', parent_category=None)[0]
-
- category = Category.objects.get_or_create(
- name='子类目', parent_category=pcategory)[0]
-
- category.save()
- basetag = Tag()
- basetag.name = "标签"
- basetag.save()
- for i in range(1, 20):
- article = Article.objects.get_or_create(
- category=category,
- title='nice title ' + str(i),
- body='nice content ' + str(i),
- author=user)[0]
- tag = Tag()
- tag.name = "标签" + str(i)
- tag.save()
- article.tags.add(tag)
- article.tags.add(basetag)
- article.save()
-
- from djangoblog.utils import cache
- cache.clear()
- self.stdout.write(self.style.SUCCESS('created test datas \n'))
diff --git a/src/DjangoBlog/blog/management/commands/ping_baidu.py b/src/DjangoBlog/blog/management/commands/ping_baidu.py
deleted file mode 100644
index 2c7fbdd..0000000
--- a/src/DjangoBlog/blog/management/commands/ping_baidu.py
+++ /dev/null
@@ -1,50 +0,0 @@
-from django.core.management.base import BaseCommand
-
-from djangoblog.spider_notify import SpiderNotify
-from djangoblog.utils import get_current_site
-from blog.models import Article, Tag, Category
-
-site = get_current_site().domain
-
-
-class Command(BaseCommand):
- help = 'notify baidu url'
-
- def add_arguments(self, parser):
- parser.add_argument(
- 'data_type',
- type=str,
- choices=[
- 'all',
- 'article',
- 'tag',
- 'category'],
- help='article : all article,tag : all tag,category: all category,all: All of these')
-
- def get_full_url(self, path):
- url = "https://{site}{path}".format(site=site, path=path)
- return url
-
- def handle(self, *args, **options):
- type = options['data_type']
- self.stdout.write('start get %s' % type)
-
- urls = []
- if type == 'article' or type == 'all':
- for article in Article.objects.filter(status='p'):
- urls.append(article.get_full_url())
- if type == 'tag' or type == 'all':
- for tag in Tag.objects.all():
- url = tag.get_absolute_url()
- urls.append(self.get_full_url(url))
- if type == 'category' or type == 'all':
- for category in Category.objects.all():
- url = category.get_absolute_url()
- urls.append(self.get_full_url(url))
-
- self.stdout.write(
- self.style.SUCCESS(
- 'start notify %d urls' %
- len(urls)))
- SpiderNotify.baidu_notify(urls)
- self.stdout.write(self.style.SUCCESS('finish notify'))
diff --git a/src/DjangoBlog/blog/management/commands/sync_user_avatar.py b/src/DjangoBlog/blog/management/commands/sync_user_avatar.py
deleted file mode 100644
index d0f4612..0000000
--- a/src/DjangoBlog/blog/management/commands/sync_user_avatar.py
+++ /dev/null
@@ -1,47 +0,0 @@
-import requests
-from django.core.management.base import BaseCommand
-from django.templatetags.static import static
-
-from djangoblog.utils import save_user_avatar
-from oauth.models import OAuthUser
-from oauth.oauthmanager import get_manager_by_type
-
-
-class Command(BaseCommand):
- help = 'sync user avatar'
-
- def test_picture(self, url):
- try:
- if requests.get(url, timeout=2).status_code == 200:
- return True
- except:
- pass
-
- def handle(self, *args, **options):
- static_url = static("../")
- users = OAuthUser.objects.all()
- self.stdout.write(f'开始同步{len(users)}个用户头像')
- for u in users:
- self.stdout.write(f'开始同步:{u.nickname}')
- url = u.picture
- if url:
- if url.startswith(static_url):
- if self.test_picture(url):
- continue
- else:
- if u.metadata:
- manage = get_manager_by_type(u.type)
- url = manage.get_picture(u.metadata)
- url = save_user_avatar(url)
- else:
- url = static('blog/img/avatar.png')
- else:
- url = save_user_avatar(url)
- else:
- url = static('blog/img/avatar.png')
- if url:
- self.stdout.write(
- f'结束同步:{u.nickname}.url:{url}')
- u.picture = url
- u.save()
- self.stdout.write('结束同步')
diff --git a/src/DjangoBlog/blog/middleware.py b/src/DjangoBlog/blog/middleware.py
deleted file mode 100644
index 94dd70c..0000000
--- a/src/DjangoBlog/blog/middleware.py
+++ /dev/null
@@ -1,42 +0,0 @@
-import logging
-import time
-
-from ipware import get_client_ip
-from user_agents import parse
-
-from blog.documents import ELASTICSEARCH_ENABLED, ElaspedTimeDocumentManager
-
-logger = logging.getLogger(__name__)
-
-
-class OnlineMiddleware(object):
- def __init__(self, get_response=None):
- self.get_response = get_response
- super().__init__()
-
- def __call__(self, request):
- ''' page render time '''
- start_time = time.time()
- response = self.get_response(request)
- http_user_agent = request.META.get('HTTP_USER_AGENT', '')
- ip, _ = get_client_ip(request)
- user_agent = parse(http_user_agent)
- if not response.streaming:
- try:
- cast_time = time.time() - start_time
- if ELASTICSEARCH_ENABLED:
- time_taken = round((cast_time) * 1000, 2)
- url = request.path
- from django.utils import timezone
- ElaspedTimeDocumentManager.create(
- url=url,
- time_taken=time_taken,
- log_datetime=timezone.now(),
- useragent=user_agent,
- ip=ip)
- response.content = response.content.replace(
- b'', str.encode(str(cast_time)[:5]))
- except Exception as e:
- logger.error("Error OnlineMiddleware: %s" % e)
-
- return response
diff --git a/src/DjangoBlog/blog/migrations/0001_initial.py b/src/DjangoBlog/blog/migrations/0001_initial.py
deleted file mode 100644
index 3d391b6..0000000
--- a/src/DjangoBlog/blog/migrations/0001_initial.py
+++ /dev/null
@@ -1,137 +0,0 @@
-# Generated by Django 4.1.7 on 2023-03-02 07:14
-
-from django.conf import settings
-from django.db import migrations, models
-import django.db.models.deletion
-import django.utils.timezone
-import mdeditor.fields
-
-
-class Migration(migrations.Migration):
-
- initial = True
-
- dependencies = [
- migrations.swappable_dependency(settings.AUTH_USER_MODEL),
- ]
-
- operations = [
- migrations.CreateModel(
- name='BlogSettings',
- fields=[
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('sitename', models.CharField(default='', max_length=200, verbose_name='网站名称')),
- ('site_description', models.TextField(default='', max_length=1000, verbose_name='网站描述')),
- ('site_seo_description', models.TextField(default='', max_length=1000, verbose_name='网站SEO描述')),
- ('site_keywords', models.TextField(default='', max_length=1000, verbose_name='网站关键字')),
- ('article_sub_length', models.IntegerField(default=300, verbose_name='文章摘要长度')),
- ('sidebar_article_count', models.IntegerField(default=10, verbose_name='侧边栏文章数目')),
- ('sidebar_comment_count', models.IntegerField(default=5, verbose_name='侧边栏评论数目')),
- ('article_comment_count', models.IntegerField(default=5, verbose_name='文章页面默认显示评论数目')),
- ('show_google_adsense', models.BooleanField(default=False, verbose_name='是否显示谷歌广告')),
- ('google_adsense_codes', models.TextField(blank=True, default='', max_length=2000, null=True, verbose_name='广告内容')),
- ('open_site_comment', models.BooleanField(default=True, verbose_name='是否打开网站评论功能')),
- ('beiancode', models.CharField(blank=True, default='', max_length=2000, null=True, verbose_name='备案号')),
- ('analyticscode', models.TextField(default='', max_length=1000, verbose_name='网站统计代码')),
- ('show_gongan_code', models.BooleanField(default=False, verbose_name='是否显示公安备案号')),
- ('gongan_beiancode', models.TextField(blank=True, default='', max_length=2000, null=True, verbose_name='公安备案号')),
- ],
- options={
- 'verbose_name': '网站配置',
- 'verbose_name_plural': '网站配置',
- },
- ),
- migrations.CreateModel(
- name='Links',
- fields=[
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('name', models.CharField(max_length=30, unique=True, verbose_name='链接名称')),
- ('link', models.URLField(verbose_name='链接地址')),
- ('sequence', models.IntegerField(unique=True, verbose_name='排序')),
- ('is_enable', models.BooleanField(default=True, verbose_name='是否显示')),
- ('show_type', models.CharField(choices=[('i', '首页'), ('l', '列表页'), ('p', '文章页面'), ('a', '全站'), ('s', '友情链接页面')], default='i', max_length=1, verbose_name='显示类型')),
- ('created_time', models.DateTimeField(default=django.utils.timezone.now, verbose_name='创建时间')),
- ('last_mod_time', models.DateTimeField(default=django.utils.timezone.now, verbose_name='修改时间')),
- ],
- options={
- 'verbose_name': '友情链接',
- 'verbose_name_plural': '友情链接',
- 'ordering': ['sequence'],
- },
- ),
- migrations.CreateModel(
- name='SideBar',
- fields=[
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('name', models.CharField(max_length=100, verbose_name='标题')),
- ('content', models.TextField(verbose_name='内容')),
- ('sequence', models.IntegerField(unique=True, verbose_name='排序')),
- ('is_enable', models.BooleanField(default=True, verbose_name='是否启用')),
- ('created_time', models.DateTimeField(default=django.utils.timezone.now, verbose_name='创建时间')),
- ('last_mod_time', models.DateTimeField(default=django.utils.timezone.now, verbose_name='修改时间')),
- ],
- options={
- 'verbose_name': '侧边栏',
- 'verbose_name_plural': '侧边栏',
- 'ordering': ['sequence'],
- },
- ),
- migrations.CreateModel(
- name='Tag',
- fields=[
- ('id', models.AutoField(primary_key=True, serialize=False)),
- ('created_time', models.DateTimeField(default=django.utils.timezone.now, verbose_name='创建时间')),
- ('last_mod_time', models.DateTimeField(default=django.utils.timezone.now, verbose_name='修改时间')),
- ('name', models.CharField(max_length=30, unique=True, verbose_name='标签名')),
- ('slug', models.SlugField(blank=True, default='no-slug', max_length=60)),
- ],
- options={
- 'verbose_name': '标签',
- 'verbose_name_plural': '标签',
- 'ordering': ['name'],
- },
- ),
- migrations.CreateModel(
- name='Category',
- fields=[
- ('id', models.AutoField(primary_key=True, serialize=False)),
- ('created_time', models.DateTimeField(default=django.utils.timezone.now, verbose_name='创建时间')),
- ('last_mod_time', models.DateTimeField(default=django.utils.timezone.now, verbose_name='修改时间')),
- ('name', models.CharField(max_length=30, unique=True, verbose_name='分类名')),
- ('slug', models.SlugField(blank=True, default='no-slug', max_length=60)),
- ('index', models.IntegerField(default=0, verbose_name='权重排序-越大越靠前')),
- ('parent_category', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='blog.category', verbose_name='父级分类')),
- ],
- options={
- 'verbose_name': '分类',
- 'verbose_name_plural': '分类',
- 'ordering': ['-index'],
- },
- ),
- migrations.CreateModel(
- name='Article',
- fields=[
- ('id', models.AutoField(primary_key=True, serialize=False)),
- ('created_time', models.DateTimeField(default=django.utils.timezone.now, verbose_name='创建时间')),
- ('last_mod_time', models.DateTimeField(default=django.utils.timezone.now, verbose_name='修改时间')),
- ('title', models.CharField(max_length=200, unique=True, verbose_name='标题')),
- ('body', mdeditor.fields.MDTextField(verbose_name='正文')),
- ('pub_time', models.DateTimeField(default=django.utils.timezone.now, verbose_name='发布时间')),
- ('status', models.CharField(choices=[('d', '草稿'), ('p', '发表')], default='p', max_length=1, verbose_name='文章状态')),
- ('comment_status', models.CharField(choices=[('o', '打开'), ('c', '关闭')], default='o', max_length=1, verbose_name='评论状态')),
- ('type', models.CharField(choices=[('a', '文章'), ('p', '页面')], default='a', max_length=1, verbose_name='类型')),
- ('views', models.PositiveIntegerField(default=0, verbose_name='浏览量')),
- ('article_order', models.IntegerField(default=0, verbose_name='排序,数字越大越靠前')),
- ('show_toc', models.BooleanField(default=False, verbose_name='是否显示toc目录')),
- ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='作者')),
- ('category', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='blog.category', verbose_name='分类')),
- ('tags', models.ManyToManyField(blank=True, to='blog.tag', verbose_name='标签集合')),
- ],
- options={
- 'verbose_name': '文章',
- 'verbose_name_plural': '文章',
- 'ordering': ['-article_order', '-pub_time'],
- 'get_latest_by': 'id',
- },
- ),
- ]
diff --git a/src/DjangoBlog/blog/migrations/0002_blogsettings_global_footer_and_more.py b/src/DjangoBlog/blog/migrations/0002_blogsettings_global_footer_and_more.py
deleted file mode 100644
index adbaa36..0000000
--- a/src/DjangoBlog/blog/migrations/0002_blogsettings_global_footer_and_more.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# Generated by Django 4.1.7 on 2023-03-29 06:08
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
- dependencies = [
- ('blog', '0001_initial'),
- ]
-
- operations = [
- migrations.AddField(
- model_name='blogsettings',
- name='global_footer',
- field=models.TextField(blank=True, default='', null=True, verbose_name='公共尾部'),
- ),
- migrations.AddField(
- model_name='blogsettings',
- name='global_header',
- field=models.TextField(blank=True, default='', null=True, verbose_name='公共头部'),
- ),
- ]
diff --git a/src/DjangoBlog/blog/migrations/0003_blogsettings_comment_need_review.py b/src/DjangoBlog/blog/migrations/0003_blogsettings_comment_need_review.py
deleted file mode 100644
index e9f5502..0000000
--- a/src/DjangoBlog/blog/migrations/0003_blogsettings_comment_need_review.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# Generated by Django 4.2.1 on 2023-05-09 07:45
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
- dependencies = [
- ('blog', '0002_blogsettings_global_footer_and_more'),
- ]
-
- operations = [
- migrations.AddField(
- model_name='blogsettings',
- name='comment_need_review',
- field=models.BooleanField(default=False, verbose_name='评论是否需要审核'),
- ),
- ]
diff --git a/src/DjangoBlog/blog/migrations/0004_rename_analyticscode_blogsettings_analytics_code_and_more.py b/src/DjangoBlog/blog/migrations/0004_rename_analyticscode_blogsettings_analytics_code_and_more.py
deleted file mode 100644
index ceb1398..0000000
--- a/src/DjangoBlog/blog/migrations/0004_rename_analyticscode_blogsettings_analytics_code_and_more.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# Generated by Django 4.2.1 on 2023-05-09 07:51
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
- dependencies = [
- ('blog', '0003_blogsettings_comment_need_review'),
- ]
-
- operations = [
- migrations.RenameField(
- model_name='blogsettings',
- old_name='analyticscode',
- new_name='analytics_code',
- ),
- migrations.RenameField(
- model_name='blogsettings',
- old_name='beiancode',
- new_name='beian_code',
- ),
- migrations.RenameField(
- model_name='blogsettings',
- old_name='sitename',
- new_name='site_name',
- ),
- ]
diff --git a/src/DjangoBlog/blog/migrations/0005_alter_article_options_alter_category_options_and_more.py b/src/DjangoBlog/blog/migrations/0005_alter_article_options_alter_category_options_and_more.py
deleted file mode 100644
index d08e853..0000000
--- a/src/DjangoBlog/blog/migrations/0005_alter_article_options_alter_category_options_and_more.py
+++ /dev/null
@@ -1,300 +0,0 @@
-# Generated by Django 4.2.5 on 2023-09-06 13:13
-
-from django.conf import settings
-from django.db import migrations, models
-import django.db.models.deletion
-import django.utils.timezone
-import mdeditor.fields
-
-
-class Migration(migrations.Migration):
-
- dependencies = [
- migrations.swappable_dependency(settings.AUTH_USER_MODEL),
- ('blog', '0004_rename_analyticscode_blogsettings_analytics_code_and_more'),
- ]
-
- operations = [
- migrations.AlterModelOptions(
- name='article',
- options={'get_latest_by': 'id', 'ordering': ['-article_order', '-pub_time'], 'verbose_name': 'article', 'verbose_name_plural': 'article'},
- ),
- migrations.AlterModelOptions(
- name='category',
- options={'ordering': ['-index'], 'verbose_name': 'category', 'verbose_name_plural': 'category'},
- ),
- migrations.AlterModelOptions(
- name='links',
- options={'ordering': ['sequence'], 'verbose_name': 'link', 'verbose_name_plural': 'link'},
- ),
- migrations.AlterModelOptions(
- name='sidebar',
- options={'ordering': ['sequence'], 'verbose_name': 'sidebar', 'verbose_name_plural': 'sidebar'},
- ),
- migrations.AlterModelOptions(
- name='tag',
- options={'ordering': ['name'], 'verbose_name': 'tag', 'verbose_name_plural': 'tag'},
- ),
- migrations.RemoveField(
- model_name='article',
- name='created_time',
- ),
- migrations.RemoveField(
- model_name='article',
- name='last_mod_time',
- ),
- migrations.RemoveField(
- model_name='category',
- name='created_time',
- ),
- migrations.RemoveField(
- model_name='category',
- name='last_mod_time',
- ),
- migrations.RemoveField(
- model_name='links',
- name='created_time',
- ),
- migrations.RemoveField(
- model_name='sidebar',
- name='created_time',
- ),
- migrations.RemoveField(
- model_name='tag',
- name='created_time',
- ),
- migrations.RemoveField(
- model_name='tag',
- name='last_mod_time',
- ),
- migrations.AddField(
- model_name='article',
- name='creation_time',
- field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='creation time'),
- ),
- migrations.AddField(
- model_name='article',
- name='last_modify_time',
- field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='modify time'),
- ),
- migrations.AddField(
- model_name='category',
- name='creation_time',
- field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='creation time'),
- ),
- migrations.AddField(
- model_name='category',
- name='last_modify_time',
- field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='modify time'),
- ),
- migrations.AddField(
- model_name='links',
- name='creation_time',
- field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='creation time'),
- ),
- migrations.AddField(
- model_name='sidebar',
- name='creation_time',
- field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='creation time'),
- ),
- migrations.AddField(
- model_name='tag',
- name='creation_time',
- field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='creation time'),
- ),
- migrations.AddField(
- model_name='tag',
- name='last_modify_time',
- field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='modify time'),
- ),
- migrations.AlterField(
- model_name='article',
- name='article_order',
- field=models.IntegerField(default=0, verbose_name='order'),
- ),
- migrations.AlterField(
- model_name='article',
- name='author',
- field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='author'),
- ),
- migrations.AlterField(
- model_name='article',
- name='body',
- field=mdeditor.fields.MDTextField(verbose_name='body'),
- ),
- migrations.AlterField(
- model_name='article',
- name='category',
- field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='blog.category', verbose_name='category'),
- ),
- migrations.AlterField(
- model_name='article',
- name='comment_status',
- field=models.CharField(choices=[('o', 'Open'), ('c', 'Close')], default='o', max_length=1, verbose_name='comment status'),
- ),
- migrations.AlterField(
- model_name='article',
- name='pub_time',
- field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='publish time'),
- ),
- migrations.AlterField(
- model_name='article',
- name='show_toc',
- field=models.BooleanField(default=False, verbose_name='show toc'),
- ),
- migrations.AlterField(
- model_name='article',
- name='status',
- field=models.CharField(choices=[('d', 'Draft'), ('p', 'Published')], default='p', max_length=1, verbose_name='status'),
- ),
- migrations.AlterField(
- model_name='article',
- name='tags',
- field=models.ManyToManyField(blank=True, to='blog.tag', verbose_name='tag'),
- ),
- migrations.AlterField(
- model_name='article',
- name='title',
- field=models.CharField(max_length=200, unique=True, verbose_name='title'),
- ),
- migrations.AlterField(
- model_name='article',
- name='type',
- field=models.CharField(choices=[('a', 'Article'), ('p', 'Page')], default='a', max_length=1, verbose_name='type'),
- ),
- migrations.AlterField(
- model_name='article',
- name='views',
- field=models.PositiveIntegerField(default=0, verbose_name='views'),
- ),
- migrations.AlterField(
- model_name='blogsettings',
- name='article_comment_count',
- field=models.IntegerField(default=5, verbose_name='article comment count'),
- ),
- migrations.AlterField(
- model_name='blogsettings',
- name='article_sub_length',
- field=models.IntegerField(default=300, verbose_name='article sub length'),
- ),
- migrations.AlterField(
- model_name='blogsettings',
- name='google_adsense_codes',
- field=models.TextField(blank=True, default='', max_length=2000, null=True, verbose_name='adsense code'),
- ),
- migrations.AlterField(
- model_name='blogsettings',
- name='open_site_comment',
- field=models.BooleanField(default=True, verbose_name='open site comment'),
- ),
- migrations.AlterField(
- model_name='blogsettings',
- name='show_google_adsense',
- field=models.BooleanField(default=False, verbose_name='show adsense'),
- ),
- migrations.AlterField(
- model_name='blogsettings',
- name='sidebar_article_count',
- field=models.IntegerField(default=10, verbose_name='sidebar article count'),
- ),
- migrations.AlterField(
- model_name='blogsettings',
- name='sidebar_comment_count',
- field=models.IntegerField(default=5, verbose_name='sidebar comment count'),
- ),
- migrations.AlterField(
- model_name='blogsettings',
- name='site_description',
- field=models.TextField(default='', max_length=1000, verbose_name='site description'),
- ),
- migrations.AlterField(
- model_name='blogsettings',
- name='site_keywords',
- field=models.TextField(default='', max_length=1000, verbose_name='site keywords'),
- ),
- migrations.AlterField(
- model_name='blogsettings',
- name='site_name',
- field=models.CharField(default='', max_length=200, verbose_name='site name'),
- ),
- migrations.AlterField(
- model_name='blogsettings',
- name='site_seo_description',
- field=models.TextField(default='', max_length=1000, verbose_name='site seo description'),
- ),
- migrations.AlterField(
- model_name='category',
- name='index',
- field=models.IntegerField(default=0, verbose_name='index'),
- ),
- migrations.AlterField(
- model_name='category',
- name='name',
- field=models.CharField(max_length=30, unique=True, verbose_name='category name'),
- ),
- migrations.AlterField(
- model_name='category',
- name='parent_category',
- field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='blog.category', verbose_name='parent category'),
- ),
- migrations.AlterField(
- model_name='links',
- name='is_enable',
- field=models.BooleanField(default=True, verbose_name='is show'),
- ),
- migrations.AlterField(
- model_name='links',
- name='last_mod_time',
- field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='modify time'),
- ),
- migrations.AlterField(
- model_name='links',
- name='link',
- field=models.URLField(verbose_name='link'),
- ),
- migrations.AlterField(
- model_name='links',
- name='name',
- field=models.CharField(max_length=30, unique=True, verbose_name='link name'),
- ),
- migrations.AlterField(
- model_name='links',
- name='sequence',
- field=models.IntegerField(unique=True, verbose_name='order'),
- ),
- migrations.AlterField(
- model_name='links',
- name='show_type',
- field=models.CharField(choices=[('i', 'index'), ('l', 'list'), ('p', 'post'), ('a', 'all'), ('s', 'slide')], default='i', max_length=1, verbose_name='show type'),
- ),
- migrations.AlterField(
- model_name='sidebar',
- name='content',
- field=models.TextField(verbose_name='content'),
- ),
- migrations.AlterField(
- model_name='sidebar',
- name='is_enable',
- field=models.BooleanField(default=True, verbose_name='is enable'),
- ),
- migrations.AlterField(
- model_name='sidebar',
- name='last_mod_time',
- field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='modify time'),
- ),
- migrations.AlterField(
- model_name='sidebar',
- name='name',
- field=models.CharField(max_length=100, verbose_name='title'),
- ),
- migrations.AlterField(
- model_name='sidebar',
- name='sequence',
- field=models.IntegerField(unique=True, verbose_name='order'),
- ),
- migrations.AlterField(
- model_name='tag',
- name='name',
- field=models.CharField(max_length=30, unique=True, verbose_name='tag name'),
- ),
- ]
diff --git a/src/DjangoBlog/blog/migrations/0006_alter_blogsettings_options.py b/src/DjangoBlog/blog/migrations/0006_alter_blogsettings_options.py
deleted file mode 100644
index e36feb4..0000000
--- a/src/DjangoBlog/blog/migrations/0006_alter_blogsettings_options.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# Generated by Django 4.2.7 on 2024-01-26 02:41
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
- dependencies = [
- ('blog', '0005_alter_article_options_alter_category_options_and_more'),
- ]
-
- operations = [
- migrations.AlterModelOptions(
- name='blogsettings',
- options={'verbose_name': 'Website configuration', 'verbose_name_plural': 'Website configuration'},
- ),
- ]
diff --git a/src/DjangoBlog/blog/migrations/__init__.py b/src/DjangoBlog/blog/migrations/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/src/DjangoBlog/blog/models.py b/src/DjangoBlog/blog/models.py
deleted file mode 100644
index 083788b..0000000
--- a/src/DjangoBlog/blog/models.py
+++ /dev/null
@@ -1,376 +0,0 @@
-import logging
-import re
-from abc import abstractmethod
-
-from django.conf import settings
-from django.core.exceptions import ValidationError
-from django.db import models
-from django.urls import reverse
-from django.utils.timezone import now
-from django.utils.translation import gettext_lazy as _
-from mdeditor.fields import MDTextField
-from uuslug import slugify
-
-from djangoblog.utils import cache_decorator, cache
-from djangoblog.utils import get_current_site
-
-logger = logging.getLogger(__name__)
-
-
-class LinkShowType(models.TextChoices):
- I = ('i', _('index'))
- L = ('l', _('list'))
- P = ('p', _('post'))
- A = ('a', _('all'))
- S = ('s', _('slide'))
-
-
-class BaseModel(models.Model):
- id = models.AutoField(primary_key=True)
- creation_time = models.DateTimeField(_('creation time'), default=now)
- last_modify_time = models.DateTimeField(_('modify time'), default=now)
-
- def save(self, *args, **kwargs):
- is_update_views = isinstance(
- self,
- Article) and 'update_fields' in kwargs and kwargs['update_fields'] == ['views']
- if is_update_views:
- Article.objects.filter(pk=self.pk).update(views=self.views)
- else:
- if 'slug' in self.__dict__:
- slug = getattr(
- self, 'title') if 'title' in self.__dict__ else getattr(
- self, 'name')
- setattr(self, 'slug', slugify(slug))
- super().save(*args, **kwargs)
-
- def get_full_url(self):
- site = get_current_site().domain
- url = "https://{site}{path}".format(site=site,
- path=self.get_absolute_url())
- return url
-
- class Meta:
- abstract = True
-
- @abstractmethod
- def get_absolute_url(self):
- pass
-
-
-class Article(BaseModel):
- """文章"""
- STATUS_CHOICES = (
- ('d', _('Draft')),
- ('p', _('Published')),
- )
- COMMENT_STATUS = (
- ('o', _('Open')),
- ('c', _('Close')),
- )
- TYPE = (
- ('a', _('Article')),
- ('p', _('Page')),
- )
- title = models.CharField(_('title'), max_length=200, unique=True)
- body = MDTextField(_('body'))
- pub_time = models.DateTimeField(
- _('publish time'), blank=False, null=False, default=now)
- status = models.CharField(
- _('status'),
- max_length=1,
- choices=STATUS_CHOICES,
- default='p')
- comment_status = models.CharField(
- _('comment status'),
- max_length=1,
- choices=COMMENT_STATUS,
- default='o')
- type = models.CharField(_('type'), max_length=1, choices=TYPE, default='a')
- views = models.PositiveIntegerField(_('views'), default=0)
- author = models.ForeignKey(
- settings.AUTH_USER_MODEL,
- verbose_name=_('author'),
- blank=False,
- null=False,
- on_delete=models.CASCADE)
- article_order = models.IntegerField(
- _('order'), blank=False, null=False, default=0)
- show_toc = models.BooleanField(_('show toc'), blank=False, null=False, default=False)
- category = models.ForeignKey(
- 'Category',
- verbose_name=_('category'),
- on_delete=models.CASCADE,
- blank=False,
- null=False)
- tags = models.ManyToManyField('Tag', verbose_name=_('tag'), blank=True)
-
- def body_to_string(self):
- return self.body
-
- def __str__(self):
- return self.title
-
- class Meta:
- ordering = ['-article_order', '-pub_time']
- verbose_name = _('article')
- verbose_name_plural = verbose_name
- get_latest_by = 'id'
-
- def get_absolute_url(self):
- return reverse('blog:detailbyid', kwargs={
- 'article_id': self.id,
- 'year': self.creation_time.year,
- 'month': self.creation_time.month,
- 'day': self.creation_time.day
- })
-
- @cache_decorator(60 * 60 * 10)
- def get_category_tree(self):
- tree = self.category.get_category_tree()
- names = list(map(lambda c: (c.name, c.get_absolute_url()), tree))
-
- return names
-
- def save(self, *args, **kwargs):
- super().save(*args, **kwargs)
-
- def viewed(self):
- self.views += 1
- self.save(update_fields=['views'])
-
- def comment_list(self):
- cache_key = 'article_comments_{id}'.format(id=self.id)
- value = cache.get(cache_key)
- if value:
- logger.info('get article comments:{id}'.format(id=self.id))
- return value
- else:
- comments = self.comment_set.filter(is_enable=True).order_by('-id')
- cache.set(cache_key, comments, 60 * 100)
- logger.info('set article comments:{id}'.format(id=self.id))
- return comments
-
- def get_admin_url(self):
- info = (self._meta.app_label, self._meta.model_name)
- return reverse('admin:%s_%s_change' % info, args=(self.pk,))
-
- @cache_decorator(expiration=60 * 100)
- def next_article(self):
- # 下一篇
- return Article.objects.filter(
- id__gt=self.id, status='p').order_by('id').first()
-
- @cache_decorator(expiration=60 * 100)
- def prev_article(self):
- # 前一篇
- return Article.objects.filter(id__lt=self.id, status='p').first()
-
- def get_first_image_url(self):
- """
- Get the first image url from article.body.
- :return:
- """
- match = re.search(r'!\[.*?\]\((.+?)\)', self.body)
- if match:
- return match.group(1)
- return ""
-
-
-class Category(BaseModel):
- """文章分类"""
- name = models.CharField(_('category name'), max_length=30, unique=True)
- parent_category = models.ForeignKey(
- 'self',
- verbose_name=_('parent category'),
- blank=True,
- null=True,
- on_delete=models.CASCADE)
- slug = models.SlugField(default='no-slug', max_length=60, blank=True)
- index = models.IntegerField(default=0, verbose_name=_('index'))
-
- class Meta:
- ordering = ['-index']
- verbose_name = _('category')
- verbose_name_plural = verbose_name
-
- def get_absolute_url(self):
- return reverse(
- 'blog:category_detail', kwargs={
- 'category_name': self.slug})
-
- def __str__(self):
- return self.name
-
- @cache_decorator(60 * 60 * 10)
- def get_category_tree(self):
- """
- 递归获得分类目录的父级
- :return:
- """
- categorys = []
-
- def parse(category):
- categorys.append(category)
- if category.parent_category:
- parse(category.parent_category)
-
- parse(self)
- return categorys
-
- @cache_decorator(60 * 60 * 10)
- def get_sub_categorys(self):
- """
- 获得当前分类目录所有子集
- :return:
- """
- categorys = []
- all_categorys = Category.objects.all()
-
- def parse(category):
- if category not in categorys:
- categorys.append(category)
- childs = all_categorys.filter(parent_category=category)
- for child in childs:
- if category not in categorys:
- categorys.append(child)
- parse(child)
-
- parse(self)
- return categorys
-
-
-class Tag(BaseModel):
- """文章标签"""
- name = models.CharField(_('tag name'), max_length=30, unique=True)
- slug = models.SlugField(default='no-slug', max_length=60, blank=True)
-
- def __str__(self):
- return self.name
-
- def get_absolute_url(self):
- return reverse('blog:tag_detail', kwargs={'tag_name': self.slug})
-
- @cache_decorator(60 * 60 * 10)
- def get_article_count(self):
- return Article.objects.filter(tags__name=self.name).distinct().count()
-
- class Meta:
- ordering = ['name']
- verbose_name = _('tag')
- verbose_name_plural = verbose_name
-
-
-class Links(models.Model):
- """友情链接"""
-
- name = models.CharField(_('link name'), max_length=30, unique=True)
- link = models.URLField(_('link'))
- sequence = models.IntegerField(_('order'), unique=True)
- is_enable = models.BooleanField(
- _('is show'), default=True, blank=False, null=False)
- show_type = models.CharField(
- _('show type'),
- max_length=1,
- choices=LinkShowType.choices,
- default=LinkShowType.I)
- creation_time = models.DateTimeField(_('creation time'), default=now)
- last_mod_time = models.DateTimeField(_('modify time'), default=now)
-
- class Meta:
- ordering = ['sequence']
- verbose_name = _('link')
- verbose_name_plural = verbose_name
-
- def __str__(self):
- return self.name
-
-
-class SideBar(models.Model):
- """侧边栏,可以展示一些html内容"""
- name = models.CharField(_('title'), max_length=100)
- content = models.TextField(_('content'))
- sequence = models.IntegerField(_('order'), unique=True)
- is_enable = models.BooleanField(_('is enable'), default=True)
- creation_time = models.DateTimeField(_('creation time'), default=now)
- last_mod_time = models.DateTimeField(_('modify time'), default=now)
-
- class Meta:
- ordering = ['sequence']
- verbose_name = _('sidebar')
- verbose_name_plural = verbose_name
-
- def __str__(self):
- return self.name
-
-
-class BlogSettings(models.Model):
- """blog的配置"""
- site_name = models.CharField(
- _('site name'),
- max_length=200,
- null=False,
- blank=False,
- default='')
- site_description = models.TextField(
- _('site description'),
- max_length=1000,
- null=False,
- blank=False,
- default='')
- site_seo_description = models.TextField(
- _('site seo description'), max_length=1000, null=False, blank=False, default='')
- site_keywords = models.TextField(
- _('site keywords'),
- max_length=1000,
- null=False,
- blank=False,
- default='')
- article_sub_length = models.IntegerField(_('article sub length'), default=300)
- sidebar_article_count = models.IntegerField(_('sidebar article count'), default=10)
- sidebar_comment_count = models.IntegerField(_('sidebar comment count'), default=5)
- article_comment_count = models.IntegerField(_('article comment count'), default=5)
- show_google_adsense = models.BooleanField(_('show adsense'), default=False)
- google_adsense_codes = models.TextField(
- _('adsense code'), max_length=2000, null=True, blank=True, default='')
- open_site_comment = models.BooleanField(_('open site comment'), default=True)
- global_header = models.TextField("公共头部", null=True, blank=True, default='')
- global_footer = models.TextField("公共尾部", null=True, blank=True, default='')
- beian_code = models.CharField(
- '备案号',
- max_length=2000,
- null=True,
- blank=True,
- default='')
- analytics_code = models.TextField(
- "网站统计代码",
- max_length=1000,
- null=False,
- blank=False,
- default='')
- show_gongan_code = models.BooleanField(
- '是否显示公安备案号', default=False, null=False)
- gongan_beiancode = models.TextField(
- '公安备案号',
- max_length=2000,
- null=True,
- blank=True,
- default='')
- comment_need_review = models.BooleanField(
- '评论是否需要审核', default=False, null=False)
-
- class Meta:
- verbose_name = _('Website configuration')
- verbose_name_plural = verbose_name
-
- def __str__(self):
- return self.site_name
-
- def clean(self):
- if BlogSettings.objects.exclude(id=self.id).count():
- raise ValidationError(_('There can only be one configuration'))
-
- def save(self, *args, **kwargs):
- super().save(*args, **kwargs)
- from djangoblog.utils import cache
- cache.clear()
diff --git a/src/DjangoBlog/blog/search_indexes.py b/src/DjangoBlog/blog/search_indexes.py
deleted file mode 100644
index 7f1dfac..0000000
--- a/src/DjangoBlog/blog/search_indexes.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from haystack import indexes
-
-from blog.models import Article
-
-
-class ArticleIndex(indexes.SearchIndex, indexes.Indexable):
- text = indexes.CharField(document=True, use_template=True)
-
- def get_model(self):
- return Article
-
- def index_queryset(self, using=None):
- return self.get_model().objects.filter(status='p')
diff --git a/src/DjangoBlog/blog/static/account/css/account.css b/src/DjangoBlog/blog/static/account/css/account.css
deleted file mode 100644
index 7d4cec7..0000000
--- a/src/DjangoBlog/blog/static/account/css/account.css
+++ /dev/null
@@ -1,9 +0,0 @@
-.button {
- border: none;
- padding: 4px 80px;
- text-align: center;
- text-decoration: none;
- display: inline-block;
- font-size: 16px;
- margin: 4px 2px;
-}
\ No newline at end of file
diff --git a/src/DjangoBlog/blog/static/account/js/account.js b/src/DjangoBlog/blog/static/account/js/account.js
deleted file mode 100644
index f1a8771..0000000
--- a/src/DjangoBlog/blog/static/account/js/account.js
+++ /dev/null
@@ -1,47 +0,0 @@
-let wait = 60;
-
-function time(o) {
- if (wait == 0) {
- o.removeAttribute("disabled");
- o.value = "获取验证码";
- wait = 60
- return false
- } else {
- o.setAttribute("disabled", true);
- o.value = "重新发送(" + wait + ")";
- wait--;
- setTimeout(function () {
- time(o)
- },
- 1000)
- }
-}
-
-document.getElementById("btn").onclick = function () {
- let id_email = $("#id_email")
- let token = $("*[name='csrfmiddlewaretoken']").val()
- let ts = this
- let myErr = $("#myErr")
- $.ajax(
- {
- url: "/forget_password_code/",
- type: "POST",
- data: {
- "email": id_email.val(),
- "csrfmiddlewaretoken": token
- },
- success: function (result) {
- if (result != "ok") {
- myErr.remove()
- id_email.after("")
- return
- }
- myErr.remove()
- time(ts)
- },
- error: function (e) {
- alert("发送失败,请重试")
- }
- }
- );
-}
diff --git a/src/DjangoBlog/blog/static/assets/css/bootstrap.min.css b/src/DjangoBlog/blog/static/assets/css/bootstrap.min.css
deleted file mode 100644
index ed3905e..0000000
--- a/src/DjangoBlog/blog/static/assets/css/bootstrap.min.css
+++ /dev/null
@@ -1,6 +0,0 @@
-/*!
- * Bootstrap v3.3.7 (http://getbootstrap.com)
- * Copyright 2011-2016 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}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-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.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;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-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)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;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:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;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{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.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,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.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:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}
-/*# sourceMappingURL=bootstrap.min.css.map */
\ No newline at end of file
diff --git a/src/DjangoBlog/blog/static/assets/css/docs.min.css b/src/DjangoBlog/blog/static/assets/css/docs.min.css
deleted file mode 100644
index 3945197..0000000
--- a/src/DjangoBlog/blog/static/assets/css/docs.min.css
+++ /dev/null
@@ -1,11 +0,0 @@
-/*!
- * IE10 viewport hack for Surface/desktop Windows 8 bug
- * Copyright 2014-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */@-ms-viewport{width:device-width}@-o-viewport{width:device-width}@viewport{width:device-width}.hll{background-color:#ffc}.c{color:#999}.err{color:#A00;background-color:#FAA}.k{color:#069}.o{color:#555}.cm{color:#999}.cp{color:#099}.c1{color:#999}.cs{color:#999}.gd{background-color:#FCC;border:1px solid #C00}.ge{font-style:italic}.gr{color:red}.gh{color:#030}.gi{background-color:#CFC;border:1px solid #0C0}.go{color:#AAA}.gp{color:#009}.gu{color:#030}.gt{color:#9C6}.kc{color:#069}.kd{color:#069}.kn{color:#069}.kp{color:#069}.kr{color:#069}.kt{color:#078}.m{color:#F60}.s{color:#d44950}.na{color:#4f9fcf}.nb{color:#366}.nc{color:#0A8}.no{color:#360}.nd{color:#99F}.ni{color:#999}.ne{color:#C00}.nf{color:#C0F}.nl{color:#99F}.nn{color:#0CF}.nt{color:#2f6f9f}.nv{color:#033}.ow{color:#000}.w{color:#bbb}.mf{color:#F60}.mh{color:#F60}.mi{color:#F60}.mo{color:#F60}.sb{color:#C30}.sc{color:#C30}.sd{color:#C30;font-style:italic}.s2{color:#C30}.se{color:#C30}.sh{color:#C30}.si{color:#A00}.sx{color:#C30}.sr{color:#3AA}.s1{color:#C30}.ss{color:#FC3}.bp{color:#366}.vc{color:#033}.vg{color:#033}.vi{color:#033}.il{color:#F60}.css .nt+.nt,.css .o,.css .o+.nt{color:#999}.select2-container{position:relative;display:inline-block;zoom:1;*display:inline;vertical-align:top;padding:0;border:0}.select2-container:hover{border:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.select2-container,.select2-drop,.select2-search,.select2-search input{-moz-box-sizing:border-box;-ms-box-sizing:border-box;-webkit-box-sizing:border-box;-khtml-box-sizing:border-box;box-sizing:border-box}.select2-container .select2-choice{display:block;overflow:hidden;text-decoration:none;padding:4px 12px;margin:0;color:#333;text-shadow:0 1px 0 #fff;white-space:nowrap;font-family:Arial,Helvetica,sans-serif;font-weight:700;font-size:13px;cursor:default;height:18px;background-color:#f3f3f3;background-image:-moz-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f1f1f1));background-image:-webkit-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:-o-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:linear-gradient(to bottom,#f5f5f5,#f1f1f1);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff1f1f1', GradientType=0);-webkit-background-clip:padding;-moz-background-clip:padding;background-clip:padding;border:1px solid #dcdcdc;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;-moz-box-sizing:content-box;-ms-box-sizing:content-box;-webkit-box-sizing:content-box;-khtml-box-sizing:content-box;box-sizing:content-box}.select2-container .select2-choice:hover{color:#333;text-shadow:none;border-color:#c6c6c6;background-color:#f5f5f5;background-image:-moz-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f8f8f8),to(#f1f1f1));background-image:-webkit-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-o-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:linear-gradient(to bottom,#f8f8f8,#f1f1f1);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff8f8f8', endColorstr='#fff1f1f1', GradientType=0);-webkit-box-shadow:0 1px 1px rgba(0,0,0,.1);-moz-box-shadow:0 1px 1px rgba(0,0,0,.1);box-shadow:0 1px 1px rgba(0,0,0,.1);background-position:0 0;-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none;z-index:2}.select2-container-active .select2-choice:hover{border:1px solid #4D90FE}.select2-container.select2-drop-above .select2-choice{background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0,#eee),color-stop(.9,#fff));background-image:-webkit-linear-gradient(center bottom,#eee 0,#fff 90%);background-image:-moz-linear-gradient(center bottom,#eee 0,#fff 90%);background-image:-o-linear-gradient(bottom,#eee 0,#fff 90%);background-image:-ms-linear-gradient(top,#eee 0,#fff 90%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0 );background-image:linear-gradient(top,#eee 0,#fff 90%)}.select2-container .select2-choice span{margin-right:26px;display:block;overflow:hidden;white-space:nowrap;-o-text-overflow:ellipsis;-ms-text-overflow:ellipsis;text-overflow:ellipsis}.select2-container .select2-choice abbr{display:block;position:absolute;right:26px;top:8px;width:12px;height:12px;font-size:17px;line-height:16px;color:#595959;font-weight:700;cursor:pointer;text-decoration:none;border:0;outline:0}.select2-container .select2-choice abbr:hover{color:#222;cursor:pointer}.select2-drop-mask{position:absolute;left:0;top:0;z-index:9998;opacity:0}.select2-drop{background:#fff;color:#000;border:1px solid #aaa;position:absolute;top:100%;-webkit-box-shadow:0 2px 4px rgba(0,0,0,.2);-moz-box-shadow:0 2px 4px rgba(0,0,0,.2);-o-box-shadow:0 2px 4px rgba(0,0,0,.2);box-shadow:0 2px 4px rgba(0,0,0,.2);z-index:9999;width:100%;margin-top:1px}.select2-drop.select2-drop-above{margin-top:-1px;-webkit-box-shadow:0 -2px 4px rgba(0,0,0,.2);-moz-box-shadow:0 -2px 4px rgba(0,0,0,.2);-o-box-shadow:0 -2px 4px rgba(0,0,0,.2);box-shadow:0 -2px 4px rgba(0,0,0,.2)}.select2-container .select2-choice div{-webkit-border-radius:0 2px 2px 0;-moz-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;position:absolute;right:0;top:0;display:block;height:100%;width:18px}.select2-container .select2-choice div b{background:url(/assets/img/select2.png) no-repeat -30px 2px;display:block;width:100%;height:100%}.select2-search{display:inline-block;white-space:nowrap;z-index:10000;min-height:26px;width:100%;margin:0;padding:4px 4px 0 4px}.select2-search-hidden{display:block;position:absolute;left:-10000px}.select2-search input{background:#fff url(/assets/img/select2.png) no-repeat 100% -22px;background:url(/assets/img/select2.png) no-repeat 100% -22px,-webkit-gradient(linear,left bottom,left top,color-stop(.85,#fff),color-stop(.99,#eee));background:url(/assets/img/select2.png) no-repeat 100% -22px,-webkit-linear-gradient(center bottom,#fff 85%,#eee 99%);background:url(/assets/img/select2.png) no-repeat 100% -22px,-moz-linear-gradient(center bottom,#fff 85%,#eee 99%);background:url(/assets/img/select2.png) no-repeat 100% -22px,-o-linear-gradient(bottom,#fff 85%,#eee 99%);background:url(/assets/img/select2.png) no-repeat 100% -22px,-ms-linear-gradient(top,#fff 85%,#eee 99%);background:url(/assets/img/select2.png) no-repeat 100% -22px,linear-gradient(top,#fff 85%,#eee 99%);padding:4px 20px 4px 5px;outline:0;border:1px solid #aaa;font-family:sans-serif;font-size:1em;width:100%;margin:0;height:auto!important;min-height:26px;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;border-radius:0;-moz-border-radius:0;-webkit-border-radius:0}.select2-drop.select2-drop-above .select2-search input{margin-top:4px}.select2-search input.select2-active{background:#fff url(../img/spinner.gif) no-repeat 100%;background:url(../img/spinner.gif) no-repeat 100%,-webkit-gradient(linear,left bottom,left top,color-stop(.85,#fff),color-stop(.99,#eee));background:url(../img/spinner.gif) no-repeat 100%,-webkit-linear-gradient(center bottom,#fff 85%,#eee 99%);background:url(../img/spinner.gif) no-repeat 100%,-moz-linear-gradient(center bottom,#fff 85%,#eee 99%);background:url(../img/spinner.gif) no-repeat 100%,-o-linear-gradient(bottom,#fff 85%,#eee 99%);background:url(../img/spinner.gif) no-repeat 100%,-ms-linear-gradient(top,#fff 85%,#eee 99%);background:url(../img/spinner.gif) no-repeat 100%,linear-gradient(top,#fff 85%,#eee 99%)}.select2-container-active .select2-choice,.select2-container-active .select2-choices{border:1px solid #4D90FE;outline:0}.select2-dropdown-open .select2-choice,.select2-dropdown-open .select2-choice:hover{background-color:#f4f4f4;background-image:-moz-linear-gradient(top,#f6f6f6,#f1f1f1);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f6f6f6),to(#f1f1f1));background-image:-webkit-linear-gradient(top,#f6f6f6,#f1f1f1);background-image:-o-linear-gradient(top,#f6f6f6,#f1f1f1);background-image:linear-gradient(to bottom,#f6f6f6,#f1f1f1);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff6f6f6', endColorstr='#fff1f1f1', GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.select2-dropdown-open .select2-choice div{background:0 0;border-left:none}.select2-results{margin:4px 1px 4px 0;padding:0;position:relative;overflow-x:hidden;overflow-y:auto;max-height:200px}.select2-results ul.select2-result-sub{margin:0}.select2-results ul.select2-result-sub>li .select2-result-label{padding-left:20px}.select2-results ul.select2-result-sub ul.select2-result-sub>li .select2-result-label{padding-left:40px}.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub>li .select2-result-label{padding-left:60px}.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub>li .select2-result-label{padding-left:80px}.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub>li .select2-result-label{padding-left:100px}.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub>li .select2-result-label{padding-left:110px}.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub>li .select2-result-label{padding-left:120px}.select2-results li{list-style:none;display:list-item}.select2-results li.select2-result-with-children>.select2-result-label{font-weight:700}.select2-results .select2-result-label{padding:3px 7px 4px;margin:0;cursor:pointer}.select2-results .select2-highlighted{background:#eee}.select2-results li em{background:#feffde;font-style:normal}.select2-results .select2-highlighted em{background:0 0}.select2-results .select2-no-results,.select2-results .select2-searching,.select2-results .select2-selection-limit{background:#f4f4f4;display:list-item;padding-left:4px}.select2-results .select2-disabled{display:none}.select2-more-results.select2-active{background:#f4f4f4 url(../img/spinner.gif) no-repeat 100%}.select2-more-results{background:#f4f4f4;display:list-item}.select2-container.select2-container-disabled .select2-choice{color:#b3b3b3;border-color:#d9d9d9;background-color:#e6e6e6;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;text-shadow:none;cursor:default}.select2-container.select2-container-disabled .select2-choice div{opacity:.5;filter:alpha(opacity=50)}.select2-container-multi .select2-choices{background-color:#fff;border:1px solid #d9d9d9;border-top:1px solid silver;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;margin:0;padding:0;cursor:text;overflow:hidden;height:auto!important;height:1%;position:relative}.select2-container-multi .select2-choices:hover{border:1px solid #b9b9b9;border-top:1px solid #a0a0a0;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.select2-container-multi .select2-choices{min-height:26px}.select2-container-multi.select2-container-active .select2-choices{border:1px solid #4D90FE;outline:0}.select2-container-multi .select2-choices li{float:left;list-style:none}.select2-container-multi .select2-choices .select2-search-field{white-space:nowrap;margin:0;padding:0}.select2-container-multi .select2-choices .select2-search-field input{color:#666;background:0 0!important;font-family:sans-serif;font-size:100%;height:23px;padding:5px;margin:1px 0;outline:0;border:0;-webkit-box-shadow:none;-moz-box-shadow:none;-o-box-shadow:none;box-shadow:none}.select2-container-multi .select2-choices .select2-search-field input.select2-active{background:#fff url(../img/spinner.gif) no-repeat 100%!important}.select2-default{color:#999!important}.select2-container-multi .select2-choices .select2-search-choice{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;background-color:#DAE4F6;color:#222;font-family:Arial;border:1px solid #DAE4F6;line-height:23px;padding:0 19px 0 5px;margin:1px;position:relative;cursor:default}.select2-container-multi .select2-choices .select2-search-choice span{cursor:default}.select2-container-multi .select2-choices .select2-search-choice-focus{background:#A6D7F5}.select2-search-choice-close{display:block;position:absolute;right:3px;top:4px;width:12px;height:13px;font-size:17px;line-height:16px;color:#444;font-weight:700;outline:0}.select2-search-choice-close:hover{text-decoration:none;color:#222;cursor:pointer}.select2-container-multi.select2-container-disabled .select2-choices{background-color:#f4f4f4;background-image:none;border:1px solid #ddd;cursor:default}.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice{background-image:none;background-color:#f4f4f4;border:1px solid #ddd;padding:3px 5px 3px 5px}.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice .select2-search-choice-close{display:none}.select2-result-selectable .select2-match,.select2-result-unselectable .select2-result-selectable .select2-match{font-weight:700}.select2-result-unselectable .select2-match{text-decoration:none}.select2-offscreen{position:absolute;left:-10000px}.select2-results::-webkit-scrollbar{height:16px;width:10px}.select2-results::-webkit-scrollbar-button:end:increment,.select2-results::-webkit-scrollbar-button:start:decrement{background-color:transparent;display:block;height:0}.select2-results::-webkit-scrollbar-track{background-clip:padding-box;border:solid transparent;border-width:0 0 0 4px}.select2-results::-webkit-scrollbar-track-piece{background-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.select2-results::-webkit-scrollbar:hover{background-color:#f3f3f3;border:1px solid #dbdbdb}.select2-results::-webkit-scrollbar-thumb:horizontal,.select2-results::-webkit-scrollbar-thumb:vertical{background-color:#c6c6c6;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.select2-results::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.2);border:solid transparent;border-width:0;-webkit-box-shadow:inset 1px 1px 0 rgba(0,0,0,.1),inset 0 -1px 0 rgba(0,0,0,.07);-moz-box-shadow:inset 1px 1px 0 rgba(0,0,0,.1),inset 0 -1px 0 rgba(0,0,0,.07);box-shadow:inset 1px 1px 0 rgba(0,0,0,.1),inset 0 -1px 0 rgba(0,0,0,.07);background-clip:padding-box}.select2-results::-webkit-scrollbar-thumb:hover{background-color:#949494}.select2-results::-webkit-scrollbar-thumb:active{background-color:rgba(0,0,0,.5);-webkit-box-shadow:inset 1px 1px 3px rgba(0,0,0,.35);-moz-box-shadow:inset 1px 1px 3px rgba(0,0,0,.35);box-shadow:inset 1px 1px 3px rgba(0,0,0,.35)}@media only screen and (-webkit-min-device-pixel-ratio:1.5){.select2-container .select2-choice div b,.select2-search input{background-image:url(/assets/img/select2x2.png)!important;background-repeat:no-repeat!important;background-size:60px 40px!important}.select2-search input{background-position:100% -21px!important}}/*!
- * Bootstrap Docs (http://getbootstrap.com)
- * Copyright 2011-2016 Twitter, Inc.
- * Licensed under the Creative Commons Attribution 3.0 Unported License. For
- * details, see https://creativecommons.org/licenses/by/3.0/.
- */body{position:relative;padding-top:94px}.table code{font-size:13px;font-weight:400}h2 code,h3 code,h4 code{background-color:inherit}.btn-outline{color:#4d90fe;background-color:transparent;border-color:#4d90fe}.btn-outline:active,.btn-outline:focus,.btn-outline:hover{color:#fff;background-color:#4d90fe;border-color:#4d90fe}.btn-outline-inverse{color:#fff;background-color:transparent;border-color:#fff}.btn-outline-inverse:active,.btn-outline-inverse:focus,.btn-outline-inverse:hover{color:#2d87e2;text-shadow:none;background-color:#fff;border-color:#fff}#skippy{display:block;padding:1em;color:#777;background-color:#f1f1f1;outline:0}#skippy .skiplink-text{padding:.5em;outline:1px dotted}#content:focus{outline:0}.bs-docs-footer{padding-top:40px;padding-bottom:30px;margin-top:100px;color:#777;text-align:center;border-top:1px solid #e5e5e5}.bs-docs-footer-links{padding-left:0;margin-bottom:20px}.bs-docs-footer-links li{display:inline-block}.bs-docs-footer-links li+li{margin-left:15px}@media (min-width:768px){.bs-docs-footer{text-align:left}.bs-docs-footer p{margin-bottom:0}}.bs-docs-header,.bs-docs-masthead{position:relative;padding:30px 0;color:#b3d4f4;text-align:center;text-shadow:0 1px 0 rgba(0,0,0,.1);background-color:#2d87e2;background-image:-webkit-linear-gradient(top,#1b6ec1 0,#2d87e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#1b6ec1),to(#2d87e2));background-image:-o-linear-gradient(top,#1b6ec1 0,#2d87e2 100%);background-image:linear-gradient(to bottom,#1b6ec1 0,#2d87e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#1b6ec1', endColorstr='#2d87e2', GradientType=0);background-repeat:repeat-x}.bs-docs-masthead .bs-docs-booticon{margin:0 auto 30px}.bs-docs-masthead h1{font-weight:300;line-height:1;color:#fff}.bs-docs-masthead .lead{margin:0 auto 30px;font-size:20px;color:#fff}.bs-docs-masthead .version{margin-top:-15px;color:#b3d4f4}.bs-docs-masthead .btn{width:100%;padding:15px 30px;font-size:20px}@media (min-width:480px){.bs-docs-masthead .btn{width:auto}}@media (min-width:768px){.bs-docs-masthead{padding:80px 0}.bs-docs-masthead h1{font-size:60px}.bs-docs-masthead .lead{font-size:24px}}@media (min-width:992px){.bs-docs-masthead .lead{width:80%;font-size:30px}}.bs-docs-header{margin-bottom:40px;font-size:20px}.bs-docs-header h1{margin-top:0;color:#fff}.bs-docs-header p{margin-bottom:0;font-weight:300;line-height:1.4}.bs-docs-header .container{position:relative}@media (min-width:768px){.bs-docs-header{padding-top:60px;padding-bottom:60px;font-size:24px;text-align:left}.bs-docs-header h1{font-size:60px;line-height:1}}@media (min-width:992px){.bs-docs-header h1,.bs-docs-header p{margin-right:380px}}.bs-docs-featurette{padding-top:40px;padding-bottom:40px;font-size:16px;line-height:1.5;color:#555;text-align:center;background-color:#fff;border-bottom:1px solid #e5e5e5}.bs-docs-featurette+.bs-docs-footer{margin-top:0;border-top:0}.bs-docs-featurette-title{margin-bottom:5px;font-size:30px;font-weight:400;color:#333}.half-rule{width:100px;margin:40px auto}.bs-docs-featurette h3{margin-bottom:5px;font-weight:400;color:#333}.bs-docs-featurette-img{display:block;margin-bottom:20px;color:#333}.bs-docs-featurette-img:hover{color:#337ab7;text-decoration:none}.bs-docs-featurette-img img{display:block;margin-bottom:15px}@media (min-width:480px){.bs-docs-featurette .img-responsive{margin-top:30px}}@media (min-width:768px){.bs-docs-featurette{padding-top:100px;padding-bottom:100px}.bs-docs-featurette-title{font-size:40px}.bs-docs-featurette .lead{max-width:80%;margin-right:auto;margin-left:auto}.bs-docs-featurette .img-responsive{margin-top:0}}.bs-docs-featured-sites{margin-right:-1px;margin-left:-1px}.bs-docs-featured-sites .col-xs-6{padding:1px}.bs-docs-featured-sites .img-responsive{margin-top:0}@media (min-width:768px){.bs-docs-featured-sites .col-sm-3:first-child img{border-top-left-radius:4px;border-bottom-left-radius:4px}.bs-docs-featured-sites .col-sm-3:last-child img{border-top-right-radius:4px;border-bottom-right-radius:4px}}.bs-examples .thumbnail{margin-bottom:10px}.bs-examples h4{margin-bottom:5px}.bs-examples p{margin-bottom:20px}@media (max-width:480px){.bs-examples{margin-right:-10px;margin-left:-10px}.bs-examples>[class^=col-]{padding-right:10px;padding-left:10px}}.bs-docs-sidebar.affix{position:static}@media (min-width:768px){.bs-docs-sidebar{padding-left:20px}}.bs-docs-sidenav{margin-top:50px;margin-bottom:20px}.bs-docs-sidebar .nav>li>a{display:block;padding:5px 20px;font-size:13px;font-weight:500;color:#222}.bs-docs-sidebar .nav>li>a:focus,.bs-docs-sidebar .nav>li>a:hover{text-decoration:none;background-color:#eee}.bs-docs-sidebar .nav>.active:focus>a,.bs-docs-sidebar .nav>.active:hover>a,.bs-docs-sidebar .nav>.active>a{color:#dd4b39;background-color:transparent}.bs-docs-sidebar .nav .nav{display:none;margin-bottom:8px}.bs-docs-sidebar .nav .nav>li>a{padding-top:1px;padding-bottom:1px;padding-left:30px;font-size:12px}.back-to-top,.bs-docs-theme-toggle{display:none;padding:4px 10px;margin-top:10px;margin-left:10px;font-size:12px;font-weight:500;color:#999}.back-to-top:hover,.bs-docs-theme-toggle:hover{color:#563d7c;text-decoration:none}.bs-docs-theme-toggle{margin-top:0}@media (min-width:768px){.back-to-top,.bs-docs-theme-toggle{display:block}}@media (min-width:992px){.bs-docs-sidebar .nav>.active>ul{display:block}.bs-docs-sidebar.affix,.bs-docs-sidebar.affix-bottom{width:213px}.bs-docs-sidebar.affix{position:fixed;top:80px}.bs-docs-sidebar.affix-bottom{position:absolute}.bs-docs-sidebar.affix .bs-docs-sidenav,.bs-docs-sidebar.affix-bottom .bs-docs-sidenav{margin-top:0;margin-bottom:0}}@media (min-width:1200px){.bs-docs-sidebar.affix,.bs-docs-sidebar.affix-bottom{width:263px}}.bs-docs-section{margin-bottom:60px}.bs-docs-section:last-child{margin-bottom:0}h1[id]{padding-top:20px;margin-top:0}.bs-callout{padding:20px;margin:20px 0;border:1px solid #eee;border-left-width:5px;border-radius:3px}.bs-callout h4{margin-top:0;margin-bottom:5px}.bs-callout p:last-child{margin-bottom:0}.bs-callout code{border-radius:3px}.bs-callout+.bs-callout{margin-top:-5px}.bs-callout-danger{border-left-color:#dd4b39}.bs-callout-danger h4{color:#c23321}.bs-callout-warning{border-left-color:#f1e7bc}.bs-callout-warning h4{color:#ba9e27}.bs-callout-info{border-left-color:#d0e3f0}.bs-callout-info h4{color:#3b86b9}.color-swatches{margin:0 -5px;overflow:hidden}.color-swatch{float:left;width:60px;height:60px;margin:0 5px;border-radius:3px}@media (min-width:768px){.color-swatch{width:100px;height:100px}}.color-swatches .gray-darker{background-color:#222}.color-swatches .gray-dark{background-color:#333}.color-swatches .gray{background-color:#555}.color-swatches .gray-light{background-color:#999}.color-swatches .gray-lighter{background-color:#eee}.color-swatches .brand-primary{background-color:#4d90fe}.color-swatches .brand-success{background-color:#35aa47}.color-swatches .brand-warning{background-color:#faa937}.color-swatches .brand-danger{background-color:#d84a38}.color-swatches .brand-info{background-color:#5bc0de}.color-swatches .bs-purple{background-color:#1b6ec1}.color-swatches .bs-purple-light{background-color:#c7bfd3}.color-swatches .bs-purple-lighter{background-color:#e5e1ea}.color-swatches .bs-gray{background-color:#f9f9f9}.bs-team .team-member{line-height:32px;color:#555}.bs-team .team-member:hover{color:#333;text-decoration:none}.bs-team .github-btn{float:right;width:180px;height:20px;margin-top:6px;border:none}.bs-team img{float:left;width:32px;margin-right:10px;border-radius:4px}.bs-docs-browser-bugs td p{margin-bottom:0}.bs-docs-browser-bugs th:first-child{width:18%}.show-grid{margin-bottom:15px}.show-grid [class^=col-]{padding-top:10px;padding-bottom:10px;background-color:#f9f9f9;border:1px solid #ddd}.bs-example{position:relative;padding:45px 15px 15px;margin:0 -15px 15px;border-color:#e5e5e5 #eee #eee;border-style:solid;border-width:1px 0;-webkit-box-shadow:inset 0 3px 6px rgba(0,0,0,.05);box-shadow:inset 0 3px 6px rgba(0,0,0,.05)}.bs-example:after{position:absolute;top:15px;left:15px;font-size:12px;font-weight:700;color:#959595;text-transform:uppercase;letter-spacing:1px;content:"Example"}.bs-example-padded-bottom{padding-bottom:24px}.bs-example+.highlight,.bs-example+.zero-clipboard+.highlight{margin:-15px -15px 15px;border-width:0 0 1px;border-radius:0}@media (min-width:768px){.bs-example{margin-right:0;margin-left:0;background-color:#fff;border-color:#ddd;border-width:1px;border-radius:4px 4px 0 0;-webkit-box-shadow:none;box-shadow:none}.bs-example+.highlight,.bs-example+.zero-clipboard+.highlight{margin-top:-16px;margin-right:0;margin-left:0;border-width:1px;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.bs-example-standalone{border-radius:4px}}.bs-example .container{width:auto}.bs-example>.alert:last-child,.bs-example>.form-control:last-child,.bs-example>.jumbotron:last-child,.bs-example>.list-group:last-child,.bs-example>.navbar:last-child,.bs-example>.panel:last-child,.bs-example>.progress:last-child,.bs-example>.table-responsive:last-child>.table,.bs-example>.table:last-child,.bs-example>.well:last-child,.bs-example>blockquote:last-child,.bs-example>ol:last-child,.bs-example>p:last-child,.bs-example>ul:last-child{margin-bottom:0}.bs-example>p>.close{float:none}.bs-example-type .table .type-info{color:#999;vertical-align:middle}.bs-example-type .table td{padding:15px 0;border-color:#eee}.bs-example-type .table tr:first-child td{border-top:0}.bs-example-type h1,.bs-example-type h2,.bs-example-type h3,.bs-example-type h4,.bs-example-type h5,.bs-example-type h6{margin:0}.bs-example-bg-classes p{padding:15px}.bs-example>.img-circle,.bs-example>.img-rounded,.bs-example>.img-thumbnail{margin:5px}.bs-example>.table-responsive>.table{background-color:#fff}.bs-example>.btn,.bs-example>.btn-group{margin-top:5px;margin-bottom:5px}.bs-example>.btn-toolbar+.btn-toolbar{margin-top:10px}.bs-example .select2-container.form-control,.bs-example-control-sizing input[type=text]+input[type=text],.bs-example-control-sizing select{margin-top:10px}.bs-example-form .input-group{margin-bottom:10px}.bs-example>textarea.form-control{resize:vertical}.bs-example>.list-group{max-width:400px}.bs-example .navbar:last-child{margin-bottom:0}.bs-navbar-bottom-example,.bs-navbar-top-example{z-index:1;padding:0;overflow:hidden}.bs-navbar-bottom-example .navbar-header,.bs-navbar-top-example .navbar-header{margin-left:0}.bs-navbar-bottom-example .navbar-fixed-bottom,.bs-navbar-top-example .navbar-fixed-top{position:relative;margin-right:0;margin-left:0}.bs-navbar-top-example{padding-bottom:90px}.bs-navbar-top-example:after{top:auto;bottom:15px}.bs-navbar-top-example .navbar-fixed-top{top:-1px}.bs-navbar-bottom-example{padding-top:90px}.bs-navbar-bottom-example .navbar-fixed-bottom{bottom:-1px}.bs-navbar-bottom-example .navbar{margin-bottom:0}@media (min-width:768px){.bs-navbar-bottom-example .navbar-fixed-bottom,.bs-navbar-top-example .navbar-fixed-top{position:absolute}}.bs-example .pagination{margin-top:10px;margin-bottom:10px}.bs-example>.pager{margin-top:0}.bs-example>.scrollable{height:200px;overflow-y:auto}.bs-example-modal{background-color:#f5f5f5}.bs-example-modal .modal{position:relative;top:auto;right:auto;bottom:auto;left:auto;z-index:1;display:block}.bs-example-modal .modal-dialog{left:auto;margin-right:auto;margin-left:auto}.bs-example .dropup>.dropdown-toggle,.bs-example>.dropdown>.dropdown-toggle{float:left}.bs-example-submenu .dropdown>.dropdown-menu,.bs-example-submenu .dropup>.dropdown-menu,.bs-example>.dropdown>.dropdown-menu{position:static;display:block;margin-bottom:5px;clear:left}.bs-example-submenu .dropdown-menu{margin-right:20px}.bs-example-tabs .nav-tabs{margin-bottom:15px}.bs-example-tooltips{text-align:center}.bs-example-tooltips>.btn{margin-top:5px;margin-bottom:5px}.bs-example-tooltip .tooltip{position:relative;display:inline-block;margin:10px 20px;opacity:1}.bs-example-popover{padding-bottom:24px;background-color:#f9f9f9}.bs-example-popover .popover{position:relative;display:block;float:left;width:260px;margin:20px}.scrollspy-example{position:relative;height:200px;margin-top:10px;overflow:auto}.bs-example>.nav-pills-stacked-example{max-width:300px}#collapseExample .well{margin-bottom:0}.bs-events-table>tbody>tr>td:first-child,.bs-events-table>thead>tr>th:first-child{white-space:nowrap}.bs-events-table>thead>tr>th:first-child{width:150px}.js-options-table>thead>tr>th:nth-child(1),.js-options-table>thead>tr>th:nth-child(2){width:100px}.js-options-table>thead>tr>th:nth-child(3){width:50px}.highlight{padding:9px 14px;margin-bottom:14px;background-color:#f7f7f9;border:1px solid #e1e1e8;border-radius:4px}.highlight pre{padding:0;margin-top:0;margin-bottom:0;word-break:normal;white-space:nowrap;background-color:transparent;border:0}.highlight pre code{font-size:inherit;color:#333}.highlight pre code:first-child{display:inline-block;padding-right:45px}.table-responsive .highlight pre{white-space:normal}.bs-table th small,.responsive-utilities th small{display:block;font-weight:400;color:#999}.responsive-utilities tbody th{font-weight:400}.responsive-utilities td{text-align:center}.responsive-utilities td.is-visible{color:#468847;background-color:#dff0d8!important}.responsive-utilities td.is-hidden{color:#ccc;background-color:#f9f9f9!important}.responsive-utilities-test{margin-top:5px}.responsive-utilities-test .col-xs-6{margin-bottom:10px}.responsive-utilities-test span{display:block;padding:15px 10px;font-size:14px;font-weight:700;line-height:1.1;text-align:center;border-radius:4px}.hidden-on .col-xs-6 .hidden-lg,.hidden-on .col-xs-6 .hidden-md,.hidden-on .col-xs-6 .hidden-sm,.hidden-on .col-xs-6 .hidden-xs,.visible-on .col-xs-6 .hidden-lg,.visible-on .col-xs-6 .hidden-md,.visible-on .col-xs-6 .hidden-sm,.visible-on .col-xs-6 .hidden-xs{color:#999;border:1px solid #ddd}.hidden-on .col-xs-6 .visible-lg-block,.hidden-on .col-xs-6 .visible-md-block,.hidden-on .col-xs-6 .visible-sm-block,.hidden-on .col-xs-6 .visible-xs-block,.visible-on .col-xs-6 .visible-lg-block,.visible-on .col-xs-6 .visible-md-block,.visible-on .col-xs-6 .visible-sm-block,.visible-on .col-xs-6 .visible-xs-block{color:#468847;background-color:#dff0d8;border:1px solid #d6e9c6}.bs-glyphicons{margin:0 -10px 20px;overflow:hidden}.bs-glyphicons-list{padding-left:0;list-style:none}.bs-glyphicons li{float:left;width:25%;height:115px;padding:10px;margin:0 -1px -1px 0;font-size:10px;line-height:1.4;text-align:center;border:1px solid #ddd}.bs-glyphicons .glyphicon{margin-top:5px;margin-bottom:10px;font-size:24px}.bs-glyphicons .glyphicon-class{display:block;text-align:center;word-wrap:break-word}.bs-glyphicons li:hover{background-color:#eee}@media (min-width:768px){.bs-glyphicons{margin-right:0;margin-left:0}.bs-glyphicons li{width:12.5%;font-size:12px}}.bs-customizer .toggle{float:right;margin-top:25px}.bs-customizer label{margin-top:10px;font-weight:500;color:#555}.bs-customizer h2{padding-top:30px;margin-top:0;margin-bottom:5px}.bs-customizer h3{margin-bottom:0}.bs-customizer h4{margin-top:15px;margin-bottom:0}.bs-customizer .bs-callout h4{margin-top:0;margin-bottom:5px}.bs-customizer input[type=text]{font-family:Menlo,Monaco,Consolas,"Courier New",monospace;background-color:#fafafa}.bs-customizer .help-block{margin-bottom:5px;font-size:12px}#less-section label{font-weight:400}.bs-customize-download .btn-outline{padding:20px}.bs-customizer-alert{position:fixed;top:0;right:0;left:0;z-index:1030;padding:15px 0;color:#fff;background-color:#d9534f;border-bottom:1px solid #b94441;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25);box-shadow:inset 0 1px 0 rgba(255,255,255,.25)}.bs-customizer-alert .close{margin-top:-4px;font-size:24px}.bs-customizer-alert p{margin-bottom:0}.bs-customizer-alert .glyphicon{margin-right:5px}.bs-customizer-alert pre{margin:10px 0 0;color:#fff;background-color:#a83c3a;border-color:#973634;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 2px 4px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)}.bs-dropzone{position:relative;padding:20px;margin-bottom:20px;color:#777;text-align:center;border:2px dashed #eee;border-radius:4px}.bs-dropzone .import-header{margin-bottom:5px}.bs-dropzone .glyphicon-download-alt{font-size:40px}.bs-dropzone hr{width:100px}.bs-dropzone .lead{margin-bottom:10px;font-weight:400;color:#333}#import-manual-trigger{cursor:pointer}.bs-dropzone p:last-child{margin-bottom:0}.bs-brand-logos{display:table;width:100%;margin-bottom:15px;overflow:hidden;color:#1b6ec1;background-color:#f9f9f9;border-radius:4px}.bs-brand-item{padding:60px 0;text-align:center}.bs-brand-item+.bs-brand-item{border-top:1px solid #fff}.bs-brand-logos .inverse{color:#fff;background-color:#1b6ec1}.bs-brand-item h1,.bs-brand-item h3{margin-top:0;margin-bottom:0}.bs-brand-item .bs-docs-booticon{margin-right:auto;margin-left:auto}.bs-brand-item .glyphicon{width:30px;height:30px;margin:10px auto -10px;line-height:30px;color:#fff;border-radius:50%}.bs-brand-item .glyphicon-ok{background-color:#5cb85c}.bs-brand-item .glyphicon-remove{background-color:#d9534f}@media (min-width:768px){.bs-brand-item{display:table-cell;width:1%}.bs-brand-item+.bs-brand-item{border-top:0;border-left:1px solid #fff}.bs-brand-item h1{font-size:60px}}.zero-clipboard{position:relative;display:none}.btn-clipboard{position:absolute;top:0;right:0;z-index:10;display:block;padding:5px 8px;font-size:12px;color:#777;cursor:pointer;background-color:#fff;border:1px solid #e1e1e8;border-radius:0 4px 0 4px}.btn-clipboard-hover{color:#fff;background-color:#563d7c;border-color:#563d7c}@media (min-width:768px){.zero-clipboard{display:block}.bs-example+.zero-clipboard .btn-clipboard{top:-16px;border-top-right-radius:0}}.anchorjs-link{color:inherit}@media (max-width:480px){.anchorjs-link{display:none}}:hover>.anchorjs-link{opacity:.75;-webkit-transition:color .16s linear;-o-transition:color .16s linear;transition:color .16s linear}.anchorjs-link:focus,:hover>.anchorjs-link:hover{text-decoration:none;opacity:1}#focusedInput{border:1px solid #4d90fe!important;outline:0;outline:thin dotted\9;-webkit-box-shadow:none;box-shadow:none}.v4-tease{position:fixed;top:0;right:0;left:0;z-index:1030;display:block;padding:15px 20px;font-weight:700;color:#fff;text-align:center;background-color:#1b6ec1}.v4-tease:hover{color:#fff;text-decoration:none;background-color:#2d87e2}@media print{a[href]:after{content:""!important}}.bs-docs-navbar-masthead{top:48px}.bs-docs-dl-options h4{margin-top:15px;margin-bottom:5px}
-/*# sourceMappingURL=docs.min.css.map */
\ No newline at end of file
diff --git a/src/DjangoBlog/blog/static/assets/css/ie10-viewport-bug-workaround.css b/src/DjangoBlog/blog/static/assets/css/ie10-viewport-bug-workaround.css
deleted file mode 100644
index 4b9518e..0000000
--- a/src/DjangoBlog/blog/static/assets/css/ie10-viewport-bug-workaround.css
+++ /dev/null
@@ -1,13 +0,0 @@
-/*!
- * IE10 viewport hack for Surface/desktop Windows 8 bug
- * Copyright 2014-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-
-/*
- * See the Getting Started docs for more information:
- * http://getbootstrap.com/getting-started/#support-ie10-width
- */
-@-ms-viewport { width: device-width; }
-@-o-viewport { width: device-width; }
-@viewport { width: device-width; }
diff --git a/src/DjangoBlog/blog/static/assets/css/signin.css b/src/DjangoBlog/blog/static/assets/css/signin.css
deleted file mode 100644
index 121fb0d..0000000
--- a/src/DjangoBlog/blog/static/assets/css/signin.css
+++ /dev/null
@@ -1,58 +0,0 @@
-body {
- padding-top: 40px;
- padding-bottom: 40px;
- background-color: #fff;
-}
-
-.form-signin {
- max-width: 330px;
- padding: 15px;
- margin: 0 auto;
-}
-.form-signin-heading {
- margin: 0 0 15px;
- font-size: 18px;
- font-weight: 400;
- color: #555;
-}
-.form-signin .checkbox {
- margin-bottom: 10px;
- font-weight: normal;
-}
-.form-signin .form-control {
- position: relative;
- height: auto;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- padding: 10px;
- font-size: 16px;
-}
-.form-signin .form-control:focus {
- z-index: 2;
-}
-.form-signin input[type="email"] {
- margin-bottom: 10px;
-}
-.form-signin input[type="password"] {
- margin-bottom: 10px;
-}
-.card {
- width: 304px;
- padding: 20px 25px 30px;
- margin: 0 auto 25px;
- background-color: #f7f7f7;
- border-radius: 2px;
- -webkit-box-shadow: 0 2px 2px rgba(0, 0, 0, .3);
- box-shadow: 0 2px 2px rgba(0, 0, 0, .3);
-}
-.card-signin {
- width: 354px;
- padding: 40px;
-}
-.card-signin .profile-img {
- display: block;
- width: 96px;
- height: 96px;
- margin: 0 auto 10px;
-}
diff --git a/src/DjangoBlog/blog/static/assets/css/todc-bootstrap.min.css b/src/DjangoBlog/blog/static/assets/css/todc-bootstrap.min.css
deleted file mode 100644
index 66c9cb2..0000000
--- a/src/DjangoBlog/blog/static/assets/css/todc-bootstrap.min.css
+++ /dev/null
@@ -1,6 +0,0 @@
-/*!
- * TODC Bootstrap v3.3.7-3.3.7 (http://todc.github.com/todc-bootstrap/)
- * Copyright 2011-2016 Tim O'Donnell
- * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license
- */.panel-group .panel-heading a.collapsed:before,.panel-group .panel-heading a:before{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.caret-left,.caret-right,.collapse-caret.collapsed:before,.collapse-caret:before,.dropdown-submenu>a:after{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}body{font-family:Arial,Helvetica,sans-serif;font-size:13px;line-height:1.4;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#15c}a:focus,a:hover{color:#15c}.img-rounded{border-radius:1px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:0;line-height:1.4;background-color:#fff;border:3px solid #fff;border-radius:0;-webkit-box-shadow:0 0 0 1px #aaa;box-shadow:0 0 0 1px #aaa;-webkit-transition:none;-o-transition:none;transition:none}.caret-left,.caret-right,.collapse-caret.collapsed:before,.dropdown-submenu>a:after{vertical-align:baseline;border-top:4px solid transparent;border-right:0 dotted;border-bottom:4px solid transparent;border-left:4px solid}.caret-left{margin-right:2px;margin-left:0;border-right:4px solid;border-left:0 dotted}.scrollable-shadow{background:-webkit-gradient(linear,left top,left bottom,color-stop(30%,#fff),to(rgba(255,255,255,0))),-webkit-gradient(linear,left top,left bottom,from(rgba(255,255,255,0)),color-stop(70%,#fff)) 0 100%,radial-gradient(50% 0,farthest-side,rgba(0,0,0,.2),rgba(0,0,0,0)),radial-gradient(50% 100%,farthest-side,rgba(0,0,0,.2),rgba(0,0,0,0)) 0 100%;background:-webkit-linear-gradient(white 30%,rgba(255,255,255,0)),-webkit-linear-gradient(rgba(255,255,255,0),#fff 70%) 0 100%,-webkit-radial-gradient(50% 0,farthest-side,rgba(0,0,0,.2),rgba(0,0,0,0)),-webkit-radial-gradient(50% 100%,farthest-side,rgba(0,0,0,.2),rgba(0,0,0,0)) 0 100%;background:-o-linear-gradient(white 30%,rgba(255,255,255,0)),-o-linear-gradient(rgba(255,255,255,0),#fff 70%) 0 100%,-o-radial-gradient(50% 0,farthest-side,rgba(0,0,0,.2),rgba(0,0,0,0)),-o-radial-gradient(50% 100%,farthest-side,rgba(0,0,0,.2),rgba(0,0,0,0)) 0 100%;background:linear-gradient(white 30%,rgba(255,255,255,0)),linear-gradient(rgba(255,255,255,0),#fff 70%) 0 100%,radial-gradient(50% 0,farthest-side,rgba(0,0,0,.2),rgba(0,0,0,0)),radial-gradient(50% 100%,farthest-side,rgba(0,0,0,.2),rgba(0,0,0,0)) 0 100%;background:-webkit-gradient(linear,left top,left bottom,color-stop(30%,#fff),to(rgba(255,255,255,0))),-webkit-gradient(linear,left top,left bottom,from(rgba(255,255,255,0)),color-stop(70%,#fff)) 0 100%,radial-gradient(farthest-side at 50% 0,rgba(0,0,0,.2),rgba(0,0,0,0)),radial-gradient(farthest-side at 50% 100%,rgba(0,0,0,.2),rgba(0,0,0,0)) 0 100%;background:linear-gradient(white 30%,rgba(255,255,255,0)),linear-gradient(rgba(255,255,255,0),#fff 70%) 0 100%,radial-gradient(farthest-side at 50% 0,rgba(0,0,0,.2),rgba(0,0,0,0)),radial-gradient(farthest-side at 50% 100%,rgba(0,0,0,.2),rgba(0,0,0,0)) 0 100%;background-repeat:no-repeat;background-attachment:local,local,scroll,scroll;-webkit-background-size:100% 40px,100% 40px,100% 6px,100% 6px;background-size:100% 40px,100% 40px,100% 6px,100% 6px}.mark,mark{background-color:#f9edbe}.text-primary{color:#4d90fe}a.text-primary:focus,a.text-primary:hover{color:#1a70fe}.text-warning{color:#333}a.text-warning:focus,a.text-warning:hover{color:#1a1a1a}.bg-primary{color:#fff;background-color:#4d90fe}a.bg-primary:focus,a.bg-primary:hover{background-color:#1a70fe}.bg-warning{background-color:#f9edbe}a.bg-warning:focus,a.bg-warning:hover{background-color:#f5e08f}code{padding:2px 4px;border-radius:0}kbd{border-radius:1px}pre{padding:9px;margin:0 0 9px;font-size:12px;line-height:1.4;border-radius:0}table{background-color:transparent}caption{color:#999}.table{margin-bottom:18px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{line-height:1.4;border-top:1px solid #ddd}.table>thead>tr>th{border-bottom:2px solid #ddd}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#ffc}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#f9edbe}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#f7e7a7}@media screen and (max-width:767px){.table-responsive{margin-bottom:13.5px;border:1px solid #ddd}}legend{margin-bottom:18px;font-size:19.5px}input[type=radio],input[type=checkbox]{margin:2px 0 0}output{padding-top:6px;font-size:13px;line-height:1.4;color:#555}.form-control{height:30px;-webkit-appearance:none;padding:5px 8px;font-size:13px;line-height:1.4;background-color:#fff;border:1px solid #d9d9d9;border-top-color:silver;border-radius:2px;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:none;-o-transition:none;transition:none}.form-control:hover{border:1px solid #b9b9b9;border-top-color:#a0a0a0;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.form-control:focus{border-color:#4d90fe;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(77,144,254,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(77,144,254,.6)}.form-control:focus{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.3);box-shadow:inset 0 1px 2px rgba(0,0,0,.3)}.form-control::-ms-expand{background-color:transparent}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#f1f1f1;border:1px solid #e5e5e5}.form-control[disabled]:active,.form-control[disabled]:focus,.form-control[disabled]:hover,.form-control[readonly]:active,.form-control[readonly]:focus,.form-control[readonly]:hover,fieldset[disabled] .form-control:active,fieldset[disabled] .form-control:focus,fieldset[disabled] .form-control:hover{border:1px solid #e5e5e5;-webkit-box-shadow:none;box-shadow:none}.form-control[readonly] .form-control{border:1px solid #d9d9d9}.form-control[readonly] .form-control:active,.form-control[readonly] .form-control:focus,.form-control[readonly] .form-control:hover{border:1px solid #d9d9d9}textarea.form-control{padding-right:4px}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:30px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:26px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:38px}}.checkbox label,.radio label{min-height:18px}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio],input[type=radio],input[type=checkbox]{position:relative;width:13px;width:16px\9;height:13px;height:16px\9;-webkit-appearance:none;background:#fff;border:1px solid #dcdcdc;border:1px solid transparent\9;border-radius:1px}.checkbox input[type=checkbox]:focus,.checkbox-inline input[type=checkbox]:focus,.radio input[type=radio]:focus,.radio-inline input[type=radio]:focus,input[type=radio]:focus,input[type=checkbox]:focus{border-color:#4d90fe;outline:0}.checkbox input[type=checkbox]:active,.checkbox-inline input[type=checkbox]:active,.radio input[type=radio]:active,.radio-inline input[type=radio]:active,input[type=radio]:active,input[type=checkbox]:active{background-color:#ebebeb;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffffffff', GradientType=0);border-color:#c6c6c6}.checkbox input[type=checkbox]:checked,.checkbox-inline input[type=checkbox]:checked,.radio input[type=radio]:checked,.radio-inline input[type=radio]:checked,input[type=radio]:checked,input[type=checkbox]:checked{background:#fff}.radio input[type=radio],.radio-inline input[type=radio],input[type=radio]{width:15px;width:18px\9;height:15px;height:18px\9;border-radius:1em}.radio input[type=radio]:checked::after,.radio-inline input[type=radio]:checked::after,input[type=radio]:checked::after{position:relative;top:3px;left:3px;display:block;width:7px;height:7px;content:'';background:#666;border-radius:1em}.checkbox input[type=checkbox]:hover,.checkbox-inline input[type=checkbox]:hover,input[type=checkbox]:hover{border-color:#c6c6c6;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.1);-webkit-box-shadow:none\9;box-shadow:inset 0 1px 1px rgba(0,0,0,.1);box-shadow:none\9}.checkbox input[type=checkbox]:checked::after,.checkbox-inline input[type=checkbox]:checked::after,input[type=checkbox]:checked::after{position:absolute;top:-6px;left:-5px;display:block;content:url(../img/checkmark.png)}.form-control-static{min-height:31px;padding-top:6px;padding-bottom:6px}.input-sm{height:26px;padding:3px 8px;font-size:12px;line-height:1.5;border-radius:1px}select.input-sm{height:26px;line-height:26px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:26px;padding:3px 8px;font-size:12px;line-height:1.5;border-radius:1px}.form-group-sm select.form-control{height:26px;line-height:26px}.form-group-sm .form-control-static{height:26px;min-height:30px;padding:4px 8px;font-size:12px;line-height:1.5}.input-lg{height:38px;padding:9px 14px;font-size:14px;line-height:1.3;border-radius:1px}select.input-lg{height:38px;line-height:38px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:38px;padding:9px 14px;font-size:14px;line-height:1.3;border-radius:1px}.form-group-lg select.form-control{height:38px;line-height:38px}.form-group-lg .form-control-static{height:38px;min-height:32px;padding:10px 14px;font-size:14px;line-height:1.3}.has-feedback .form-control{padding-right:37.5px}.form-control-feedback{top:23px;width:30px;height:30px;line-height:30px}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:38px;height:38px;line-height:38px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:26px;height:26px;line-height:26px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-success .form-control{-webkit-box-shadow:none;box-shadow:none}.has-success .form-control:hover{border-color:#3c763d;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.1) inset;box-shadow:0 1px 2px rgba(0,0,0,.1) inset}.has-success .form-control:focus{border-color:#3c763d;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.3) inset;box-shadow:0 1px 2px rgba(0,0,0,.3) inset}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#e09b17}.has-warning .form-control{border-color:#e09b17;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#b27b12;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #f0c36d;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #f0c36d}.has-warning .input-group-addon{color:#e09b17;background-color:#f9edbe;border-color:#e09b17}.has-warning .form-control-feedback{color:#e09b17}.has-warning .form-control{-webkit-box-shadow:none;box-shadow:none}.has-warning .form-control:hover{border-color:#e09b17;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.1) inset;box-shadow:0 1px 2px rgba(0,0,0,.1) inset}.has-warning .form-control:focus{border-color:#e09b17;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.3) inset;box-shadow:0 1px 2px rgba(0,0,0,.3) inset}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#dd4b39}.has-error .form-control{border-color:#dd4b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#c23321;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ec9a90;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ec9a90}.has-error .input-group-addon{color:#dd4b39;background-color:#f2dede;border-color:#dd4b39}.has-error .form-control-feedback{color:#dd4b39}.has-error .form-control{-webkit-box-shadow:none;box-shadow:none}.has-error .form-control:hover{border-color:#dd4b39;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.1) inset;box-shadow:0 1px 2px rgba(0,0,0,.1) inset}.has-error .form-control:focus{border-color:#dd4b39;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.3) inset;box-shadow:0 1px 2px rgba(0,0,0,.3) inset}.has-feedback label~.form-control-feedback{top:23px}.help-block{color:#777}.form-horizontal .checkbox-inline,.form-horizontal .control-label,.form-horizontal .radio-inline{padding-top:5px}@media (min-width:768px){.form-inline .form-group,.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control,.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static,.navbar-form .form-control-static{display:inline-block}.form-inline .input-group,.navbar-form .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control,.navbar-form .input-group>.form-control{width:100%}.form-inline .control-label,.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio,.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label,.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio],.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-bottom:-2px;margin-left:0}.form-inline .has-feedback .form-control-feedback,.navbar-form .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:6px}.form-horizontal .checkbox,.form-horizontal .radio{min-height:24px}@media (min-width:768px){.form-horizontal .control-label{padding-top:6px}.form-horizontal .has-feedback .form-control-feedback{top:0}}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:10px;font-size:14px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:4px;font-size:12px}}.btn{padding:5px 12px;font-size:13px;font-weight:700;line-height:18px;cursor:default;-webkit-background-clip:border-box;background-clip:border-box;border-radius:2px;-webkit-box-shadow:none;box-shadow:none}.btn:hover{-webkit-box-shadow:0 1px 1px rgba(0,0,0,.1);box-shadow:0 1px 1px rgba(0,0,0,.1)}.btn.active,.btn:active{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.btn-default{color:#333;text-shadow:0 1px rgba(0,0,0,.1);text-shadow:0 1px 0 #fff;background-color:#f3f3f3;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#f1f1f1 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#f1f1f1 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#f1f1f1));background-image:linear-gradient(to bottom,#f5f5f5 0,#f1f1f1 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff1f1f1', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border:1px solid #dcdcdc}.btn-default:hover{text-shadow:0 1px rgba(0,0,0,.3);-webkit-box-shadow:0 1px 1px rgba(0,0,0,.2);box-shadow:0 1px 1px rgba(0,0,0,.2)}.btn-default.active,.btn-default.focus,.btn-default:active,.btn-default:focus,.btn-default:hover,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e4e4e4;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e4e4e4 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e4e4e4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e4e4e4));background-image:linear-gradient(to bottom,#f5f5f5 0,#e4e4e4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe4e4e4', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border:1px solid #cfcfcf}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{text-shadow:0 1px rgba(0,0,0,.3);background-image:-webkit-linear-gradient(top,#f5f5f5 0,#d8d8d8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#d8d8d8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#d8d8d8));background-image:linear-gradient(to bottom,#f5f5f5 0,#d8d8d8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffd8d8d8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border:1px solid #c3c3c3;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.3);box-shadow:inset 0 1px 2px rgba(0,0,0,.3)}.btn-default.focus,.btn-default:focus{border:1px solid #dcdcdc;-webkit-box-shadow:inset 0 0 0 1px #fff;box-shadow:inset 0 0 0 1px #fff}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#f5f5f5;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#f1f1f1 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#f1f1f1 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#f1f1f1));background-image:linear-gradient(to bottom,#f5f5f5 0,#f1f1f1 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff1f1f1', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border:1px solid #dcdcdc;-webkit-box-shadow:none;box-shadow:none}.btn-default .badge{color:#dcdcdc;background-color:#333}.btn-default:hover{text-shadow:none;background-image:-webkit-linear-gradient(top,#f8f8f8 0,#f1f1f1 100%);background-image:-o-linear-gradient(top,#f8f8f8 0,#f1f1f1 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f8f8f8),to(#f1f1f1));background-image:linear-gradient(to bottom,#f8f8f8 0,#f1f1f1 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff8f8f8', endColorstr='#fff1f1f1', GradientType=0);background-repeat:repeat-x;background-position:0 0;border-color:#c6c6c6;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.1);box-shadow:0 1px 1px rgba(0,0,0,.1);-webkit-transition:none;-o-transition:none;transition:none}.btn-default.active,.btn-default:active,.open .dropdown-toggle.btn-default{text-shadow:0 1px 0 #fff;background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f6f6f6 0,#f1f1f1 100%);background-image:-o-linear-gradient(top,#f6f6f6 0,#f1f1f1 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f6f6f6),to(#f1f1f1));background-image:linear-gradient(to bottom,#f6f6f6 0,#f1f1f1 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff6f6f6', endColorstr='#fff1f1f1', GradientType=0);background-repeat:repeat-x;border:1px solid #dcdcdc;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.btn-default.focus,.btn-default:focus{background-color:#f3f3f3;border-color:#4d90fe;outline-style:none}.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{text-shadow:none;background-color:#f3f3f3}.btn-default .badge{color:#f3f3f3;text-shadow:none}.btn-primary{color:#fff;text-shadow:0 1px rgba(0,0,0,.1);background-image:-webkit-linear-gradient(top,#4d90fe 0,#4787ed 100%);background-image:-o-linear-gradient(top,#4d90fe 0,#4787ed 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#4d90fe),to(#4787ed));background-image:linear-gradient(to bottom,#4d90fe 0,#4787ed 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff4d90fe', endColorstr='#ff4787ed', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border:1px solid #3079ed}.btn-primary:hover{text-shadow:0 1px rgba(0,0,0,.3);-webkit-box-shadow:0 1px 1px rgba(0,0,0,.2);box-shadow:0 1px 1px rgba(0,0,0,.2)}.btn-primary.active,.btn-primary.focus,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#3078eb;background-image:-webkit-linear-gradient(top,#4d90fe 0,#3078eb 100%);background-image:-o-linear-gradient(top,#4d90fe 0,#3078eb 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#4d90fe),to(#3078eb));background-image:linear-gradient(to bottom,#4d90fe 0,#3078eb 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff4d90fe', endColorstr='#ff3078eb', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border:1px solid #196aeb}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{text-shadow:0 1px rgba(0,0,0,.3);background-image:-webkit-linear-gradient(top,#4d90fe 0,#1969e8 100%);background-image:-o-linear-gradient(top,#4d90fe 0,#1969e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#4d90fe),to(#1969e8));background-image:linear-gradient(to bottom,#4d90fe 0,#1969e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff4d90fe', endColorstr='#ff1969e8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border:1px solid #135fd7;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.3);box-shadow:inset 0 1px 2px rgba(0,0,0,.3)}.btn-primary.focus,.btn-primary:focus{border:1px solid #3079ed;-webkit-box-shadow:inset 0 0 0 1px #fff;box-shadow:inset 0 0 0 1px #fff}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#4d90fe;background-image:-webkit-linear-gradient(top,#4d90fe 0,#4787ed 100%);background-image:-o-linear-gradient(top,#4d90fe 0,#4787ed 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#4d90fe),to(#4787ed));background-image:linear-gradient(to bottom,#4d90fe 0,#4787ed 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff4d90fe', endColorstr='#ff4787ed', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border:1px solid #3079ed;-webkit-box-shadow:none;box-shadow:none}.btn-primary .badge{color:#3079ed;background-color:#fff}.btn-success{color:#fff;text-shadow:0 1px rgba(0,0,0,.1);background-image:-webkit-linear-gradient(top,#35aa47 0,#35aa47 100%);background-image:-o-linear-gradient(top,#35aa47 0,#35aa47 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#35aa47),to(#35aa47));background-image:linear-gradient(to bottom,#35aa47 0,#35aa47 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff35aa47', endColorstr='#ff35aa47', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border:1px solid #359947}.btn-success:hover{text-shadow:0 1px rgba(0,0,0,.3);-webkit-box-shadow:0 1px 1px rgba(0,0,0,.2);box-shadow:0 1px 1px rgba(0,0,0,.2)}.btn-success.active,.btn-success.focus,.btn-success:active,.btn-success:focus,.btn-success:hover,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#2f973f;background-image:-webkit-linear-gradient(top,#35aa47 0,#2f973f 100%);background-image:-o-linear-gradient(top,#35aa47 0,#2f973f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#35aa47),to(#2f973f));background-image:linear-gradient(to bottom,#35aa47 0,#2f973f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff35aa47', endColorstr='#ff2f973f', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border:1px solid #2e863e}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{text-shadow:0 1px rgba(0,0,0,.3);background-image:-webkit-linear-gradient(top,#35aa47 0,#298337 100%);background-image:-o-linear-gradient(top,#35aa47 0,#298337 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#35aa47),to(#298337));background-image:linear-gradient(to bottom,#35aa47 0,#298337 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff35aa47', endColorstr='#ff298337', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border:1px solid #287335;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.3);box-shadow:inset 0 1px 2px rgba(0,0,0,.3)}.btn-success.focus,.btn-success:focus{border:1px solid #359947;-webkit-box-shadow:inset 0 0 0 1px #fff;box-shadow:inset 0 0 0 1px #fff}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#35aa47;background-image:-webkit-linear-gradient(top,#35aa47 0,#35aa47 100%);background-image:-o-linear-gradient(top,#35aa47 0,#35aa47 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#35aa47),to(#35aa47));background-image:linear-gradient(to bottom,#35aa47 0,#35aa47 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff35aa47', endColorstr='#ff35aa47', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border:1px solid #359947;-webkit-box-shadow:none;box-shadow:none}.btn-success .badge{color:#359947;background-color:#fff}.btn-info{color:#fff;text-shadow:0 1px rgba(0,0,0,.1);background-image:-webkit-linear-gradient(top,#5bc0de 0,#5bc0de 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#5bc0de 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#5bc0de));background-image:linear-gradient(to bottom,#5bc0de 0,#5bc0de 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff5bc0de', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border:1px solid #46b8da}.btn-info:hover{text-shadow:0 1px rgba(0,0,0,.3);-webkit-box-shadow:0 1px 1px rgba(0,0,0,.2);box-shadow:0 1px 1px rgba(0,0,0,.2)}.btn-info.active,.btn-info.focus,.btn-info:active,.btn-info:focus,.btn-info:hover,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#46b8da;background-image:-webkit-linear-gradient(top,#5bc0de 0,#46b8da 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#46b8da 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#46b8da));background-image:linear-gradient(to bottom,#5bc0de 0,#46b8da 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff46b8da', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border:1px solid #31b0d5}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{text-shadow:0 1px rgba(0,0,0,.3);background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border:1px solid #28a1c5;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.3);box-shadow:inset 0 1px 2px rgba(0,0,0,.3)}.btn-info.focus,.btn-info:focus{border:1px solid #46b8da;-webkit-box-shadow:inset 0 0 0 1px #fff;box-shadow:inset 0 0 0 1px #fff}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;background-image:-webkit-linear-gradient(top,#5bc0de 0,#5bc0de 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#5bc0de 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#5bc0de));background-image:linear-gradient(to bottom,#5bc0de 0,#5bc0de 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff5bc0de', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border:1px solid #46b8da;-webkit-box-shadow:none;box-shadow:none}.btn-info .badge{color:#46b8da;background-color:#fff}.btn-warning{color:#fff;text-shadow:0 1px rgba(0,0,0,.1);background-image:-webkit-linear-gradient(top,#fbb450 0,#faa937 100%);background-image:-o-linear-gradient(top,#fbb450 0,#faa937 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fbb450),to(#faa937));background-image:linear-gradient(to bottom,#fbb450 0,#faa937 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fffaa937', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border:1px solid #faa328}.btn-warning:hover{text-shadow:0 1px rgba(0,0,0,.3);-webkit-box-shadow:0 1px 1px rgba(0,0,0,.2);box-shadow:0 1px 1px rgba(0,0,0,.2)}.btn-warning.active,.btn-warning.focus,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#f99e1e;background-image:-webkit-linear-gradient(top,#fbb450 0,#f99e1e 100%);background-image:-o-linear-gradient(top,#fbb450 0,#f99e1e 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fbb450),to(#f99e1e));background-image:linear-gradient(to bottom,#fbb450 0,#f99e1e 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff99e1e', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border:1px solid #f9980f}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{text-shadow:0 1px rgba(0,0,0,.3);background-image:-webkit-linear-gradient(top,#fbb450 0,#f89306 100%);background-image:-o-linear-gradient(top,#fbb450 0,#f89306 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fbb450),to(#f89306));background-image:linear-gradient(to bottom,#fbb450 0,#f89306 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89306', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border:1px solid #e98b06;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.3);box-shadow:inset 0 1px 2px rgba(0,0,0,.3)}.btn-warning.focus,.btn-warning:focus{border:1px solid #faa328;-webkit-box-shadow:inset 0 0 0 1px #fff;box-shadow:inset 0 0 0 1px #fff}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#fbb450;background-image:-webkit-linear-gradient(top,#fbb450 0,#faa937 100%);background-image:-o-linear-gradient(top,#fbb450 0,#faa937 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fbb450),to(#faa937));background-image:linear-gradient(to bottom,#fbb450 0,#faa937 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fffaa937', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border:1px solid #faa328;-webkit-box-shadow:none;box-shadow:none}.btn-warning .badge{color:#faa328;background-color:#fff}.btn-danger{color:#fff;text-shadow:0 1px rgba(0,0,0,.1);background-image:-webkit-linear-gradient(top,#dd4b39 0,#d14836 100%);background-image:-o-linear-gradient(top,#dd4b39 0,#d14836 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dd4b39),to(#d14836));background-image:linear-gradient(to bottom,#dd4b39 0,#d14836 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdd4b39', endColorstr='#ffd14836', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border:1px solid #c6322a}.btn-danger:hover{text-shadow:0 1px rgba(0,0,0,.3);-webkit-box-shadow:0 1px 1px rgba(0,0,0,.2);box-shadow:0 1px 1px rgba(0,0,0,.2)}.btn-danger.active,.btn-danger.focus,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c13e2c;background-image:-webkit-linear-gradient(top,#dd4b39 0,#c13e2c 100%);background-image:-o-linear-gradient(top,#dd4b39 0,#c13e2c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dd4b39),to(#c13e2c));background-image:linear-gradient(to bottom,#dd4b39 0,#c13e2c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdd4b39', endColorstr='#ffc13e2c', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border:1px solid #b12d26}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{text-shadow:0 1px rgba(0,0,0,.3);background-image:-webkit-linear-gradient(top,#dd4b39 0,#ad3727 100%);background-image:-o-linear-gradient(top,#dd4b39 0,#ad3727 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dd4b39),to(#ad3727));background-image:linear-gradient(to bottom,#dd4b39 0,#ad3727 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdd4b39', endColorstr='#ffad3727', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border:1px solid #9c2721;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.3);box-shadow:inset 0 1px 2px rgba(0,0,0,.3)}.btn-danger.focus,.btn-danger:focus{border:1px solid #c6322a;-webkit-box-shadow:inset 0 0 0 1px #fff;box-shadow:inset 0 0 0 1px #fff}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#dd4b39;background-image:-webkit-linear-gradient(top,#dd4b39 0,#d14836 100%);background-image:-o-linear-gradient(top,#dd4b39 0,#d14836 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dd4b39),to(#d14836));background-image:linear-gradient(to bottom,#dd4b39 0,#d14836 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdd4b39', endColorstr='#ffd14836', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border:1px solid #c6322a;-webkit-box-shadow:none;box-shadow:none}.btn-danger .badge{color:#c6322a;background-color:#fff}.btn-link{color:#15c}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link.focus,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link.focus,.btn-link:focus,.btn-link:hover{color:#15c;background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link[disabled]:focus .btn-link[disabled].focus,.btn-link[disabled]:focus fieldset[disabled] .btn-link.focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus .btn-link[disabled].focus,fieldset[disabled] .btn-link:focus fieldset[disabled] .btn-link.focus,fieldset[disabled] .btn-link:hover{color:#333}.btn-group-lg>.btn,.btn-lg{padding:9px 14px;font-size:14px;line-height:1.3;border-radius:2px}.btn-group-sm>.btn,.btn-sm{padding:3px 8px;font-size:12px;line-height:1.5;border-radius:2px}.btn-group-xs>.btn,.btn-xs{padding:2px 6px;font-size:11px;line-height:1.25;border-radius:1px}.dropdown-menu{padding:6px 0;margin:1px 0 0;font-size:13px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:0;-webkit-box-shadow:0 2px 4px rgba(0,0,0,.2);box-shadow:0 2px 4px rgba(0,0,0,.2)}.dropdown-menu .divider{height:1px;margin:8px 0;overflow:hidden;background-color:#ebebeb}.dropdown-menu>li>a{position:relative;padding:3px 30px}.dropdown-menu>li>a .glyphicon{position:absolute;top:4px;left:7px}.dropdown-menu li>a:focus,.dropdown-menu li>a:hover,.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{color:#333;background-color:#eee;background-image:-webkit-linear-gradient(top,#eee 0,#eee 100%);background-image:-o-linear-gradient(top,#eee 0,#eee 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#eee),to(#eee));background-image:linear-gradient(to bottom,#eee 0,#eee 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffeeeeee', endColorstr='#ffeeeeee', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#333;background-color:#eee;background-image:-webkit-linear-gradient(top,#eee 0,#eee 100%);background-image:-o-linear-gradient(top,#eee 0,#eee 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#eee),to(#eee));background-image:linear-gradient(to bottom,#eee 0,#eee 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffeeeeee', endColorstr='#ffeeeeee', GradientType=0);background-repeat:repeat-x}.dropdown-header{color:#999}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-left:-1px;border-radius:0}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;border-radius:0}.dropdown-submenu>a:after{position:absolute;right:10px;margin-top:5px;content:""}.dropdown-submenu.dropdown-menu-left,.dropdown-submenu.pull-left{float:none!important}.dropdown-submenu.dropdown-menu-left>.dropdown-menu,.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:18px;border-radius:0}.btn-group-vertical>.btn:focus,.btn-group>.btn:focus{z-index:3}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:16px}.btn-group>.btn+.dropdown-toggle{-webkit-box-shadow:none;box-shadow:none}.btn-group>.dropdown-toggle:hover{-webkit-box-shadow:0 1px 1px rgba(0,0,0,.1);box-shadow:0 1px 1px rgba(0,0,0,.1)}.btn-group>.btn-danger.dropdown-toggle:hover,.btn-group>.btn-info.dropdown-toggle:hover,.btn-group>.btn-primary.dropdown-toggle:hover,.btn-group>.btn-success.dropdown-toggle:hover,.btn-group>.btn-warning.dropdown-toggle:hover{-webkit-box-shadow:0 1px 1px rgba(0,0,0,.2);box-shadow:0 1px 1px rgba(0,0,0,.2)}.btn-group>.btn.dropdown-toggle.active,.btn-group>.btn.dropdown-toggle:active{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.btn-group>.btn-danger.dropdown-toggle.active,.btn-group>.btn-danger.dropdown-toggle:active,.btn-group>.btn-info.dropdown-toggle.active,.btn-group>.btn-info.dropdown-toggle:active,.btn-group>.btn-primary.dropdown-toggle.active,.btn-group>.btn-primary.dropdown-toggle:active,.btn-group>.btn-success.dropdown-toggle.active,.btn-group>.btn-success.dropdown-toggle:active,.btn-group>.btn-warning.dropdown-toggle.active,.btn-group>.btn-warning.dropdown-toggle:active{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.3);box-shadow:inset 0 1px 2px rgba(0,0,0,.3)}.btn-group>.btn-sm.dropdown-toggle{padding:5px 7px}.btn-group>.btn-lg.dropdown-toggle{padding:9px 9px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 1px 6px rgba(0,0,0,.15);box-shadow:inset 0 1px 6px rgba(0,0,0,.15)}.btn-group.open .btn.dropdown-toggle{background-color:#f3f3f3;background-image:none;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.btn-group.open .btn-primary.dropdown-toggle{background-color:#4d90fe;background-image:none;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.3);box-shadow:inset 0 1px 2px rgba(0,0,0,.3)}.btn-group.open .btn-warning.dropdown-toggle{background-color:#faa937;background-image:none;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.3);box-shadow:inset 0 1px 2px rgba(0,0,0,.3)}.btn-group.open .btn-danger.dropdown-toggle{background-color:#d84a38;background-image:none;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.3);box-shadow:inset 0 1px 2px rgba(0,0,0,.3)}.btn-group.open .btn-success.dropdown-toggle{background-color:#35aa47;background-image:none;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.3);box-shadow:inset 0 1px 2px rgba(0,0,0,.3)}.btn-group.open .btn-info.dropdown-toggle{background-color:#5bc0de;background-image:none;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.3);box-shadow:inset 0 1px 2px rgba(0,0,0,.3)}.btn-lg .caret{border-width:5px 5px 0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:2px;border-top-right-radius:2px}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-right-radius:2px;border-bottom-left-radius:2px}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:38px;padding:9px 14px;font-size:14px;line-height:1.3;border-radius:1px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:38px;line-height:38px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:26px;padding:3px 8px;font-size:12px;line-height:1.5;border-radius:1px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:26px;line-height:26px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{margin:0;border-radius:0}.input-group-addon{padding:5px 8px;font-size:13px;color:#555;border:1px solid #d9d9d9;border-top-color:silver;border-radius:2px}.input-group-addon.input-sm{padding:3px 8px;font-size:12px;border-radius:1px}.input-group-addon.input-lg{padding:9px 14px;font-size:14px;border-radius:1px}.input-group-addon input[type=radio],.input-group-addon input[type=checkbox]{margin-bottom:-3px}.nav>li.disabled>a{color:#999}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#999}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{color:#fff;background-color:#999;border-color:#999}.nav-tabs>li>a{color:#666;border-radius:2px 2px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{font-weight:700;color:#333}.nav-tabs-google>li{margin:0 -1px 0 0}.nav-tabs-google>li>a{padding:12px 8px;margin:0 8px;line-height:1.4;color:#777;border:3px solid transparent;border-width:3px 0;border-radius:0}.nav-tabs-google>li>a:first-of-type{margin-left:0}.nav-tabs-google>li>a:focus,.nav-tabs-google>li>a:hover{background-color:transparent;border-top-color:transparent}.nav-tabs-google>li>a:hover{color:#000;border-bottom-color:transparent}.nav-tabs-google>li>a:active{color:#dd4b39}.nav-tabs-google>li>a:focus{color:#000;outline:0}.nav-tabs-google>li.active>a,.nav-tabs-google>li.active>a:focus,.nav-tabs-google>li.active>a:hover{color:#dd4b39;border:3px solid transparent;border-width:3px 0;border-bottom-color:#dd4b39}.nav-pills>li>a{border-radius:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#4d90fe}.navbar{min-height:28px;margin-bottom:18px}@media (min-width:768px){.navbar{border-radius:2px}}.navbar-brand{height:28px;padding:5px 15px;font-size:14px;line-height:18px}.navbar-brand>.glyphicon{margin-top:0}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{padding:5px 10px;margin-top:1px;margin-right:15px;margin-bottom:1px;border-radius:2px}.navbar-nav{margin:2px -15px}.navbar-nav>li>a{padding-top:5px;padding-bottom:5px;line-height:18px}@media (max-width:767px){.navbar-nav .open .dropdown-menu>li>a{line-height:18px}}@media (min-width:768px){.navbar-nav{margin:0}.navbar-nav>li>a{padding-top:5px;padding-bottom:5px}}.navbar-form{padding:10px 15px;margin-top:0;margin-right:-15px;margin-bottom:0;margin-left:-15px;-webkit-box-shadow:none;box-shadow:none}.navbar-form>.input-group .form-control{margin-top:1px;margin-bottom:1px}@media (min-width:768px){.navbar-form{padding-top:0;padding-bottom:0;margin-right:0;margin-left:0}}.navbar-form .form-control{height:26px;padding:3px 8px}.navbar .btn,.navbar-btn{padding:3px 8px;margin-top:1px;margin-bottom:1px}.navbar .btn.btn-sm,.navbar-btn.btn-sm{margin-top:1px;margin-bottom:1px}.navbar .btn.btn-xs,.navbar-btn.btn-xs{padding:2px 6px;margin-top:4px;margin-bottom:4px}.navbar-text{margin-top:5px;margin-bottom:5px}.navbar-default{background-color:#2d2d2d;border-color:#000}.navbar-default .navbar-brand{color:#999}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-default .navbar-brand>.caret{border-top-color:#999;border-bottom-color:#999}.navbar-default .navbar-text{color:#999}.navbar-default .navbar-nav>li>a{color:#999}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#fff;background-color:#141414}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#555;background-color:transparent}.navbar-default .navbar-toggle{border-color:#222}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#333}.navbar-default .navbar-toggle .icon-bar{background-color:#fff}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#000}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#fff;background-color:#141414}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#999}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#141414}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#555;background-color:transparent}}.navbar-default .navbar-link{color:#999}.navbar-default .navbar-link:hover{color:#fff}.navbar-default .btn-link{color:#999}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#fff}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#555}.navbar-inverse{background-color:#fafafa;border-color:#dbdbdb}.navbar-inverse .navbar-brand{color:#999}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:grey;background-color:transparent}.navbar-inverse .navbar-brand>.caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .navbar-nav>li>a{color:#999}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#333;background-color:#e1e1e1}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#ddd}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#ddd}.navbar-inverse .navbar-toggle .icon-bar{background-color:#888}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#e8e8e8}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#333;background-color:#e1e1e1}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#dbdbdb}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#dbdbdb}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#999}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#333;background-color:#e1e1e1}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#333}.navbar-inverse .btn-link{color:#999}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#333}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#ccc}.navbar-masthead{min-height:44px;margin-bottom:18px}@media (min-width:768px){.navbar-masthead{border-radius:2px}}.navbar-masthead .navbar-static-top{z-index:1005}.navbar-masthead .navbar-fixed-bottom,.navbar-masthead .navbar-fixed-top{z-index:1029}.navbar-masthead .navbar-brand{height:44px;padding:13px 15px;font-size:20px}.navbar-masthead .navbar-brand>.glyphicon{margin-top:-3px}@media (min-width:768px){.navbar>.container .navbar-masthead .navbar-brand,.navbar>.container-fluid .navbar-masthead .navbar-brand{margin-left:-15px}}.navbar-masthead .navbar-toggle{margin-top:7px;margin-right:15px;margin-bottom:7px}.navbar-masthead .navbar-nav{margin:6px -15px}@media (min-width:768px){.navbar-masthead .navbar-nav{margin:6px 0}.navbar-masthead .navbar-nav>li>a{padding-top:8px;padding-bottom:6px}}.navbar-masthead .navbar-form{padding:10px 15px;margin-top:0;margin-right:-15px;margin-bottom:0;margin-left:-15px}.navbar-masthead .navbar-form>.input-group .form-control{margin-top:7px;margin-bottom:7px}@media (max-width:767px){.navbar-masthead .navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-masthead .navbar-form{padding-top:0;padding-bottom:0;margin-right:0;margin-left:0}}.navbar-masthead .navbar-form .form-control{height:30px;padding:5px 8px}.navbar-masthead.navbar .btn,.navbar-masthead.navbar-btn{padding:5px 8px;margin-top:7px;margin-bottom:7px}.navbar-masthead.navbar .btn.btn-sm,.navbar-masthead.navbar-btn.btn-sm{padding:3px 8px;margin-top:9px;margin-bottom:9px}.navbar-masthead.navbar .btn.btn-xs,.navbar-masthead.navbar-btn.btn-xs{padding:2px 6px;margin-top:12px;margin-bottom:12px}.navbar-masthead .navbar-text{margin-top:13px;margin-bottom:13px}.navbar-masthead.navbar-default{background-color:#f1f1f1;border-color:#e5e5e5}.navbar-masthead.navbar-default .navbar-brand{color:#777}.navbar-masthead.navbar-default .navbar-brand:focus,.navbar-masthead.navbar-default .navbar-brand:hover{color:#777;background-color:transparent}.navbar-masthead.navbar-default .navbar-brand>.caret{border-top-color:#777;border-bottom-color:#777}.navbar-masthead.navbar-default .navbar-text{color:#777}.navbar-masthead.navbar-default .navbar-nav>li>a{color:#777}.navbar-masthead.navbar-default .navbar-nav>li>a:focus,.navbar-masthead.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-masthead.navbar-default .navbar-nav>.active>a,.navbar-masthead.navbar-default .navbar-nav>.active>a:focus,.navbar-masthead.navbar-default .navbar-nav>.active>a:hover{color:#333;background-color:#f1f1f1}.navbar-masthead.navbar-default .navbar-nav>.disabled>a,.navbar-masthead.navbar-default .navbar-nav>.disabled>a:focus,.navbar-masthead.navbar-default .navbar-nav>.disabled>a:hover{color:#bbb;background-color:transparent}.navbar-masthead.navbar-default .navbar-toggle{border-color:#dcdcdc}.navbar-masthead.navbar-default .navbar-toggle:focus,.navbar-masthead.navbar-default .navbar-toggle:hover{background-color:#e4e4e4}.navbar-masthead.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-masthead.navbar-default .navbar-collapse,.navbar-masthead.navbar-default .navbar-form{border-color:#dfdfdf}.navbar-masthead.navbar-default .navbar-nav>.open>a,.navbar-masthead.navbar-default .navbar-nav>.open>a:focus,.navbar-masthead.navbar-default .navbar-nav>.open>a:hover{color:#333;background-color:#f1f1f1}@media (max-width:767px){.navbar-masthead.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-masthead.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-masthead.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-masthead.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-masthead.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-masthead.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#333;background-color:#f1f1f1}.navbar-masthead.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-masthead.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-masthead.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#bbb;background-color:transparent}}.navbar-masthead.navbar-default .navbar-link{color:#777}.navbar-masthead.navbar-default .navbar-link:hover{color:#333}.navbar-masthead.navbar-default .btn-link{color:#777}.navbar-masthead.navbar-default .btn-link:focus,.navbar-masthead.navbar-default .btn-link:hover{color:#333}.navbar-masthead.navbar-default .btn-link[disabled]:focus,.navbar-masthead.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-masthead.navbar-default .btn-link:focus,fieldset[disabled] .navbar-masthead.navbar-default .btn-link:hover{color:#bbb}.navbar-masthead.navbar-inverse{background-color:#444;border-color:#333}.navbar-masthead.navbar-inverse .navbar-brand{color:#fff}.navbar-masthead.navbar-inverse .navbar-brand:focus,.navbar-masthead.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-masthead.navbar-inverse .navbar-brand>.caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-masthead.navbar-inverse .navbar-text{color:#999}.navbar-masthead.navbar-inverse .navbar-nav>li>a{color:#fff}.navbar-masthead.navbar-inverse .navbar-nav>li>a:focus,.navbar-masthead.navbar-inverse .navbar-nav>li>a:hover{color:#bbb;background-color:transparent}.navbar-masthead.navbar-inverse .navbar-nav>.active>a,.navbar-masthead.navbar-inverse .navbar-nav>.active>a:focus,.navbar-masthead.navbar-inverse .navbar-nav>.active>a:hover{color:#bbb;background-color:#444}.navbar-masthead.navbar-inverse .navbar-nav>.disabled>a,.navbar-masthead.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-masthead.navbar-inverse .navbar-nav>.disabled>a:hover{color:#777;background-color:transparent}.navbar-masthead.navbar-inverse .navbar-toggle{border-color:#222}.navbar-masthead.navbar-inverse .navbar-toggle:focus,.navbar-masthead.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-masthead.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-masthead.navbar-inverse .navbar-collapse,.navbar-masthead.navbar-inverse .navbar-form{border-color:#323232}.navbar-masthead.navbar-inverse .navbar-nav>.open>a,.navbar-masthead.navbar-inverse .navbar-nav>.open>a:focus,.navbar-masthead.navbar-inverse .navbar-nav>.open>a:hover{color:#bbb;background-color:#444}@media (max-width:767px){.navbar-masthead.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#333}.navbar-masthead.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#333}.navbar-masthead.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#fff}.navbar-masthead.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-masthead.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#bbb;background-color:transparent}.navbar-masthead.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-masthead.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-masthead.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#bbb;background-color:#444}.navbar-masthead.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-masthead.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-masthead.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#777;background-color:transparent}}.navbar-masthead.navbar-inverse .navbar-link{color:#fff}.navbar-masthead.navbar-inverse .navbar-link:hover{color:#bbb}.navbar-masthead.navbar-inverse .btn-link{color:#fff}.navbar-masthead.navbar-inverse .btn-link:focus,.navbar-masthead.navbar-inverse .btn-link:hover{color:#bbb}.navbar-masthead.navbar-inverse .btn-link[disabled]:focus,.navbar-masthead.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-masthead.navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-masthead.navbar-inverse .btn-link:hover{color:#777}.navbar-toolbar{min-height:36px;margin-bottom:18px}@media (min-width:768px){.navbar-toolbar{border-radius:2px}}.navbar-toolbar .navbar-static-top{z-index:1008}.navbar-toolbar .navbar-fixed-bottom,.navbar-toolbar .navbar-fixed-top{z-index:1028}.navbar-toolbar .navbar-brand{height:36px;padding:9px 15px;font-size:16px;font-weight:700}@media (min-width:768px){.navbar>.container .navbar-toolbar .navbar-brand,.navbar>.container-fluid .navbar-toolbar .navbar-brand{margin-left:-15px}}.navbar-toolbar .navbar-toggle{margin-top:3px;margin-right:15px;margin-bottom:3px}.navbar-toolbar .navbar-nav{margin:4px -15px}.navbar-toolbar .navbar-nav>li{position:relative}.navbar-toolbar .navbar-nav>li>a{padding:9px 15px}.navbar-toolbar .navbar-nav>li>a:focus,.navbar-toolbar .navbar-nav>li>a:hover{text-decoration:underline}.navbar-toolbar .navbar-nav>li>.dropdown-menu{margin-top:1px}.navbar-toolbar .navbar-nav>.active>a{font-weight:700}.navbar-toolbar .navbar-nav>.active>a:before{position:absolute;bottom:-1px;left:50%;display:inline-block;margin-left:-8px;content:'';border-right:8px solid transparent;border-bottom:8px solid transparent;border-left:8px solid transparent}.navbar-toolbar .navbar-nav>.active>a:after{position:absolute;bottom:-1px;left:50%;display:inline-block;margin-left:-7px;content:'';border-right:7px solid transparent;border-bottom:7px solid transparent;border-left:7px solid transparent}@media (min-width:768px){.navbar-toolbar .navbar-nav{margin:0}.navbar-toolbar .navbar-nav>li>a{padding-top:9px;padding-bottom:9px}}.navbar-toolbar .navbar-form{padding:10px 15px;margin-top:0;margin-right:-15px;margin-bottom:0;margin-left:-15px}.navbar-toolbar .navbar-form>.input-group .form-control{margin-top:3px;margin-bottom:3px}@media (max-width:767px){.navbar-toolbar .navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-toolbar .navbar-form{padding-top:0;padding-bottom:0;margin-right:0;margin-left:0}}.navbar-toolbar .navbar-form .form-control{height:30px;padding:5px 8px}.navbar-toolbar .dropdown-menu{border-top:1px none}.navbar-toolbar.navbar .btn,.navbar-toolbar.navbar-btn{padding:5px 8px;margin-top:3px;margin-bottom:3px}.navbar-toolbar.navbar .btn.btn-sm,.navbar-toolbar.navbar-btn.btn-sm{padding:3px 8px;margin-top:5px;margin-bottom:5px}.navbar-toolbar.navbar .btn.btn-xs,.navbar-toolbar.navbar-btn.btn-xs{padding:2px 6px;margin-top:8px;margin-bottom:8px}.navbar-toolbar .navbar-text{margin-top:9px;margin-bottom:9px}.navbar-toolbar.navbar-default{background-color:#fff;border-color:#ebebeb}.navbar-toolbar.navbar-default .navbar-brand{color:#dd4b39}.navbar-toolbar.navbar-default .navbar-brand:focus,.navbar-toolbar.navbar-default .navbar-brand:hover{color:#dd4b39;background-color:transparent}.navbar-toolbar.navbar-default .navbar-brand>.caret{border-top-color:#dd4b39;border-bottom-color:#dd4b39}.navbar-toolbar.navbar-default .navbar-text{color:#777}.navbar-toolbar.navbar-default .navbar-nav>li>a{color:#777}.navbar-toolbar.navbar-default .navbar-nav>li>a:focus,.navbar-toolbar.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-toolbar.navbar-default .navbar-nav>.active>a,.navbar-toolbar.navbar-default .navbar-nav>.active>a:focus,.navbar-toolbar.navbar-default .navbar-nav>.active>a:hover{color:#333;background-color:#f2f2f2}.navbar-toolbar.navbar-default .navbar-nav>.active>a:before{border-bottom:8px solid #ebebeb}.navbar-toolbar.navbar-default .navbar-nav>.active>a:after{border-bottom:7px solid #fff}.navbar-toolbar.navbar-default .navbar-nav>.disabled>a,.navbar-toolbar.navbar-default .navbar-nav>.disabled>a:focus,.navbar-toolbar.navbar-default .navbar-nav>.disabled>a:hover{color:#bbb;background-color:transparent}.navbar-toolbar.navbar-default .navbar-toggle{border-color:#dcdcdc}.navbar-toolbar.navbar-default .navbar-toggle:focus,.navbar-toolbar.navbar-default .navbar-toggle:hover{background-color:#e4e4e4}.navbar-toolbar.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-toolbar.navbar-default .navbar-collapse,.navbar-toolbar.navbar-default .navbar-form{border-color:#ededed}.navbar-toolbar.navbar-default .navbar-nav>.open>a,.navbar-toolbar.navbar-default .navbar-nav>.open>a:focus,.navbar-toolbar.navbar-default .navbar-nav>.open>a:hover{color:#333;background-color:#f2f2f2}@media (max-width:767px){.navbar-toolbar.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-toolbar.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-toolbar.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-toolbar.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-toolbar.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-toolbar.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#333;background-color:#f2f2f2}.navbar-toolbar.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-toolbar.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-toolbar.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#bbb;background-color:transparent}}.navbar-toolbar.navbar-default .navbar-link{color:#777}.navbar-toolbar.navbar-default .navbar-link:hover{color:#333}.navbar-toolbar.navbar-default .btn-link{color:#777}.navbar-toolbar.navbar-default .btn-link:focus,.navbar-toolbar.navbar-default .btn-link:hover{color:#333}.navbar-toolbar.navbar-default .btn-link[disabled]:focus,.navbar-toolbar.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-toolbar.navbar-default .btn-link:focus,fieldset[disabled] .navbar-toolbar.navbar-default .btn-link:hover{color:#bbb}.navbar-toolbar.navbar-inverse{background-color:#444;border-color:#333}.navbar-toolbar.navbar-inverse .navbar-brand{color:#fff}.navbar-toolbar.navbar-inverse .navbar-brand:focus,.navbar-toolbar.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-toolbar.navbar-inverse .navbar-brand>.caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-toolbar.navbar-inverse .navbar-text{color:#999}.navbar-toolbar.navbar-inverse .navbar-nav>li>a{color:#fff}.navbar-toolbar.navbar-inverse .navbar-nav>li>a:focus,.navbar-toolbar.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-toolbar.navbar-inverse .navbar-nav>.active>a,.navbar-toolbar.navbar-inverse .navbar-nav>.active>a:focus,.navbar-toolbar.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#444}.navbar-toolbar.navbar-inverse .navbar-nav>.active>a:before{border-bottom:8px solid #333}.navbar-toolbar.navbar-inverse .navbar-nav>.active>a:after{border-bottom:7px solid #fff}.navbar-toolbar.navbar-inverse .navbar-nav>.disabled>a,.navbar-toolbar.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-toolbar.navbar-inverse .navbar-nav>.disabled>a:hover{color:#777;background-color:transparent}.navbar-toolbar.navbar-inverse .navbar-toggle{border-color:#222}.navbar-toolbar.navbar-inverse .navbar-toggle:focus,.navbar-toolbar.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-toolbar.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-toolbar.navbar-inverse .navbar-collapse,.navbar-toolbar.navbar-inverse .navbar-form{border-color:#323232}.navbar-toolbar.navbar-inverse .navbar-nav>.open>a,.navbar-toolbar.navbar-inverse .navbar-nav>.open>a:focus,.navbar-toolbar.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#444}@media (max-width:767px){.navbar-toolbar.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#333}.navbar-toolbar.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#333}.navbar-toolbar.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#fff}.navbar-toolbar.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-toolbar.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-toolbar.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-toolbar.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-toolbar.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#444}.navbar-toolbar.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-toolbar.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-toolbar.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#777;background-color:transparent}}.navbar-toolbar.navbar-inverse .navbar-link{color:#fff}.navbar-toolbar.navbar-inverse .navbar-link:hover{color:#fff}.navbar-toolbar.navbar-inverse .btn-link{color:#fff}.navbar-toolbar.navbar-inverse .btn-link:focus,.navbar-toolbar.navbar-inverse .btn-link:hover{color:#fff}.navbar-toolbar.navbar-inverse .btn-link[disabled]:focus,.navbar-toolbar.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-toolbar.navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-toolbar.navbar-inverse .btn-link:hover{color:#777}.navbar-static-top{border-radius:0}.navbar-fixed-top,.navbar-static-top{border-width:1px 0}.navbar-fixed-bottom{border-width:1px 0}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;border-radius:0}.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}.navbar-fixed-top{top:0}.navbar-fixed-bottom{bottom:0;margin-bottom:0}.navbar-btn{padding:3px 8px;margin-top:1px}.btn.navbar-masthead-btn{margin-top:7px}.btn.navbar-toolbar-btn{margin-top:3px}.navbar-link{color:#999}.navbar-link:hover{color:#fff}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#333}.navbar-form .checkbox-inline,.navbar-form .radio-inline{color:#999}.breadcrumb{padding:13px 15px;margin-bottom:18px;background-color:#f3f3f3;border-radius:2px}.breadcrumb>li+li{position:relative;display:inline-block;margin-left:20px}.breadcrumb>li+li:before{border-radius:5px}.breadcrumb>li+li:after,.breadcrumb>li+li:before{position:absolute;width:0;height:0;content:""}.breadcrumb>li+li:before{border:7px solid transparent}.breadcrumb>li+li:after{border:5px solid transparent}.breadcrumb>li+li:after,.breadcrumb>li+li:before{top:9px;left:100%}.breadcrumb>li+li:before{margin-top:-7px;border-left:7px solid;border-left-color:#777}.breadcrumb>li+li:after{margin-top:-5px;border-left:5px solid #f3f3f3}.breadcrumb>li+li:after,.breadcrumb>li+li:before{left:-16px}.breadcrumb>li+li:before{color:#999;content:""}.breadcrumb>li>a{color:#999}.breadcrumb>li>a:hover{color:#000}.breadcrumb>.active,.breadcrumb>.active>a{color:#000}.breadcrumb-inverse{background-color:#393832}.breadcrumb-inverse>li+li{position:relative;display:inline-block}.breadcrumb-inverse>li+li:before{border-radius:5px}.breadcrumb-inverse>li+li:after,.breadcrumb-inverse>li+li:before{position:absolute;width:0;height:0;content:""}.breadcrumb-inverse>li+li:before{border:7px solid transparent}.breadcrumb-inverse>li+li:after{border:5px solid transparent}.breadcrumb-inverse>li+li:after,.breadcrumb-inverse>li+li:before{top:9px;left:100%}.breadcrumb-inverse>li+li:before{margin-top:-7px;border-left:7px solid;border-left-color:#666}.breadcrumb-inverse>li+li:after{margin-top:-5px;border-left:5px solid #393832}.breadcrumb-inverse>li+li:after,.breadcrumb-inverse>li+li:before{left:-16px}.breadcrumb-inverse>li>a{color:#999}.breadcrumb-inverse>li>a:hover{color:#fff}.breadcrumb-inverse>.active,.breadcrumb-inverse>.active>a{color:#fff}.breadcrumb-sm{padding:4px 15px;background-color:#fff;border-bottom:1px solid #ebebeb}.breadcrumb-sm.breadcrumb-inverse{background-color:#393832}.pagination{margin:18px 0;border-radius:2px}.pagination>li>a,.pagination>li>span{padding:5px 12px;line-height:1.4;color:#333;background-color:#f3f3f3;border:1px solid #dcdcdc}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:2px;border-bottom-left-radius:2px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:2px;border-bottom-right-radius:2px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{color:#333;background-color:#f5f5f5;border-color:#c6c6c6;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.1);box-shadow:0 1px 1px rgba(0,0,0,.1)}.pagination>li>a:active{background-color:#f4f4f4;background-image:-webkit-linear-gradient(top,#f6f6f6 0,#f1f1f1 100%);background-image:-o-linear-gradient(top,#f6f6f6 0,#f1f1f1 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f6f6f6),to(#f1f1f1));background-image:linear-gradient(to bottom,#f6f6f6 0,#f1f1f1 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff6f6f6', endColorstr='#fff1f1f1', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{color:#4d90fe;background-color:#f5f5f5;border-color:#c6c6c6;-webkit-box-shadow:none;box-shadow:none}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#b3b3b3;text-shadow:none;background-color:#f3f3f3;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#f1f1f1 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#f1f1f1 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#f1f1f1));background-image:linear-gradient(to bottom,#f5f5f5 0,#f1f1f1 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff1f1f1', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#d9d9d9;-webkit-box-shadow:none;box-shadow:none}.pagination-lg>li>a,.pagination-lg>li>span{padding:9px 14px;font-size:14px;line-height:1.3}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:1px;border-bottom-left-radius:1px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:1px;border-bottom-right-radius:1px}.pagination-sm>li>a,.pagination-sm>li>span{padding:3px 8px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:1px;border-bottom-left-radius:1px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:1px;border-bottom-right-radius:1px}.pager{margin:18px 0}.pager li>a,.pager li>span{padding:11px 24px;overflow:visible;font-size:14px;color:#777;text-decoration:none;white-space:nowrap;cursor:default;background-color:#fff;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);border:1px solid #5b5b5b;border:1px solid rgba(0,0,0,.1);border-radius:2px;outline:0;-webkit-box-shadow:0 2px 1px rgba(0,0,0,.1),0 0 1px rgba(0,0,0,.1);box-shadow:0 2px 1px rgba(0,0,0,.1),0 0 1px rgba(0,0,0,.1)}.pager li>a:focus,.pager li>a:hover{color:#444;background-color:#fff}.pager li>a:active{color:#444;background-color:#fff}.pager li .icon-prev{position:relative;display:inline-block;padding-right:8px}.pager li .icon-prev:before{border-radius:5px}.pager li .icon-prev:after,.pager li .icon-prev:before{position:absolute;width:0;height:0;content:""}.pager li .icon-prev:before{border:7px solid transparent}.pager li .icon-prev:after{border:4px solid transparent}.pager li .icon-prev:after,.pager li .icon-prev:before{top:-5px;right:100%}.pager li .icon-prev:before{margin-top:-7px;border-right:7px solid;border-right-color:inherit}.pager li .icon-prev:after{margin-top:-4px;border-right:4px solid #fff}.pager li .icon-next{position:relative;display:inline-block;padding-left:8px}.pager li .icon-next:before{border-radius:5px}.pager li .icon-next:after,.pager li .icon-next:before{position:absolute;width:0;height:0;content:""}.pager li .icon-next:before{border:7px solid transparent}.pager li .icon-next:after{border:4px solid transparent}.pager li .icon-next:after,.pager li .icon-next:before{top:-5px;left:100%}.pager li .icon-next:before{margin-top:-7px;border-left:7px solid;border-left-color:inherit}.pager li .icon-next:after{margin-top:-4px;border-left:4px solid #fff}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#b3b3b3;background-color:#fafafa;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);border-color:#d9d9d9;-webkit-box-shadow:none;box-shadow:none}.pager .disabled .icon-prev{position:relative;display:inline-block;padding-right:8px}.pager .disabled .icon-prev:before{border-radius:5px}.pager .disabled .icon-prev:after,.pager .disabled .icon-prev:before{position:absolute;width:0;height:0;content:""}.pager .disabled .icon-prev:before{border:7px solid transparent}.pager .disabled .icon-prev:after{border:4px solid transparent}.pager .disabled .icon-prev:after,.pager .disabled .icon-prev:before{top:-5px;right:100%}.pager .disabled .icon-prev:before{margin-top:-7px;border-right:7px solid;border-right-color:#b3b3b3}.pager .disabled .icon-prev:after{margin-top:-4px;border-right:4px solid #fafafa}.pager .disabled .icon-next{position:relative;display:inline-block;padding-left:8px}.pager .disabled .icon-next:before{border-radius:5px}.pager .disabled .icon-next:after,.pager .disabled .icon-next:before{position:absolute;width:0;height:0;content:""}.pager .disabled .icon-next:before{border:7px solid transparent}.pager .disabled .icon-next:after{border:4px solid transparent}.pager .disabled .icon-next:after,.pager .disabled .icon-next:before{top:-5px;left:100%}.pager .disabled .icon-next:before{margin-top:-7px;border-left:7px solid;border-left-color:#b3b3b3}.pager .disabled .icon-next:after{margin-top:-4px;border-left:4px solid #fafafa}.label{font-size:80%;border-radius:0}.label-default{background-color:#999}.label-default[href]:focus,.label-default[href]:hover{background-color:grey}.label-primary{background-color:#4d90fe}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#1a70fe}.label-success{background-color:#35aa47}.label-success[href]:focus,.label-success[href]:hover{background-color:#298337}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#faa937}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#f89306}.label-danger{background-color:#d84a38}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#b93524}.badge{font-size:12px}.btn-group-xs>.btn .badge,.btn-xs .badge{font-size:11px}.list-group-item.active>.badge,li.list-group-item.active a>.badge{color:#fff;background-color:#dd4b39}.nav-pills>.active>a>.badge{color:#15c;background-color:#fff}.jumbotron{color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{font-size:20px}.container .jumbotron,.container-fluid .jumbotron{border-radius:1px}@media screen and (min-width:768px){.jumbotron .h1,.jumbotron h1{font-size:59px}}.thumbnail{display:block;padding:0;margin-bottom:18px;line-height:1.4;background-color:#fff;border:1px solid #fff;border-radius:0}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#fff;-webkit-box-shadow:0 0 0 1px #dedede;box-shadow:0 0 0 1px #dedede}.thumbnail .caption{padding:9px 4px;color:#000}.alert{padding:8px;margin-bottom:18px;border-radius:2px}.alert .alert-link{font-weight:700}.alert-dismissable,.alert-dismissible{padding-right:28px}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#a3d48e}.alert-success hr{border-top-color:#93cd7c}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#85c5e5}.alert-info hr{border-top-color:#70bbe1}.alert-info .alert-link{color:#245269}.alert-warning{color:#333;background-color:#f9edbe;border-color:#f0c36d}.alert-warning hr{border-top-color:#eeb956}.alert-warning .alert-link{color:#1a1a1a}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#d59595}.alert-danger hr{border-top-color:#ce8383}.alert-danger .alert-link{color:#843534}.alert-danger,.alert-info,.alert-success,.alert-warning{text-shadow:0 1px 0 rgba(255,255,255,.5)}.progress{height:14px;height:18px;padding:1px;margin-bottom:18px;font-size:12px;background-color:transparent;background-image:none;border:1px solid #999;border-radius:0;-webkit-box-shadow:none;box-shadow:none}.progress-bar{line-height:1.25;background-color:#6188f5;background-image:none;-webkit-box-shadow:none;box-shadow:none}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar-success{background-color:#2f973f}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#53bddc}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#fbb450}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#c13e2c}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group-item{color:#222;background-color:#fff;border:1px solid #e5e5e5}.list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.list-group-item:last-child{border-bottom-right-radius:0;border-bottom-left-radius:0}.list-group-item .dropdown{display:none}.list-group-item .dropdown-toggle{display:inline-block;padding:5px 6px 5px 5px;color:#222}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{font-weight:700;color:#dd4b39;background-color:transparent;border-color:#e5e5e5;border-left:4px solid #dd4b39;border-left-color:#dd4b39}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{font-weight:400;color:#888}.list-group-item.active:focus,.list-group-item.active:hover{background-color:#eee}a.list-group-item:focus,a.list-group-item:hover,li.list-group-item a:focus,li.list-group-item a:hover{color:#555;text-decoration:none;background-color:#eee}li.list-group-item{padding:0;margin-bottom:0;border:0 none}li.list-group-item>a{display:block;padding:5px 17px;margin:0 0 0 14px;color:#222}li.list-group-item.active,li.list-group-item.active:focus,li.list-group-item.active:hover{background-color:transparent}li.list-group-item.active:focus>a,li.list-group-item.active:hover>a,li.list-group-item.active>a{margin-left:10px;color:#dd4b39}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#333;background-color:#f9edbe}a.list-group-item-warning,button.list-group-item-warning{color:#333}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#333;background-color:#f7e7a7}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#333;border-color:#333}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-wrapper{margin-left:14px}.list-group-item-wrapper:hover>.dropdown{display:block}.list-group-item-wrapper>a{display:block;padding:5px 17px;margin:0;color:#222}.list-group-item-wrapper>.dropdown:hover+a{background-color:#eee}.list-group-item-wrapper>.dropdown.open{display:block}.list-group-item-wrapper>.dropdown.open+a{background-color:#eee}.list-group-item-wrapper>.dropdown>.dropdown-menu{margin-top:0}.list-group-header{display:block;padding:10px 30px 10px 15px;font-size:11px;font-weight:700;line-height:1.4;color:#999;text-shadow:0 1px 0 rgba(255,255,255,.5);text-transform:uppercase}li.list-group-header{padding:3px 15px}.list-group .list-group-header{margin-top:9px}.list-group-item-menu{padding:0;margin:0;border:0 none;border-radius:0;-webkit-box-shadow:none;box-shadow:none}.list-group-item-menu .list-group-item-wrapper>a{padding-left:30px}.list-group-item-menu .list-group-item-menu .list-group-item-wrapper>a{padding-left:44px}.list-group-item-menu>.list-group-item .collapse-caret{margin-left:28px}.collapse-caret{position:absolute;z-index:1;display:inline-block;width:17px;height:28px;margin-left:14px}.collapse-caret:before{position:absolute;top:12px;left:5px;margin-left:0;content:'';border-bottom:0 dotted}.collapse-caret:hover{background-color:#eee}.collapse-caret.collapsed:before{top:10px;left:6px}.list-group .divider{height:1px;margin:8px 0;margin-right:15px;margin-left:15px;overflow:hidden;background-color:#e5e5e5}.panel{word-wrap:break-word;background-color:#fff;border:1px solid transparent;border-bottom-width:2px;border-radius:3px;-webkit-box-shadow:none;box-shadow:none}.panel-body{padding:15px 20px}.panel-heading{padding:15px 20px;border-top-left-radius:3px;border-top-right-radius:3px}.panel-title{font-size:16px}.panel-footer{padding:15px 20px;background-color:#f8f8f8;border-top:1px solid #e5e5e5;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group{padding:15px 20px;padding-top:0}.panel>.list-group:first-child .list-group-item:first-child{border-top-left-radius:2px;border-top-right-radius:2px}.panel>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:2px;border-bottom-left-radius:2px}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px 20px;padding-left:15px 20px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:2px;border-top-right-radius:2px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:2px;border-top-right-radius:2px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:2px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:2px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:2px;border-bottom-left-radius:2px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:2px;border-bottom-left-radius:2px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:2px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:2px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel-default{border-color:#d8d8d8}.panel-default>.panel-heading{color:#333;background-color:#fff;border-color:#fff}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d8d8d8}.panel-default>.panel-heading .badge{color:#fff;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d8d8d8}.panel-primary{border-color:#4d90fe}.panel-primary>.panel-heading{color:#fff;background-color:#4d90fe;border-color:#4d90fe}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#4d90fe}.panel-primary>.panel-heading .badge{color:#4d90fe;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#4d90fe}.panel-success{border-color:#a3d48e}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#a3d48e}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#a3d48e}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#a3d48e}.panel-info{border-color:#85c5e5}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#85c5e5}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#85c5e5}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#85c5e5}.panel-warning{border-color:#f0c36d}.panel-warning>.panel-heading{color:#333;background-color:#f9edbe;border-color:#f0c36d}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#f0c36d}.panel-warning>.panel-heading .badge{color:#f9edbe;background-color:#333}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#f0c36d}.panel-danger{border-color:#d59595}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#d59595}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d59595}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d59595}.panel-group{margin-bottom:18px}.panel-group .panel{border-color:transparent;border-radius:0}.panel-group .panel+.panel{margin-top:-3px}.panel-group .panel-heading{padding:0 15px;background-color:#fafafa;border-top:1px dashed #ccc;border-bottom:1px dashed #ccc}.panel-group .panel-heading a{display:block;padding:10px 0 9px;color:#444;text-decoration:none}.panel-group .panel-heading a:before{margin-right:7px;content:"\e082"}.panel-group .panel-heading a:hover{background-color:#f5f5f5}.panel-group .panel-heading a:focus{outline:0}.panel-group .panel-heading a.collapsed:before{margin-right:7px;content:"\e081"}.panel-group .panel-heading .panel-title{font-size:13px}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:0 none}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:0 none}.well{background-color:#f1f1f1;border:1px solid #e5e5e5;border-radius:0;-webkit-box-shadow:none;box-shadow:none}.well-lg{border-radius:0}.well-sm{border-radius:0}.scrollable::-webkit-scrollbar{width:10px;height:16px}.scrollable::-webkit-scrollbar:hover{background-color:#f3f3f3;border:1px solid #dbdbdb}.scrollable::-webkit-scrollbar-button:end:increment,.scrollable::-webkit-scrollbar-button:start:decrement{display:block;height:0;background-color:transparent}.scrollable::-webkit-scrollbar-track{-webkit-background-clip:padding-box;background-clip:padding-box;border:solid transparent;border-width:0 0 0 4px}.scrollable::-webkit-scrollbar-track-piece{background-color:transparent;border-radius:0}.scrollable::-webkit-scrollbar-thumb{background-color:#515151;background-color:rgba(0,0,0,.2);-webkit-background-clip:padding-box;background-clip:padding-box;border:solid transparent;border-width:0;-webkit-box-shadow:inset 1px 1px 0 rgba(0,0,0,.1),inset 0 -1px 0 rgba(0,0,0,.07);box-shadow:inset 1px 1px 0 rgba(0,0,0,.1),inset 0 -1px 0 rgba(0,0,0,.07)}.scrollable::-webkit-scrollbar-thumb:hover{background-color:#949494}.scrollable::-webkit-scrollbar-thumb:active{background-color:#3b3b3b;background-color:rgba(0,0,0,.5);-webkit-box-shadow:inset 1px 1px 3px rgba(0,0,0,.35);box-shadow:inset 1px 1px 3px rgba(0,0,0,.35)}.scrollable::-webkit-scrollbar-thumb:horizontal,.scrollable::-webkit-scrollbar-thumb:vertical{background-color:#c6c6c6;border-radius:0}.modal-content{color:#222;border:1px solid #aaa;border:1px solid rgba(0,0,0,.333);border-radius:0;-webkit-box-shadow:0 4px 16px rgba(0,0,0,.2);box-shadow:0 4px 16px rgba(0,0,0,.2)}.modal-backdrop{background-color:#fff}.modal-header .close{font-weight:400;filter:alpha(opacity=40);opacity:.4}.modal-body{padding:15px}.tooltip{font-family:Arial,Helvetica,sans-serif;font-size:11px;font-style:normal;font-weight:400;font-weight:700;line-height:1.4;line-height:1.25;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-break:break-word;word-spacing:normal;word-wrap:normal;white-space:normal;line-break:auto}.tooltip.in{filter:alpha(opacity=100);opacity:1}.tooltip-inner{padding:7px 9px;background-color:#2a2a2a;border:1px solid #fff;border-radius:0}.tooltip-arrow:before{position:absolute;z-index:-1;content:" ";border:7px solid transparent}.tooltip.top .tooltip-arrow,.tooltip.top-left .tooltip-arrow,.tooltip.top-right .tooltip-arrow{bottom:1px;border-top-color:#2a2a2a}.tooltip.top .tooltip-arrow:before,.tooltip.top-left .tooltip-arrow:before,.tooltip.top-right .tooltip-arrow:before{top:-5px;left:-7px;border-top-color:#fff;border-bottom:0 dotted}.tooltip.right .tooltip-arrow{left:1px;border-right-color:#2a2a2a}.tooltip.right .tooltip-arrow:before{top:-7px;right:-5px;border-right-color:#fff;border-left:0 dotted}.tooltip.left .tooltip-arrow{right:1px;border-left-color:#2a2a2a}.tooltip.left .tooltip-arrow:before{top:-7px;left:-5px;border-right:0 dotted;border-left-color:#fff}.tooltip.bottom .tooltip-arrow,.tooltip.bottom-left .tooltip-arrow,.tooltip.bottom-right .tooltip-arrow{top:1px;border-bottom-color:#2a2a2a}.tooltip.bottom .tooltip-arrow:before,.tooltip.bottom-left .tooltip-arrow:before,.tooltip.bottom-right .tooltip-arrow:before{bottom:-5px;left:-7px;border-top:0 dotted;border-bottom-color:#fff}.popover{padding:0;font-family:Arial,Helvetica,sans-serif;font-size:13px;font-style:normal;font-weight:400;line-height:1.4;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;border-radius:2px;-webkit-box-shadow:0 2px 10px rgba(0,0,0,.2);box-shadow:0 2px 10px rgba(0,0,0,.2);line-break:auto}.popover-footer,.popover-title{padding:10px;font-size:13px;background-color:#f5f5f5;border-bottom:1px solid #ccc;border-bottom:1px solid rgba(0,0,0,.2);border-radius:0}.popover-footer{border-top:1px solid #ccc;border-top:1px solid rgba(0,0,0,.2);border-bottom:none}.popover-content{padding:10px}.carousel{width:100%;padding:50px;overflow:hidden;background-color:#f5f5f5;background-image:-webkit-linear-gradient(top,#eee 0,#f5f5f5 100%),-webkit-linear-gradient(bottom,#eee 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#eee 0,#f5f5f5 100%),-o-linear-gradient(bottom,#eee 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#eee),to(#f5f5f5)),-webkit-gradient(linear,left bottom,left top,from(#eee),to(#f5f5f5));background-image:linear-gradient(to bottom,#eee 0,#f5f5f5 100%),linear-gradient(to top,#eee 0,#f5f5f5 100%);background-repeat:no-repeat;background-position:0 0,0 100%;-webkit-background-size:100% 10px;background-size:100% 10px}.carousel-control{width:100px;color:#777;text-shadow:none;filter:alpha(opacity=33);opacity:.33}.carousel-control.left{background-image:none}.carousel-control.right{background-image:none}.carousel-control:focus,.carousel-control:hover{color:#777}.carousel-control .icon-next:before,.carousel-control .icon-prev:before{content:''}.carousel-control .icon-prev{position:relative;position:absolute;right:0;display:inline-block}.carousel-control .icon-prev:before{border-radius:20px}.carousel-control .icon-prev:after,.carousel-control .icon-prev:before{position:absolute;width:0;height:0;content:""}.carousel-control .icon-prev:before{border:22px solid transparent}.carousel-control .icon-prev:after{border:19px solid transparent}.carousel-control .icon-prev:after,.carousel-control .icon-prev:before{top:8px;right:100%}.carousel-control .icon-prev:before{margin-top:-22px;border-right:22px solid;border-right-color:#777}.carousel-control .icon-prev:after{margin-top:-19px;border-right:19px solid #f5f5f5}.carousel-control .icon-next{position:relative;position:absolute;right:0;left:50%;display:inline-block}.carousel-control .icon-next:before{border-radius:20px}.carousel-control .icon-next:after,.carousel-control .icon-next:before{position:absolute;width:0;height:0;content:""}.carousel-control .icon-next:before{border:22px solid transparent}.carousel-control .icon-next:after{border:19px solid transparent}.carousel-control .icon-next:after,.carousel-control .icon-next:before{top:8px;left:100%}.carousel-control .icon-next:before{margin-top:-22px;border-left:22px solid;border-left-color:#777}.carousel-control .icon-next:after{margin-top:-19px;border-left:19px solid #f5f5f5}.carousel-control .icon-next:after,.carousel-control .icon-next:before{left:50%}.carousel-indicators{bottom:5px;left:0;width:100%;margin-left:0}.carousel-indicators li{background-color:#c2c2c2;border:1px solid #c2c2c2}.carousel-indicators .active{width:10px;height:10px;margin:1px;background-color:#444;border:1px solid #444}.carousel-caption{right:0;bottom:0;left:0;padding:10px;color:#fff;text-shadow:none;background-color:#262626;background-color:rgba(0,0,0,.55)}
-/*# sourceMappingURL=todc-bootstrap.min.css.map */
\ No newline at end of file
diff --git a/src/DjangoBlog/blog/static/assets/img/checkmark.png b/src/DjangoBlog/blog/static/assets/img/checkmark.png
deleted file mode 100644
index 4bd0eb350087ae1c5dedf8dfce9d24272d6db7a8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 221
zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fjKx9jP7LeL$-D$|rhB?LhIn`<
zrz{XmSTb=Z&*38p6En+u{{Q{|+S|v#(9kHqZt~J1u~=QV01lshZx0+fvtho3b7I!N
zzo`X(CakVvh~#fO=oFl9W?*1+b#juy;s5o$?>AkQcH>Qx;N@~rlJFJ%ut7mhgTe~DWM4f;?+@i
diff --git a/src/DjangoBlog/blog/static/assets/js/ie-emulation-modes-warning.js b/src/DjangoBlog/blog/static/assets/js/ie-emulation-modes-warning.js
deleted file mode 100644
index 3f97ba5..0000000
--- a/src/DjangoBlog/blog/static/assets/js/ie-emulation-modes-warning.js
+++ /dev/null
@@ -1,51 +0,0 @@
-// NOTICE!! DO NOT USE ANY OF THIS JAVASCRIPT
-// IT'S JUST JUNK FOR OUR DOCS!
-// ++++++++++++++++++++++++++++++++++++++++++
-/*!
- * Copyright 2014-2015 Twitter, Inc.
- *
- * Licensed under the Creative Commons Attribution 3.0 Unported License. For
- * details, see https://creativecommons.org/licenses/by/3.0/.
- */
-// Intended to prevent false-positive bug reports about Bootstrap not working properly in old versions of IE due to folks testing using IE's unreliable emulation modes.
-(function () {
- 'use strict';
-
- function emulatedIEMajorVersion() {
- var groups = /MSIE ([0-9.]+)/.exec(window.navigator.userAgent)
- if (groups === null) {
- return null
- }
- var ieVersionNum = parseInt(groups[1], 10)
- var ieMajorVersion = Math.floor(ieVersionNum)
- return ieMajorVersion
- }
-
- function actualNonEmulatedIEMajorVersion() {
- // Detects the actual version of IE in use, even if it's in an older-IE emulation mode.
- // IE JavaScript conditional compilation docs: https://msdn.microsoft.com/library/121hztk3%28v=vs.94%29.aspx
- // @cc_on docs: https://msdn.microsoft.com/library/8ka90k2e%28v=vs.94%29.aspx
- var jscriptVersion = new Function('/*@cc_on return @_jscript_version; @*/')() // jshint ignore:line
- if (jscriptVersion === undefined) {
- return 11 // IE11+ not in emulation mode
- }
- if (jscriptVersion < 9) {
- return 8 // IE8 (or lower; haven't tested on IE<8)
- }
- return jscriptVersion // IE9 or IE10 in any mode, or IE11 in non-IE11 mode
- }
-
- var ua = window.navigator.userAgent
- if (ua.indexOf('Opera') > -1 || ua.indexOf('Presto') > -1) {
- return // Opera, which might pretend to be IE
- }
- var emulated = emulatedIEMajorVersion()
- if (emulated === null) {
- return // Not IE
- }
- var nonEmulated = actualNonEmulatedIEMajorVersion()
-
- if (emulated !== nonEmulated) {
- window.alert('WARNING: You appear to be using IE' + nonEmulated + ' in IE' + emulated + ' emulation mode.\nIE emulation modes can behave significantly differently from ACTUAL older versions of IE.\nPLEASE DON\'T FILE BOOTSTRAP BUGS based on testing in IE emulation modes!')
- }
-})();
diff --git a/src/DjangoBlog/blog/static/assets/js/ie10-viewport-bug-workaround.js b/src/DjangoBlog/blog/static/assets/js/ie10-viewport-bug-workaround.js
deleted file mode 100644
index 479a6eb..0000000
--- a/src/DjangoBlog/blog/static/assets/js/ie10-viewport-bug-workaround.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*!
- * IE10 viewport hack for Surface/desktop Windows 8 bug
- * Copyright 2014-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-
-// See the Getting Started docs for more information:
-// http://getbootstrap.com/getting-started/#support-ie10-width
-
-(function () {
- 'use strict';
-
- if (navigator.userAgent.match(/IEMobile\/10\.0/)) {
- var msViewportStyle = document.createElement('style')
- msViewportStyle.appendChild(
- document.createTextNode(
- '@-ms-viewport{width:auto!important}'
- )
- )
- document.querySelector('head').appendChild(msViewportStyle)
- }
-
-})();
diff --git a/src/DjangoBlog/blog/static/blog/css/ie.css b/src/DjangoBlog/blog/static/blog/css/ie.css
deleted file mode 100644
index 706f510..0000000
--- a/src/DjangoBlog/blog/static/blog/css/ie.css
+++ /dev/null
@@ -1,273 +0,0 @@
-/*
-Styles for older IE versions (previous to IE9).
-*/
-
-body {
- background-color: #e6e6e6;
-}
-body.custom-background-empty {
- background-color: #fff;
-}
-body.custom-background-empty .site,
-body.custom-background-white .site {
- box-shadow: none;
- margin-bottom: 0;
- margin-top: 0;
- padding: 0;
-}
-.assistive-text,
-.site .screen-reader-text {
- clip: rect(1px 1px 1px 1px);
-}
-.full-width .site-content {
- float: none;
- width: 100%;
-}
-img.size-full,
-img.size-large,
-img.header-image,
-img.wp-post-image,
-img[class*="align"],
-img[class*="wp-image-"],
-img[class*="attachment-"] {
- width: auto; /* Prevent stretching of full-size and large-size images with height and width attributes in IE8 */
-}
-.author-avatar {
- float: left;
- margin-top: 8px;
- margin-top: 0.571428571rem;
-}
-.author-description {
- float: right;
- width: 80%;
-}
-.site {
- box-shadow: 0 2px 6px rgba(100, 100, 100, 0.3);
- margin: 48px auto;
- max-width: 960px;
- overflow: hidden;
- padding: 0 40px;
-}
-.site-content {
- float: left;
- width: 65.104166667%;
-}
-body.template-front-page .site-content,
-body.attachment .site-content,
-body.full-width .site-content {
- width: 100%;
-}
-.widget-area {
- float: right;
- width: 26.041666667%;
-}
-.site-header h1,
-.site-header h2 {
- text-align: left;
-}
-.site-header h1 {
- font-size: 26px;
- line-height: 1.846153846;
-}
-.main-navigation ul.nav-menu,
-.main-navigation div.nav-menu > ul {
- border-bottom: 1px solid #ededed;
- border-top: 1px solid #ededed;
- display: inline-block !important;
- text-align: left;
- width: 100%;
-}
-.main-navigation ul {
- margin: 0;
- text-indent: 0;
-}
-.main-navigation li a,
-.main-navigation li {
- display: inline-block;
- text-decoration: none;
-}
-.ie7 .main-navigation li a,
-.ie7 .main-navigation li {
- display: inline;
-}
-.main-navigation li a {
- border-bottom: 0;
- color: #6a6a6a;
- line-height: 3.692307692;
- text-transform: uppercase;
-}
-.main-navigation li a:hover {
- color: #000;
-}
-.main-navigation li {
- margin: 0 40px 0 0;
- position: relative;
-}
-.main-navigation li ul {
- margin: 0;
- padding: 0;
- position: absolute;
- top: 100%;
- z-index: 1;
- height: 1px;
- width: 1px;
- overflow: hidden;
- clip: rect(1px, 1px, 1px, 1px);
-}
-.ie7 .main-navigation li ul {
- clip: inherit;
- display: none;
- left: 0;
- overflow: visible;
-}
-.main-navigation li ul ul,
-.ie7 .main-navigation li ul ul {
- top: 0;
- left: 100%;
-}
-.main-navigation ul li:hover > ul,
-.main-navigation ul li:focus > ul,
-.main-navigation .focus > ul {
- border-left: 0;
- clip: inherit;
- overflow: inherit;
- height: inherit;
- width: inherit;
-}
-.ie7 .main-navigation ul li:hover > ul,
-.ie7 .main-navigation ul li:focus > ul {
- display: block;
-}
-.main-navigation li ul li a {
- background: #efefef;
- border-bottom: 1px solid #ededed;
- display: block;
- font-size: 11px;
- line-height: 2.181818182;
- padding: 8px 10px;
- width: 180px;
-}
-.main-navigation li ul li a:hover {
- background: #e3e3e3;
- color: #444;
-}
-.main-navigation .current-menu-item > a,
-.main-navigation .current-menu-ancestor > a,
-.main-navigation .current_page_item > a,
-.main-navigation .current_page_ancestor > a {
- color: #636363;
- font-weight: bold;
-}
-.main-navigation .menu-toggle {
- display: none;
-}
-.entry-header .entry-title {
- font-size: 22px;
-}
-#respond form input[type="text"] {
- width: 46.333333333%;
-}
-#respond form textarea.blog-textarea {
- width: 79.666666667%;
-}
-.template-front-page .site-content,
-.template-front-page article {
- overflow: hidden;
-}
-.template-front-page.has-post-thumbnail article {
- float: left;
- width: 47.916666667%;
-}
-.entry-page-image {
- float: right;
- margin-bottom: 0;
- width: 47.916666667%;
-}
-/* IE Front Page Template Widget fix */
-.template-front-page .widget-area {
- clear: both;
-}
-.template-front-page .widget {
- width: 100% !important;
- border: none;
-}
-.template-front-page .widget-area .widget,
-.template-front-page .first.front-widgets,
-.template-front-page.two-sidebars .widget-area .front-widgets {
- float: left;
- margin-bottom: 24px;
- width: 51.875%;
-}
-.template-front-page .second.front-widgets,
-.template-front-page .widget-area .widget:nth-child(odd) {
- clear: right;
-}
-.template-front-page .first.front-widgets,
-.template-front-page .second.front-widgets,
-.template-front-page.two-sidebars .widget-area .front-widgets + .front-widgets {
- float: right;
- margin: 0 0 24px;
- width: 39.0625%;
-}
-.template-front-page.two-sidebars .widget,
-.template-front-page.two-sidebars .widget:nth-child(even) {
- float: none;
- width: auto;
-}
-/* add input font for ul {
- text-align: right;
-}
-.rtl .main-navigation ul li ul li,
-.rtl .main-navigation ul li ul li ul li {
- margin-left: 40px;
- margin-right: auto;
-}
-.rtl .main-navigation li ul ul {
- position: absolute;
- bottom: 0;
- right: 100%;
- z-index: 1;
-}
-.ie7 .rtl .main-navigation li ul ul {
- position: absolute;
- bottom: 0;
- right: 100%;
- z-index: 1;
-}
-.ie7 .rtl .main-navigation ul li {
- z-index: 99;
-}
-.ie7 .rtl .main-navigation li ul {
- position: absolute;
- bottom: 100%;
- right: 0;
- z-index: 1;
-}
-.ie7 .rtl .main-navigation li {
- margin-right: auto;
- margin-left: 40px;
-}
-.ie7 .rtl .main-navigation li ul ul ul {
- position: relative;
- z-index: 1;
-}
\ No newline at end of file
diff --git a/src/DjangoBlog/blog/static/blog/css/nprogress.css b/src/DjangoBlog/blog/static/blog/css/nprogress.css
deleted file mode 100644
index 90c7b6c..0000000
--- a/src/DjangoBlog/blog/static/blog/css/nprogress.css
+++ /dev/null
@@ -1,74 +0,0 @@
-/* Make clicks pass-through */
-#nprogress {
- pointer-events: none;
-}
-
-#nprogress .bar {
- background: red;
-
- position: fixed;
- z-index: 1031;
- top: 0;
- left: 0;
-
- width: 100%;
- height: 2px;
-}
-
-/* Fancy blur effect */
-#nprogress .peg {
- display: block;
- position: absolute;
- right: 0px;
- width: 100px;
- height: 100%;
- box-shadow: 0 0 10px #29d, 0 0 5px #29d;
- opacity: 1.0;
-
- -webkit-transform: rotate(3deg) translate(0px, -4px);
- -ms-transform: rotate(3deg) translate(0px, -4px);
- transform: rotate(3deg) translate(0px, -4px);
-}
-
-/* Remove these to get rid of the spinner */
-#nprogress .spinner {
- display: block;
- position: fixed;
- z-index: 1031;
- top: 15px;
- right: 15px;
-}
-
-#nprogress .spinner-icon {
- width: 18px;
- height: 18px;
- box-sizing: border-box;
-
- border: solid 2px transparent;
- border-top-color: red;
- border-left-color: red;
- border-radius: 50%;
-
- -webkit-animation: nprogress-spinner 400ms linear infinite;
- animation: nprogress-spinner 400ms linear infinite;
-}
-
-.nprogress-custom-parent {
- overflow: hidden;
- position: relative;
-}
-
-.nprogress-custom-parent #nprogress .spinner,
-.nprogress-custom-parent #nprogress .bar {
- position: absolute;
-}
-
-@-webkit-keyframes nprogress-spinner {
- 0% { -webkit-transform: rotate(0deg); }
- 100% { -webkit-transform: rotate(360deg); }
-}
-@keyframes nprogress-spinner {
- 0% { transform: rotate(0deg); }
- 100% { transform: rotate(360deg); }
-}
-
diff --git a/src/DjangoBlog/blog/static/blog/css/oauth_style.css b/src/DjangoBlog/blog/static/blog/css/oauth_style.css
deleted file mode 100644
index 8af78af..0000000
--- a/src/DjangoBlog/blog/static/blog/css/oauth_style.css
+++ /dev/null
@@ -1,305 +0,0 @@
-
-.icon-sn-google {
- background-position: 0 -28px;
-}
-
-.icon-sn-bg-google {
- background-color: #4285f4;
- background-position: 0 0;
-}
-
-.fa-sn-google {
- color: #4285f4;
-}
-
-.icon-sn-github {
- background-position: -28px -28px;
-}
-
-.icon-sn-bg-github {
- background-color: #333;
- background-position: -28px 0;
-}
-
-.fa-sn-github {
- color: #333;
-}
-
-.icon-sn-weibo {
- background-position: -56px -28px;
-}
-
-.icon-sn-bg-weibo {
- background-color: #e90d24;
- background-position: -56px 0;
-}
-
-.fa-sn-weibo {
- color: #e90d24;
-}
-
-.icon-sn-qq {
- background-position: -84px -28px;
-}
-
-.icon-sn-bg-qq {
- background-color: #0098e6;
- background-position: -84px 0;
-}
-
-.fa-sn-qq {
- color: #0098e6;
-}
-
-.icon-sn-twitter {
- background-position: -112px -28px;
-}
-
-.icon-sn-bg-twitter {
- background-color: #50abf1;
- background-position: -112px 0;
-}
-
-.fa-sn-twitter {
- color: #50abf1;
-}
-
-.icon-sn-facebook {
- background-position: -140px -28px;
-}
-
-.icon-sn-bg-facebook {
- background-color: #4862a3;
- background-position: -140px 0;
-}
-
-.fa-sn-facebook {
- color: #4862a3;
-}
-
-.icon-sn-renren {
- background-position: -168px -28px;
-}
-
-.icon-sn-bg-renren {
- background-color: #197bc8;
- background-position: -168px 0;
-}
-
-.fa-sn-renren {
- color: #197bc8;
-}
-
-.icon-sn-tqq {
- background-position: -196px -28px;
-}
-
-.icon-sn-bg-tqq {
- background-color: #1f9ed2;
- background-position: -196px 0;
-}
-
-.fa-sn-tqq {
- color: #1f9ed2;
-}
-
-.icon-sn-douban {
- background-position: -224px -28px;
-}
-
-.icon-sn-bg-douban {
- background-color: #279738;
- background-position: -224px 0;
-}
-
-.fa-sn-douban {
- color: #279738;
-}
-
-.icon-sn-weixin {
- background-position: -252px -28px;
-}
-
-.icon-sn-bg-weixin {
- background-color: #00b500;
- background-position: -252px 0;
-}
-
-.fa-sn-weixin {
- color: #00b500;
-}
-
-.icon-sn-dotted {
- background-position: -280px -28px;
-}
-
-.icon-sn-bg-dotted {
- background-color: #eee;
- background-position: -280px 0;
-}
-
-.fa-sn-dotted {
- color: #eee;
-}
-
-.icon-sn-site {
- background-position: -308px -28px;
-}
-
-.icon-sn-bg-site {
- background-color: #00b500;
- background-position: -308px 0;
-}
-
-.fa-sn-site {
- color: #00b500;
-}
-
-.icon-sn-linkedin {
- background-position: -336px -28px;
-}
-
-.icon-sn-bg-linkedin {
- background-color: #0077b9;
- background-position: -336px 0;
-}
-
-.fa-sn-linkedin {
- color: #0077b9;
-}
-
-[class*=icon-sn-] {
- display: inline-block;
- background-image: url('../img/icon-sn.svg');
- background-repeat: no-repeat;
- width: 28px;
- height: 28px;
- vertical-align: middle;
- background-size: auto 56px;
-}
-
-[class*=icon-sn-]:hover {
- opacity: .8;
- filter: alpha(opacity=80);
-}
-
-.btn-sn-google {
- background: #4285f4;
-}
-
-.btn-sn-google:active, .btn-sn-google:focus, .btn-sn-google:hover {
- background: #2a75f3;
-}
-
-.btn-sn-github {
- background: #333;
-}
-
-.btn-sn-github:active, .btn-sn-github:focus, .btn-sn-github:hover {
- background: #262626;
-}
-
-.btn-sn-weibo {
- background: #e90d24;
-}
-
-.btn-sn-weibo:active, .btn-sn-weibo:focus, .btn-sn-weibo:hover {
- background: #d10c20;
-}
-
-.btn-sn-qq {
- background: #0098e6;
-}
-
-.btn-sn-qq:active, .btn-sn-qq:focus, .btn-sn-qq:hover {
- background: #0087cd;
-}
-
-.btn-sn-twitter {
- background: #50abf1;
-}
-
-.btn-sn-twitter:active, .btn-sn-twitter:focus, .btn-sn-twitter:hover {
- background: #38a0ef;
-}
-
-.btn-sn-facebook {
- background: #4862a3;
-}
-
-.btn-sn-facebook:active, .btn-sn-facebook:focus, .btn-sn-facebook:hover {
- background: #405791;
-}
-
-.btn-sn-renren {
- background: #197bc8;
-}
-
-.btn-sn-renren:active, .btn-sn-renren:focus, .btn-sn-renren:hover {
- background: #166db1;
-}
-
-.btn-sn-tqq {
- background: #1f9ed2;
-}
-
-.btn-sn-tqq:active, .btn-sn-tqq:focus, .btn-sn-tqq:hover {
- background: #1c8dbc;
-}
-
-.btn-sn-douban {
- background: #279738;
-}
-
-.btn-sn-douban:active, .btn-sn-douban:focus, .btn-sn-douban:hover {
- background: #228330;
-}
-
-.btn-sn-weixin {
- background: #00b500;
-}
-
-.btn-sn-weixin:active, .btn-sn-weixin:focus, .btn-sn-weixin:hover {
- background: #009c00;
-}
-
-.btn-sn-dotted {
- background: #eee;
-}
-
-.btn-sn-dotted:active, .btn-sn-dotted:focus, .btn-sn-dotted:hover {
- background: #e1e1e1;
-}
-
-.btn-sn-site {
- background: #00b500;
-}
-
-.btn-sn-site:active, .btn-sn-site:focus, .btn-sn-site:hover {
- background: #009c00;
-}
-
-.btn-sn-linkedin {
- background: #0077b9;
-}
-
-.btn-sn-linkedin:active, .btn-sn-linkedin:focus, .btn-sn-linkedin:hover {
- background: #0067a0;
-}
-
-[class*=btn-sn-], [class*=btn-sn-]:active, [class*=btn-sn-]:focus, [class*=btn-sn-]:hover {
- border: none;
- color: #fff;
-}
-
-.btn-sn-more {
- padding: 0;
-}
-
-.btn-sn-more, .btn-sn-more:active, .btn-sn-more:hover {
- box-shadow: none;
-}
-
-[class*=btn-sn-] [class*=icon-sn-] {
- background-color: transparent;
-}
\ No newline at end of file
diff --git a/src/DjangoBlog/blog/static/blog/css/style.css b/src/DjangoBlog/blog/static/blog/css/style.css
deleted file mode 100644
index cdbd790..0000000
--- a/src/DjangoBlog/blog/static/blog/css/style.css
+++ /dev/null
@@ -1,2898 +0,0 @@
-html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video {
- margin: 0;
- padding: 0;
- border: 0;
- font-size: 100%;
- vertical-align: baseline;
-}
-
-body {
- line-height: 1;
-}
-
-ol,
-ul {
- list-style: none;
-}
-
-blockquote,
-q {
- quotes: none;
-}
-
-blockquote:before,
-blockquote:after,
-q:before,
-q:after {
- content: '';
- content: none;
-}
-
-table {
- border-collapse: collapse;
- border-spacing: 0;
-}
-
-caption,
-th,
-td {
- font-weight: normal;
- text-align: left;
-}
-
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
- clear: both;
-}
-
-html {
- overflow-y: scroll;
- font-size: 100%;
- -webkit-text-size-adjust: 100%;
- -ms-text-size-adjust: 100%;
-}
-
-a:focus {
- outline: thin dotted;
-}
-
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-nav,
-section {
- display: block;
-}
-
-audio,
-canvas,
-video {
- display: inline-block;
-}
-
-audio:not([controls]) {
- display: none;
-}
-
-del {
- color: #333;
-}
-
-ins {
- background: #fff9c0;
- text-decoration: none;
-}
-
-hr {
- background-color: #ccc;
- border: 0;
- height: 1px;
- margin: 24px;
- margin-bottom: 1.714285714rem;
-}
-
-sub,
-sup {
- font-size: 75%;
- line-height: 0;
- position: relative;
- vertical-align: baseline;
-}
-
-sup {
- top: -0.5em;
-}
-
-sub {
- bottom: -0.25em;
-}
-
-small {
- font-size: smaller;
-}
-
-img {
- border: 0;
- -ms-interpolation-mode: bicubic;
-}
-
-/* Clearing floats */
-.clear:after,
-.wrapper:after,
-.format-status .entry-header:after {
- clear: both;
-}
-
-.clear:before,
-.clear:after,
-.wrapper:before,
-.wrapper:after,
-.format-status .entry-header:before,
-.format-status .entry-header:after {
- display: table;
- content: "";
-}
-
-
-/* =Repeatable patterns
--------------------------------------------------------------- */
-
-/* Small headers */
-.archive-title,
-.page-title,
-.widget-title,
-.entry-content th,
-.comment-content th {
- font-size: 11px;
- font-size: 0.785714286rem;
- line-height: 2.181818182;
- font-weight: bold;
- text-transform: uppercase;
- color: #636363;
-}
-
-/* Shared Post Format styling */
-article.format-quote footer.entry-meta,
-article.format-link footer.entry-meta,
-article.format-status footer.entry-meta {
- font-size: 11px;
- font-size: 0.785714286rem;
- line-height: 2.181818182;
-}
-
-/* Form fields, general styles first */
-button,
-input,
-select,
-textarea {
- border: 1px solid #ccc;
- border-radius: 3px;
- font-family: inherit;
- padding: 6px;
- padding: 0.428571429rem;
-}
-
-button,
-input {
- line-height: normal;
-}
-
-textarea {
- font-size: 100%;
- overflow: auto;
- vertical-align: top;
-}
-
-/* Reset non-text input types */
-input[type="checkbox"],
-input[type="radio"],
-input[type="file"],
-input[type="hidden"],
-input[type="image"],
-input[type="color"] {
- border: 0;
- border-radius: 0;
- padding: 0;
-}
-
-/* Buttons */
-.menu-toggle,
-input[type="submit"],
-input[type="button"],
-input[type="reset"],
-article.post-password-required input[type=submit],
-.bypostauthor cite span {
- padding: 6px 10px;
- padding: 0.428571429rem 0.714285714rem;
- font-size: 11px;
- font-size: 0.785714286rem;
- line-height: 1.428571429;
- font-weight: normal;
- color: #7c7c7c;
- background-color: #e6e6e6;
- background-repeat: repeat-x;
- background-image: -moz-linear-gradient(top, #f4f4f4, #e6e6e6);
- background-image: -ms-linear-gradient(top, #f4f4f4, #e6e6e6);
- background-image: -webkit-linear-gradient(top, #f4f4f4, #e6e6e6);
- background-image: -o-linear-gradient(top, #f4f4f4, #e6e6e6);
- background-image: linear-gradient(to bottom, #f4f4f4, #e6e6e6);
- border: 1px solid #d2d2d2;
- border-radius: 3px;
- box-shadow: 0 1px 2px rgba(64, 64, 64, 0.1);
-}
-
-.menu-toggle,
-button,
-input[type="submit"],
-input[type="button"],
-input[type="reset"] {
- cursor: pointer;
-}
-
-button[disabled],
-input[disabled] {
- cursor: default;
-}
-
-.menu-toggle:hover,
-.menu-toggle:focus,
-button:hover,
-input[type="submit"]:hover,
-input[type="button"]:hover,
-input[type="reset"]:hover,
-article.post-password-required input[type=submit]:hover {
- color: #5e5e5e;
- background-color: #ebebeb;
- background-repeat: repeat-x;
- background-image: -moz-linear-gradient(top, #f9f9f9, #ebebeb);
- background-image: -ms-linear-gradient(top, #f9f9f9, #ebebeb);
- background-image: -webkit-linear-gradient(top, #f9f9f9, #ebebeb);
- background-image: -o-linear-gradient(top, #f9f9f9, #ebebeb);
- background-image: linear-gradient(to bottom, #f9f9f9, #ebebeb);
-}
-
-.menu-toggle:active,
-.menu-toggle.toggled-on,
-button:active,
-input[type="submit"]:active,
-input[type="button"]:active,
-input[type="reset"]:active {
- color: #757575;
- background-color: #e1e1e1;
- background-repeat: repeat-x;
- background-image: -moz-linear-gradient(top, #ebebeb, #e1e1e1);
- background-image: -ms-linear-gradient(top, #ebebeb, #e1e1e1);
- background-image: -webkit-linear-gradient(top, #ebebeb, #e1e1e1);
- background-image: -o-linear-gradient(top, #ebebeb, #e1e1e1);
- background-image: linear-gradient(to bottom, #ebebeb, #e1e1e1);
- box-shadow: inset 0 0 8px 2px #c6c6c6, 0 1px 0 0 #f4f4f4;
- border-color: transparent;
-}
-
-.bypostauthor cite span {
- color: #fff;
- background-color: #21759b;
- background-image: none;
- border: 1px solid #1f6f93;
- border-radius: 2px;
- box-shadow: none;
- padding: 0;
-}
-
-/* Responsive images */
-.entry-content img,
-.comment-content img,
-.widget img {
- max-width: 100%; /* Fluid images for posts, comments, and widgets */
-}
-
-img[class*="align"],
-img[class*="wp-image-"],
-img[class*="attachment-"] {
- height: auto; /* Make sure images with WordPress-added height and width attributes are scaled correctly */
-}
-
-img.size-full,
-img.size-large,
-img.header-image,
-img.wp-post-image {
- max-width: 100%;
- height: auto; /* Make sure images with WordPress-added height and width attributes are scaled correctly */
-}
-
-/* Make sure videos and embeds fit their containers */
-embed,
-iframe,
-object,
-video {
- max-width: 100%;
-}
-
-.entry-content .twitter-tweet-rendered {
- max-width: 100% !important; /* Override the Twitter embed fixed width */
-}
-
-/* Images */
-.alignleft {
- float: left;
-}
-
-.alignright {
- float: right;
-}
-
-.aligncenter {
- display: block;
- margin-left: auto;
- margin-right: auto;
-}
-
-.entry-content img,
-.comment-content img,
-.widget img,
-img.header-image,
-.author-avatar img,
-img.wp-post-image {
- /* Add fancy borders to all WordPress-added images but not things like badges and icons and the like */
- border-radius: 3px;
- box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2);
-}
-
-.wp-caption {
- max-width: 100%; /* Keep wide captions from overflowing their container. */
- padding: 4px;
-}
-
-.wp-caption .wp-caption-text,
-.gallery-caption,
-.entry-caption {
- font-style: italic;
- font-size: 12px;
- font-size: 0.857142857rem;
- line-height: 2;
- color: #757575;
-}
-
-img.wp-smiley,
-.rsswidget img {
- border: 0;
- border-radius: 0;
- box-shadow: none;
- margin-bottom: 0;
- margin-top: 0;
- padding: 0;
-}
-
-.entry-content dl.gallery-item {
- margin: 0;
-}
-
-.gallery-item a,
-.gallery-caption {
- width: 90%;
-}
-
-.gallery-item a {
- display: block;
-}
-
-.gallery-caption a {
- display: inline;
-}
-
-.gallery-columns-1 .gallery-item a {
- max-width: 100%;
- width: auto;
-}
-
-.gallery .gallery-icon img {
- height: auto;
- max-width: 90%;
- padding: 5%;
-}
-
-.gallery-columns-1 .gallery-icon img {
- padding: 3%;
-}
-
-/* Navigation */
-.site-content nav {
- clear: both;
- line-height: 2;
- overflow: hidden;
-}
-
-#nav-above {
- padding: 24px 0;
- padding: 1.714285714rem 0;
-}
-
-#nav-above {
- display: none;
-}
-
-.paged #nav-above {
- display: block;
-}
-
-.nav-previous,
-.previous-image {
- float: left;
- width: 50%;
-}
-
-.nav-next,
-.next-image {
- float: right;
- text-align: right;
- width: 50%;
-}
-
-.nav-single + .comments-area,
-#comment-nav-above {
- margin: 48px 0;
- margin: 3.428571429rem 0;
-}
-
-/* Author profiles */
-.author .archive-header {
- margin-bottom: 24px;
- margin-bottom: 1.714285714rem;
-}
-
-.author-info {
- border-top: 1px solid #ededed;
- margin: 24px 0;
- margin: 1.714285714rem 0;
- padding-top: 24px;
- padding-top: 1.714285714rem;
- overflow: hidden;
-}
-
-.author-description p {
- color: #757575;
- font-size: 13px;
- font-size: 0.928571429rem;
- line-height: 1.846153846;
-}
-
-.author.archive .author-info {
- border-top: 0;
- margin: 0 0 48px;
- margin: 0 0 3.428571429rem;
-}
-
-.author.archive .author-avatar {
- margin-top: 0;
-}
-
-
-/* =Basic structure
--------------------------------------------------------------- */
-
-/* Body, links, basics */
-html {
- font-size: 87.5%;
-}
-
-body {
- font-size: 14px;
- font-size: 1rem;
- font-family: Helvetica, Arial, sans-serif;
- text-rendering: optimizeLegibility;
- color: #444;
-}
-
-body.custom-font-enabled {
- font-family: "Open Sans", Helvetica, Arial, sans-serif;
-}
-
-a {
- outline: none;
- color: #21759b;
-}
-
-a:hover {
- color: #0f3647;
-}
-
-/* Assistive text */
-.assistive-text,
-.site .screen-reader-text {
- position: absolute !important;
- clip: rect(1px, 1px, 1px, 1px);
- overflow: hidden;
- height: 1px;
- width: 1px;
-}
-
-.main-navigation .assistive-text:focus,
-.site .screen-reader-text:hover,
-.site .screen-reader-text:active,
-.site .screen-reader-text:focus {
- background: #fff;
- border: 2px solid #333;
- border-radius: 3px;
- clip: auto !important;
- color: #000;
- display: block;
- font-size: 12px;
- height: auto;
- padding: 12px;
- position: absolute;
- top: 5px;
- left: 5px;
- width: auto;
- z-index: 100000; /* Above WP toolbar */
-}
-
-/* Page structure */
-.site {
- padding: 0 24px;
- padding: 0 1.714285714rem;
- background-color: #fff;
-}
-
-.site-content {
- margin: 24px 0 0;
- margin: 1.714285714rem 0 0;
-}
-
-.widget-area {
- margin: 24px 0 0;
- margin: 1.714285714rem 0 0;
-}
-
-/* Header */
-.site-header {
- padding: 24px 0;
- padding: 1.714285714rem 0;
-}
-
-.site-header h1,
-.site-header h2 {
- text-align: center;
-}
-
-.site-header h1 a,
-.site-header h2 a {
- color: #515151;
- display: inline-block;
- text-decoration: none;
-}
-
-.site-header h1 a:hover,
-.site-header h2 a:hover {
- color: #21759b;
-}
-
-.site-header h1 {
- font-size: 24px;
- font-size: 1.714285714rem;
- line-height: 1.285714286;
- margin-bottom: 14px;
- margin-bottom: 1rem;
-}
-
-.site-header h2 {
- font-weight: normal;
- font-size: 13px;
- font-size: 0.928571429rem;
- line-height: 1.846153846;
- color: #757575;
-}
-
-.header-image {
- margin-top: 24px;
- margin-top: 1.714285714rem;
-}
-
-/* Navigation Menu */
-.main-navigation {
- margin-top: 24px;
- margin-top: 1.714285714rem;
- text-align: center;
-}
-
-.main-navigation li {
- margin-top: 24px;
- margin-top: 1.714285714rem;
- font-size: 12px;
- font-size: 0.857142857rem;
- line-height: 1.42857143;
-}
-
-.main-navigation a {
- color: #5e5e5e;
-}
-
-.main-navigation a:hover,
-.main-navigation a:focus {
- color: #21759b;
-}
-
-.main-navigation ul.nav-menu,
-.main-navigation div.nav-menu > ul {
- display: none;
-}
-
-.main-navigation ul.nav-menu.toggled-on,
-.menu-toggle {
- display: inline-block;
-}
-
-/* Banner */
-section[role="banner"] {
- margin-bottom: 48px;
- margin-bottom: 3.428571429rem;
-}
-
-/* Sidebar */
-.widget-area .widget {
- -webkit-hyphens: auto;
- -moz-hyphens: auto;
- hyphens: auto;
- margin-bottom: 48px;
- margin-bottom: 3.428571429rem;
- word-wrap: break-word;
-}
-
-.widget-area .widget h3 {
- margin-bottom: 24px;
- margin-bottom: 1.714285714rem;
-}
-
-.widget-area .widget p,
-.widget-area .widget li,
-.widget-area .widget .textwidget {
- font-size: 13px;
- font-size: 0.928571429rem;
- line-height: 1.846153846;
-}
-
-.widget-area .widget p {
- margin-bottom: 24px;
- margin-bottom: 1.714285714rem;
-}
-
-.widget-area .textwidget ul,
-.widget-area .textwidget ol {
- list-style: disc outside;
- margin: 0 0 24px;
- margin: 0 0 1.714285714rem;
-}
-
-.widget-area .textwidget li > ul,
-.widget-area .textwidget li > ol {
- margin-bottom: 0;
-}
-
-.widget-area .textwidget ol {
- list-style: decimal;
-}
-
-.widget-area .textwidget li {
- margin-left: 36px;
- margin-left: 2.571428571rem;
-}
-
-.widget-area .widget a {
- color: #757575;
-}
-
-.widget-area .widget a:hover {
- color: #21759b;
-}
-
-.widget-area .widget a:visited {
- color: #9f9f9f;
-}
-
-.widget-area #s {
- width: 53.66666666666%; /* define a width to avoid dropping a wider submit button */
-}
-
-/* Footer */
-footer[role="contentinfo"] {
- border-top: 1px solid #ededed;
- clear: both;
- font-size: 12px;
- font-size: 0.857142857rem;
- line-height: 2;
- max-width: 960px;
- max-width: 68.571428571rem;
- margin-top: 24px;
- margin-top: 1.714285714rem;
- margin-left: auto;
- margin-right: auto;
- padding: 24px 0;
- padding: 1.714285714rem 0;
-}
-
-footer[role="contentinfo"] a {
- color: #686868;
-}
-
-footer[role="contentinfo"] a:hover {
- color: #21759b;
-}
-
-.site-info span[role=separator] {
- padding: 0 0.3em 0 0.6em;
-}
-
-.site-info span[role=separator]::before {
- content: '\002f';
-}
-
-
-/* =Main content and comment content
--------------------------------------------------------------- */
-
-.entry-meta {
- clear: both;
-}
-
-.entry-header {
- margin-bottom: 24px;
- margin-bottom: 1.714285714rem;
-}
-
-.entry-header img.wp-post-image {
- margin-bottom: 24px;
- margin-bottom: 1.714285714rem;
-}
-
-.entry-header .entry-title {
- font-size: 20px;
- font-size: 1.428571429rem;
- line-height: 1.2;
- font-weight: normal;
-}
-
-.entry-header .entry-title a {
- text-decoration: none;
-}
-
-.entry-header .entry-format {
- margin-top: 24px;
- margin-top: 1.714285714rem;
- font-weight: normal;
-}
-
-.entry-header .comments-link {
- margin-top: 24px;
- margin-top: 1.714285714rem;
- font-size: 13px;
- font-size: 0.928571429rem;
- line-height: 1.846153846;
- color: #757575;
-}
-
-.comments-link a,
-.entry-meta a {
- color: #757575;
-}
-
-.comments-link a:hover,
-.entry-meta a:hover {
- color: #21759b;
-}
-
-article.sticky .featured-post {
- border-top: 4px double #ededed;
- border-bottom: 4px double #ededed;
- color: #757575;
- font-size: 13px;
- font-size: 0.928571429rem;
- line-height: 3.692307692;
- margin-bottom: 24px;
- margin-bottom: 1.714285714rem;
- text-align: center;
-}
-
-.entry-content,
-.entry-summary,
-.mu_register {
- line-height: 1.714285714;
-}
-
-.entry-content h1,
-.comment-content h1,
-.entry-content h2,
-.comment-content h2,
-.entry-content h3,
-.comment-content h3,
-.entry-content h4,
-.comment-content h4,
-.entry-content h5,
-.comment-content h5,
-.entry-content h6,
-.comment-content h6 {
- margin: 24px 0;
- margin: 1.714285714rem 0;
- line-height: 1.714285714;
-}
-
-.entry-content h1,
-.comment-content h1 {
- font-size: 21px;
- font-size: 1.5rem;
- line-height: 1.5;
-}
-
-.entry-content h2,
-.comment-content h2,
-.mu_register h2 {
- font-size: 18px;
- font-size: 1.285714286rem;
- line-height: 1.6;
-}
-
-.entry-content h3,
-.comment-content h3 {
- font-size: 16px;
- font-size: 1.142857143rem;
- line-height: 1.846153846;
-}
-
-.entry-content h4,
-.comment-content h4 {
- font-size: 14px;
- font-size: 1rem;
- line-height: 1.846153846;
-}
-
-.entry-content h5,
-.comment-content h5 {
- font-size: 13px;
- font-size: 0.928571429rem;
- line-height: 1.846153846;
-}
-
-.entry-content h6,
-.comment-content h6 {
- font-size: 12px;
- font-size: 0.857142857rem;
- line-height: 1.846153846;
-}
-
-.entry-content p,
-.entry-summary p,
-.comment-content p,
-.mu_register p {
- margin: 0 0 24px;
- margin: 0 0 1.714285714rem;
- line-height: 1.714285714;
-}
-
-.entry-content a:visited,
-.comment-content a:visited {
- color: #9f9f9f;
-}
-
-.entry-content .more-link {
- white-space: nowrap;
-}
-
-.entry-content ol,
-.comment-content ol,
-.entry-content ul,
-.comment-content ul,
-.mu_register ul {
- margin: 0 0 24px;
- margin: 0 0 1.714285714rem;
- line-height: 1.714285714;
-}
-
-.entry-content ul ul,
-.comment-content ul ul,
-.entry-content ol ol,
-.comment-content ol ol,
-.entry-content ul ol,
-.comment-content ul ol,
-.entry-content ol ul,
-.comment-content ol ul {
- margin-bottom: 0;
-}
-
-.entry-content ul,
-.comment-content ul,
-.mu_register ul {
- list-style: disc outside;
-}
-
-.entry-content ol,
-.comment-content ol {
- list-style: decimal outside;
-}
-
-.entry-content li,
-.comment-content li,
-.mu_register li {
- margin: 0 0 0 36px;
- margin: 0 0 0 2.571428571rem;
-}
-
-.entry-content blockquote,
-.comment-content blockquote {
- margin-bottom: 24px;
- margin-bottom: 1.714285714rem;
- padding: 24px;
- padding: 1.714285714rem;
- font-style: italic;
-}
-
-.entry-content blockquote p:last-child,
-.comment-content blockquote p:last-child {
- margin-bottom: 0;
-}
-
-.entry-content code,
-.comment-content code {
- font-family: Consolas, Monaco, Lucida Console, monospace;
- font-size: 12px;
- font-size: 0.857142857rem;
- line-height: 2;
-}
-
-.entry-content pre,
-.comment-content pre {
- border: 1px solid #ededed;
- color: #666;
- font-family: Consolas, Monaco, Lucida Console, monospace;
- font-size: 12px;
- font-size: 0.857142857rem;
- line-height: 1.714285714;
- margin: 24px 0;
- margin: 1.714285714rem 0;
- overflow: auto;
- padding: 24px;
- padding: 1.714285714rem;
-}
-
-.entry-content pre code,
-.comment-content pre code {
- display: block;
-}
-
-.entry-content abbr,
-.comment-content abbr,
-.entry-content dfn,
-.comment-content dfn,
-.entry-content acronym,
-.comment-content acronym {
- border-bottom: 1px dotted #666;
- cursor: help;
-}
-
-.entry-content address,
-.comment-content address {
- display: block;
- line-height: 1.714285714;
- margin: 0 0 24px;
- margin: 0 0 1.714285714rem;
-}
-
-img.alignleft,
-.wp-caption.alignleft {
- margin: 12px 24px 12px 0;
- margin: 0.857142857rem 1.714285714rem 0.857142857rem 0;
-}
-
-img.alignright,
-.wp-caption.alignright {
- margin: 12px 0 12px 24px;
- margin: 0.857142857rem 0 0.857142857rem 1.714285714rem;
-}
-
-img.aligncenter,
-.wp-caption.aligncenter {
- clear: both;
- margin-top: 12px;
- margin-top: 0.857142857rem;
- margin-bottom: 12px;
- margin-bottom: 0.857142857rem;
-}
-
-.entry-content embed,
-.entry-content iframe,
-.entry-content object,
-.entry-content video {
- margin-bottom: 24px;
- margin-bottom: 1.714285714rem;
-}
-
-.entry-content dl,
-.comment-content dl {
- margin: 0 24px;
- margin: 0 1.714285714rem;
-}
-
-.entry-content dt,
-.comment-content dt {
- font-weight: bold;
- line-height: 1.714285714;
-}
-
-.entry-content dd,
-.comment-content dd {
- line-height: 1.714285714;
- margin-bottom: 24px;
- margin-bottom: 1.714285714rem;
-}
-
-.entry-content table,
-.comment-content table {
- border-bottom: 1px solid #ededed;
- color: #757575;
- font-size: 12px;
- font-size: 0.857142857rem;
- line-height: 2;
- margin: 0 0 24px;
- margin: 0 0 1.714285714rem;
- width: 100%;
-}
-
-.entry-content table caption,
-.comment-content table caption {
- font-size: 16px;
- font-size: 1.142857143rem;
- margin: 24px 0;
- margin: 1.714285714rem 0;
-}
-
-.entry-content td,
-.comment-content td {
- border-top: 1px solid #ededed;
- padding: 6px 10px 6px 0;
-}
-
-.site-content article {
- border-bottom: 4px double #ededed;
- margin-bottom: 72px;
- margin-bottom: 5.142857143rem;
- padding-bottom: 24px;
- padding-bottom: 1.714285714rem;
- word-wrap: break-word;
- -webkit-hyphens: auto;
- -moz-hyphens: auto;
- hyphens: auto;
-}
-
-.page-links {
- clear: both;
- line-height: 1.714285714;
-}
-
-footer.entry-meta {
- margin-top: 24px;
- margin-top: 1.714285714rem;
- font-size: 13px;
- font-size: 0.928571429rem;
- line-height: 1.846153846;
- color: #757575;
-}
-
-.single-author .entry-meta .by-author {
- display: none;
-}
-
-.mu_register h2 {
- color: #757575;
- font-weight: normal;
-}
-
-
-/* =Archives
--------------------------------------------------------------- */
-
-.archive-header,
-.page-header {
- margin-bottom: 48px;
- margin-bottom: 3.428571429rem;
- padding-bottom: 22px;
- padding-bottom: 1.571428571rem;
- border-bottom: 1px solid #ededed;
-}
-
-.archive-meta {
- color: #757575;
- font-size: 12px;
- font-size: 0.857142857rem;
- line-height: 2;
- margin-top: 22px;
- margin-top: 1.571428571rem;
-}
-
-/* =Single audio/video attachment view
--------------------------------------------------------------- */
-
-.attachment .entry-content .mejs-audio {
- max-width: 400px;
-}
-
-.attachment .entry-content .mejs-container {
- margin-bottom: 24px;
-}
-
-
-/* =Single image attachment view
--------------------------------------------------------------- */
-
-.article.attachment {
- overflow: hidden;
-}
-
-.image-attachment div.attachment {
- text-align: center;
-}
-
-.image-attachment div.attachment p {
- text-align: center;
-}
-
-.image-attachment div.attachment img {
- display: block;
- height: auto;
- margin: 0 auto;
- max-width: 100%;
-}
-
-.image-attachment .entry-caption {
- margin-top: 8px;
- margin-top: 0.571428571rem;
-}
-
-
-/* =Aside post format
--------------------------------------------------------------- */
-
-article.format-aside h1 {
- margin-bottom: 24px;
- margin-bottom: 1.714285714rem;
-}
-
-article.format-aside h1 a {
- text-decoration: none;
- color: #4d525a;
-}
-
-article.format-aside h1 a:hover {
- color: #2e3542;
-}
-
-article.format-aside .aside {
- padding: 24px 24px 0;
- padding: 1.714285714rem;
- background: #d2e0f9;
- border-left: 22px solid #a8bfe8;
-}
-
-article.format-aside p {
- font-size: 13px;
- font-size: 0.928571429rem;
- line-height: 1.846153846;
- color: #4a5466;
-}
-
-article.format-aside blockquote:last-child,
-article.format-aside p:last-child {
- margin-bottom: 0;
-}
-
-
-/* =Post formats
--------------------------------------------------------------- */
-
-/* Image posts */
-article.format-image footer h1 {
- font-size: 13px;
- font-size: 0.928571429rem;
- line-height: 1.846153846;
- font-weight: normal;
-}
-
-article.format-image footer h2 {
- font-size: 11px;
- font-size: 0.785714286rem;
- line-height: 2.181818182;
-}
-
-article.format-image footer a h2 {
- font-weight: normal;
-}
-
-/* Link posts */
-article.format-link header {
- padding: 0 10px;
- padding: 0 0.714285714rem;
- float: right;
- font-size: 11px;
- font-size: 0.785714286rem;
- line-height: 2.181818182;
- font-weight: bold;
- font-style: italic;
- text-transform: uppercase;
- color: #848484;
- background-color: #ebebeb;
- border-radius: 3px;
-}
-
-article.format-link .entry-content {
- max-width: 80%;
- float: left;
-}
-
-article.format-link .entry-content a {
- font-size: 22px;
- font-size: 1.571428571rem;
- line-height: 1.090909091;
- text-decoration: none;
-}
-
-/* Quote posts */
-article.format-quote .entry-content p {
- margin: 0;
- padding-bottom: 24px;
- padding-bottom: 1.714285714rem;
-}
-
-article.format-quote .entry-content blockquote {
- display: block;
- padding: 24px 24px 0;
- padding: 1.714285714rem 1.714285714rem 0;
- font-size: 15px;
- font-size: 1.071428571rem;
- line-height: 1.6;
- font-style: normal;
- color: #6a6a6a;
- background: #efefef;
-}
-
-/* Status posts */
-.format-status .entry-header {
- margin-bottom: 24px;
- margin-bottom: 1.714285714rem;
-}
-
-.format-status .entry-header header {
- display: inline-block;
-}
-
-.format-status .entry-header h1 {
- font-size: 15px;
- font-size: 1.071428571rem;
- font-weight: normal;
- line-height: 1.6;
- margin: 0;
-}
-
-.format-status .entry-header h2 {
- font-size: 12px;
- font-size: 0.857142857rem;
- font-weight: normal;
- line-height: 2;
- margin: 0;
-}
-
-.format-status .entry-header header a {
- color: #757575;
-}
-
-.format-status .entry-header header a:hover {
- color: #21759b;
-}
-
-.format-status .entry-header img {
- float: left;
- margin-right: 21px;
- margin-right: 1.5rem;
-}
-
-
-/* =Comments
--------------------------------------------------------------- */
-
-.comments-title {
- margin-bottom: 48px;
- margin-bottom: 3.428571429rem;
- font-size: 16px;
- font-size: 1.142857143rem;
- line-height: 1.5;
- font-weight: normal;
-}
-
-.comments-area article {
- margin: 24px 0;
- margin: 1.714285714rem 0;
-}
-
-.comments-area article header {
- margin: 0 0 48px;
- margin: 0 0 3.428571429rem;
- overflow: hidden;
- position: relative;
-}
-
-.comments-area article header img {
- float: left;
- padding: 0;
- line-height: 0;
-}
-
-.comments-area article header cite,
-.comments-area article header time {
- display: block;
- margin-left: 85px;
- margin-left: 6.071428571rem;
-}
-
-.comments-area article header cite {
- font-style: normal;
- font-size: 15px;
- font-size: 1.071428571rem;
- line-height: 1.42857143;
-}
-
-.comments-area cite b {
- font-weight: normal;
-}
-
-.comments-area article header time {
- line-height: 1.714285714;
- text-decoration: none;
- font-size: 12px;
- font-size: 0.857142857rem;
- color: #5e5e5e;
-}
-
-.comments-area article header a {
- text-decoration: none;
- color: #5e5e5e;
-}
-
-.comments-area article header a:hover {
- color: #21759b;
-}
-
-.comments-area article header cite a {
- color: #444;
-}
-
-.comments-area article header cite a:hover {
- text-decoration: underline;
-}
-
-.comments-area article header h4 {
- position: absolute;
- top: 0;
- right: 0;
- padding: 6px 12px;
- padding: 0.428571429rem 0.857142857rem;
- font-size: 12px;
- font-size: 0.857142857rem;
- font-weight: normal;
- color: #fff;
- background-color: #0088d0;
- background-repeat: repeat-x;
- background-image: -moz-linear-gradient(top, #009cee, #0088d0);
- background-image: -ms-linear-gradient(top, #009cee, #0088d0);
- background-image: -webkit-linear-gradient(top, #009cee, #0088d0);
- background-image: -o-linear-gradient(top, #009cee, #0088d0);
- background-image: linear-gradient(to bottom, #009cee, #0088d0);
- border-radius: 3px;
- border: 1px solid #007cbd;
-}
-
-.comments-area .bypostauthor cite span {
- position: absolute;
- margin-left: 5px;
- margin-left: 0.357142857rem;
- padding: 2px 5px;
- padding: 0.142857143rem 0.357142857rem;
- font-size: 10px;
- font-size: 0.714285714rem;
-}
-
-.comments-area .bypostauthor cite b {
- font-weight: bold;
-}
-
-a.comment-reply-link,
-a.comment-edit-link {
- color: #686868;
- font-size: 13px;
- font-size: 0.928571429rem;
- line-height: 1.846153846;
-}
-
-a.comment-reply-link:hover,
-a.comment-edit-link:hover {
- color: #21759b;
-}
-
-.commentlist .pingback {
- line-height: 1.714285714;
- margin-bottom: 24px;
- margin-bottom: 1.714285714rem;
-}
-
-/* Comment form */
-#respond {
- margin-top: 48px;
- margin-top: 3.428571429rem;
-}
-
-#respond h3#reply-title {
- font-size: 16px;
- font-size: 1.142857143rem;
- line-height: 1.5;
-}
-
-#respond h3#reply-title #cancel-comment-reply-link {
- margin-left: 10px;
- margin-left: 0.714285714rem;
- font-weight: normal;
- font-size: 12px;
- font-size: 0.857142857rem;
-}
-
-#respond form {
- margin: 24px 0;
- margin: 1.714285714rem 0;
-}
-
-#respond form p {
- margin: 11px 0;
- margin: 0.785714286rem 0;
-}
-
-#respond form p.logged-in-as {
- margin-bottom: 24px;
- margin-bottom: 1.714285714rem;
-}
-
-#respond form label {
- display: block;
- line-height: 1.714285714;
-}
-
-#respond form input[type="text"],
-#respond form textarea {
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- font-size: 12px;
- font-size: 0.857142857rem;
- line-height: 1.714285714;
- padding: 10px;
- padding: 0.714285714rem;
- width: 100%;
-}
-
-#respond form p.form-allowed-tags {
- margin: 0;
- font-size: 12px;
- font-size: 0.857142857rem;
- line-height: 2;
- color: #5e5e5e;
-}
-
-#respond #wp-comment-cookies-consent {
- margin: 0 10px 0 0;
-}
-
-#respond .comment-form-cookies-consent label {
- display: inline;
-}
-
-.required {
- color: red;
-}
-
-
-/* =Front page template
--------------------------------------------------------------- */
-
-.entry-page-image {
- margin-bottom: 14px;
- margin-bottom: 1rem;
-}
-
-.template-front-page .site-content article {
- border: 0;
- margin-bottom: 0;
-}
-
-.template-front-page .widget-area {
- clear: both;
- float: none;
- width: auto;
- padding-top: 24px;
- padding-top: 1.714285714rem;
- border-top: 1px solid #ededed;
-}
-
-.template-front-page .widget-area .widget li {
- margin: 8px 0 0;
- margin: 0.571428571rem 0 0;
- font-size: 13px;
- font-size: 0.928571429rem;
- line-height: 1.714285714;
- list-style-type: square;
- list-style-position: inside;
-}
-
-.template-front-page .widget-area .widget li a {
- color: #757575;
-}
-
-.template-front-page .widget-area .widget li a:hover {
- color: #21759b;
-}
-
-.template-front-page .widget-area .widget_text img {
- float: left;
- margin: 8px 24px 8px 0;
- margin: 0.571428571rem 1.714285714rem 0.571428571rem 0;
-}
-
-
-/* =Widgets
--------------------------------------------------------------- */
-
-.widget select {
- max-width: 100%;
-}
-
-.widget-area .widget ul ul {
- margin-left: 12px;
- margin-left: 0.857142857rem;
-}
-
-.widget_rss li {
- margin: 12px 0;
- margin: 0.857142857rem 0;
-}
-
-.widget_recent_entries .post-date,
-.widget_rss .rss-date {
- color: #aaa;
- font-size: 11px;
- font-size: 0.785714286rem;
- margin-left: 12px;
- margin-left: 0.857142857rem;
-}
-
-.wp-calendar-nav,
-#wp-calendar {
- margin: 0;
- width: 100%;
- font-size: 13px;
- font-size: 0.928571429rem;
- line-height: 1.846153846;
- color: #686868;
-}
-
-#wp-calendar th,
-#wp-calendar td,
-#wp-calendar caption {
- text-align: left;
-}
-
-.wp-calendar-nav {
- display: table;
-}
-
-.wp-calendar-nav span {
- display: table-cell;
-}
-
-.wp-calendar-nav-next,
-#wp-calendar #next {
- padding-right: 24px;
- padding-right: 1.714285714rem;
- text-align: right;
-}
-
-.widget_search label {
- display: block;
- font-size: 13px;
- font-size: 0.928571429rem;
- line-height: 1.846153846;
-}
-
-.widget_twitter li {
- list-style-type: none;
-}
-
-.widget_twitter .timesince {
- display: block;
- text-align: right;
-}
-
-.tagcloud ul {
- list-style-type: none;
-}
-
-.tagcloud ul li {
- display: inline-block;
-}
-
-.widget-area .widget.widget_tag_cloud li {
- line-height: 1;
-}
-
-.template-front-page .widget-area .widget.widget_tag_cloud li {
- margin: 0;
-}
-
-.widget-area .gallery-columns-2.gallery-size-full .gallery-icon img,
-.widget-area .gallery-columns-3.gallery-size-full .gallery-icon img,
-.widget-area .gallery-columns-4.gallery-size-full .gallery-icon img,
-.widget-area .gallery-columns-5.gallery-size-full .gallery-icon img,
-.widget-area .gallery-columns-6 .gallery-icon img,
-.widget-area .gallery-columns-7 .gallery-icon img,
-.widget-area .gallery-columns-8 .gallery-icon img,
-.widget-area .gallery-columns-9 .gallery-icon img {
- height: auto;
- max-width: 80%;
-}
-
-/* =Plugins
------------------------------------------------ */
-
-img#wpstats {
- display: block;
- margin: 0 auto 24px;
- margin: 0 auto 1.714285714rem;
-}
-
-
-/* =Media queries
--------------------------------------------------------------- */
-
-/* Does the same thing as ,
- * but in the future W3C standard way. -ms- prefix is required for IE10+ to
- * render responsive styling in Windows 8 "snapped" views; IE10+ does not honor
- * the meta tag. See https://core.trac.wordpress.org/ticket/25888.
- */
-@-ms-viewport {
- width: device-width;
-}
-
-@viewport {
- width: device-width;
-}
-
-/* Minimum width of 600 pixels. */
-@media screen and (min-width: 600px) {
- .author-avatar {
- float: left;
- margin-top: 8px;
- margin-top: 0.571428571rem;
- }
-
- .author-description {
- float: right;
- width: 80%;
- }
-
- .site {
- margin: 0 auto;
- max-width: 960px;
- max-width: 68.571428571rem;
- overflow: hidden;
- }
-
- .site-content {
- float: left;
- width: 65.104166667%;
- }
-
- body.template-front-page .site-content,
- body.attachment .site-content,
- body.full-width .site-content {
- width: 100%;
- }
-
- .widget-area {
- float: right;
- width: 26.041666667%;
- }
-
- .site-header h1,
- .site-header h2 {
- text-align: left;
- }
-
- .site-header h1 {
- font-size: 26px;
- font-size: 1.857142857rem;
- line-height: 1.846153846;
- margin-bottom: 0;
- }
-
- .main-navigation ul.nav-menu,
- .main-navigation div.nav-menu > ul {
- border-bottom: 1px solid #ededed;
- border-top: 1px solid #ededed;
- display: inline-block !important;
- text-align: left;
- width: 100%;
- }
-
- .main-navigation ul {
- margin: 0;
- text-indent: 0;
- }
-
- .main-navigation li a,
- .main-navigation li {
- display: inline-block;
- text-decoration: none;
- }
-
- .main-navigation li a {
- border-bottom: 0;
- color: #6a6a6a;
- line-height: 3.692307692;
- text-transform: uppercase;
- white-space: nowrap;
- }
-
- .main-navigation li a:hover,
- .main-navigation li a:focus {
- color: #000;
- }
-
- .main-navigation li {
- margin: 0 40px 0 0;
- margin: 0 2.857142857rem 0 0;
- position: relative;
- }
-
- .main-navigation li ul {
- margin: 0;
- padding: 0;
- position: absolute;
- top: 100%;
- z-index: 1;
- height: 1px;
- width: 1px;
- overflow: hidden;
- clip: rect(1px, 1px, 1px, 1px);
- }
-
- .main-navigation li ul ul {
- top: 0;
- left: 100%;
- }
-
- .main-navigation ul li:hover > ul,
- .main-navigation ul li:focus > ul,
- .main-navigation .focus > ul {
- border-left: 0;
- clip: inherit;
- overflow: inherit;
- height: inherit;
- width: inherit;
- }
-
- .main-navigation li ul li a {
- background: #efefef;
- border-bottom: 1px solid #ededed;
- display: block;
- font-size: 11px;
- font-size: 0.785714286rem;
- line-height: 2.181818182;
- padding: 8px 10px;
- padding: 0.571428571rem 0.714285714rem;
- width: 180px;
- width: 12.85714286rem;
- white-space: normal;
- }
-
- .main-navigation li ul li a:hover,
- .main-navigation li ul li a:focus {
- background: #e3e3e3;
- color: #444;
- }
-
- .main-navigation .current-menu-item > a,
- .main-navigation .current-menu-ancestor > a,
- .main-navigation .current_page_item > a,
- .main-navigation .current_page_ancestor > a {
- color: #636363;
- font-weight: bold;
- }
-
- .menu-toggle {
- display: none;
- }
-
- .entry-header .entry-title {
- font-size: 22px;
- font-size: 1.571428571rem;
- }
-
- #respond form input[type="text"] {
- width: 46.333333333%;
- }
-
- #respond form textarea.blog-textarea {
- width: 79.666666667%;
- }
-
- .template-front-page .site-content,
- .template-front-page article {
- overflow: hidden;
- }
-
- .template-front-page.has-post-thumbnail article {
- float: left;
- width: 47.916666667%;
- }
-
- .entry-page-image {
- float: right;
- margin-bottom: 0;
- width: 47.916666667%;
- }
-
- .template-front-page .widget-area .widget,
- .template-front-page.two-sidebars .widget-area .front-widgets {
- float: left;
- width: 51.875%;
- margin-bottom: 24px;
- margin-bottom: 1.714285714rem;
- }
-
- .template-front-page .widget-area .widget:nth-child(odd) {
- clear: right;
- }
-
- .template-front-page .widget-area .widget:nth-child(even),
- .template-front-page.two-sidebars .widget-area .front-widgets + .front-widgets {
- float: right;
- width: 39.0625%;
- margin: 0 0 24px;
- margin: 0 0 1.714285714rem;
- }
-
- .template-front-page.two-sidebars .widget,
- .template-front-page.two-sidebars .widget:nth-child(even) {
- float: none;
- width: auto;
- }
-
- .commentlist .children {
- margin-left: 48px;
- margin-left: 3.428571429rem;
- }
-}
-
-/* Minimum width of 960 pixels. */
-@media screen and (min-width: 960px) {
- body {
- background-color: #e6e6e6;
- }
-
- body .site {
- padding: 0 40px;
- padding: 0 2.857142857rem;
- margin-top: 48px;
- margin-top: 3.428571429rem;
- margin-bottom: 48px;
- margin-bottom: 3.428571429rem;
- box-shadow: 0 2px 6px rgba(100, 100, 100, 0.3);
- }
-
- body.custom-background-empty {
- background-color: #fff;
- }
-
- body.custom-background-empty .site,
- body.custom-background-white .site {
- padding: 0;
- margin-top: 0;
- margin-bottom: 0;
- box-shadow: none;
- }
-}
-
-
-/* =Print
------------------------------------------------ */
-
-@media print {
- body {
- background: none !important;
- color: #000;
- font-size: 10pt;
- }
-
- footer a[rel=bookmark]:link:after,
- footer a[rel=bookmark]:visited:after {
- content: " [" attr(href) "] "; /* Show URLs */
- }
-
- a {
- text-decoration: none;
- }
-
- .entry-content img,
- .comment-content img,
- .author-avatar img,
- img.wp-post-image {
- border-radius: 0;
- box-shadow: none;
- }
-
- .site {
- clear: both !important;
- display: block !important;
- float: none !important;
- max-width: 100%;
- position: relative !important;
- }
-
- .site-header {
- margin-bottom: 72px;
- margin-bottom: 5.142857143rem;
- text-align: left;
- }
-
- .site-header h1 {
- font-size: 21pt;
- line-height: 1;
- text-align: left;
- }
-
- .site-header h2 {
- color: #000;
- font-size: 10pt;
- text-align: left;
- }
-
- .site-header h1 a,
- .site-header h2 a {
- color: #000;
- }
-
- .author-avatar,
- #colophon,
- #respond,
- .commentlist .comment-edit-link,
- .commentlist .reply,
- .entry-header .comments-link,
- .entry-meta .edit-link a,
- .page-link,
- .site-content nav,
- .widget-area,
- img.header-image,
- .main-navigation {
- display: none;
- }
-
- .wrapper {
- border-top: none;
- box-shadow: none;
- }
-
- .site-content {
- margin: 0;
- width: auto;
- }
-
- .entry-header .entry-title,
- .entry-title {
- font-size: 21pt;
- }
-
- footer.entry-meta,
- footer.entry-meta a {
- color: #444;
- font-size: 10pt;
- }
-
- .author-description {
- float: none;
- width: auto;
- }
-
- /* Comments */
- .commentlist > li.comment {
- background: none;
- position: relative;
- width: auto;
- }
-
-
-
- .comments-area article header cite,
- .comments-area article header time {
- margin-left: 50px;
- margin-left: 3.57142857rem;
- }
-}
-
-.breadcrumb
-div {
- display: inline;
- font-size: 13px;
- margin-left: -3px;
-}
-
-#wp-auto-top {
- position: fixed;
- top: 45%;
- right: 50%;
- display: block;
- margin-right: -540px;
- z-index: 9999;
-}
-
-#wp-auto-top-top, #wp-auto-top-comment, #wp-auto-top-bottom {
- background: url(https://www.lylinux.org/wp-content/plugins/wp-auto-top/img/1.png) no-repeat;
- position: relative;
- cursor: pointer;
- height: 25px;
- width: 29px;
- margin: 10px 0 0;
-}
-
-#wp-auto-top-comment {
- background-position: left -30px;
- height: 32px;
-}
-
-#wp-auto-top-bottom {
- background-position: left -68px;
-}
-
-#wp-auto-top-comment:hover {
- background-position: right -30px;
-}
-
-#wp-auto-top-top:hover {
- background-position: right 0;
-}
-
-#wp-auto-top-bottom:hover {
- background-position: right -68px;
-}
-
-.widget-login {
- margin-top: 15px !important;
-}
-
-/* ------------------------------------------------------------------------- *
- * Comments
-/* ------------------------------------------------------------------------- */
-#comments {
- margin-top: 20px;
-}
-
-#pinglist-container {
- display: none;
-}
-
-.comment-tabs {
- margin-bottom: 20px;
- font-size: 15px;
- border-bottom: 2px solid #e5e5e5;
-}
-
-.comment-tabs li {
- float: left;
- margin-bottom: -2px;
-}
-
-.comment-tabs li a {
- display: block;
- padding: 0 10px 10px;
- font-weight: 600;
- color: #aaa;
- border-bottom: 2px solid #e5e5e5;
-}
-
-.comment-tabs li a:hover {
- color: #444;
- border-color: #ccc;
-}
-
-.comment-tabs li span {
- margin-left: 8px;
- padding: 0 6px;
- border-radius: 4px;
- background-color: #e5e5e5;
-}
-
-.comment-tabs li i {
- margin-right: 6px;
-}
-
-.comment-tabs li.active a {
- color: #e8554e;
- border-bottom-color: #e8554e;
-}
-
-.commentlist, .pinglist {
- margin-bottom: 20px;
-}
-
-.commentlist li, .pinglist li {
- padding-left: 60px;
- font-size: 14px;
- line-height: 22px;
- font-weight: 400;
-}
-
-.commentlist .comment-body, .pinglist li {
- position: relative;
- padding-bottom: 20px;
- clear: both;
- word-break: break-all;
-}
-
-/* 评论整体布局 - 使用相对定位实现头像左侧布局 */
-.commentlist .comment-body {
- position: relative;
- padding-left: 60px; /* 为48px头像 + 12px间距留出空间 */
- min-height: 48px; /* 确保有足够高度容纳头像 */
-}
-
-/* 评论作者信息 - 用户名和时间在同一行 */
-.commentlist .comment-author {
- display: inline-block;
- margin: 0 10px 5px 0;
- font-size: 13px;
- position: relative;
-}
-
-.commentlist .comment-meta {
- display: inline-block;
- margin: 0 0 8px 0;
- font-size: 12px;
- color: #666;
-}
-
-.commentlist .comment-awaiting-moderation {
- display: block;
- font-size: 13px;
- line-height: 22px;
-}
-
-/* 头像样式 - 绝对定位到左侧 */
-.commentlist .comment-author .avatar {
- position: absolute !important;
- left: -60px; /* 定位到容器左侧 */
- top: 0;
- width: 48px !important;
- height: 48px !important;
- border-radius: 50%;
- display: block;
- object-fit: cover;
- background-color: #f5f5f5;
- border: 1px solid #ddd;
-}
-
-/* 评论作者名称样式 */
-.commentlist .comment-author .fn {
- display: inline;
- margin: 0;
- font-weight: 600;
- color: #2e7bb8;
- font-size: 13px;
-}
-
-.commentlist .comment-author .fn a {
- color: #2e7bb8;
- text-decoration: none;
-}
-
-.commentlist .comment-author .fn a:hover {
- text-decoration: underline;
-}
-
-/* 评论内容样式 */
-.commentlist .comment-body p {
- margin: 5px 0 10px 0;
- line-height: 1.5;
-}
-
-.commentlist .fn, .pinglist .ping-link {
- color: #444;
- font-size: 13px;
- font-style: normal;
- font-weight: 600;
-}
-
-.commentlist .says {
- display: none;
-}
-
-/* 通用头像样式 */
-.commentlist .avatar {
- width: 48px !important;
- height: 48px !important;
- border-radius: 50%;
- display: block;
- object-fit: cover;
- background-color: #f5f5f5;
- border: 1px solid #ddd;
-}
-
-.commentlist .comment-meta:before, .pinglist .ping-meta:before {
-
- vertical-align: 4%;
- margin-right: 3px;
- font-size: 10px;
- font-family: FontAwesome;
- color: #ccc;
-}
-
-.commentlist .comment-meta a, .pinglist .ping-meta {
- color: #aaa;
-}
-
-.commentlist .reply {
- font-size: 13px;
- line-height: 16px;
-}
-
-.commentlist .reply a,
-.commentlist .comment-reply-chain {
- color: #aaa;
-}
-
-.commentlist .reply a:hover,
-.commentlist .comment-reply-chain:hover {
- color: #444;
-}
-
-.comment-awaiting-moderation {
- color: #e8554e;
- font-style: normal;
-}
-
-/* pings */
-.pinglist li {
- padding-left: 0;
-}
-
-/* comment text */
-.commentlist .comment-body p {
- margin-bottom: 8px;
- color: #777;
- clear: both;
-}
-
-.commentlist .comment-body strong {
- font-weight: 600;
-}
-
-.commentlist .comment-body ol li {
- margin-left: 2em;
- padding: 0;
- list-style: decimal;
-}
-
-.commentlist .comment-body ul li {
- margin-left: 2em;
- padding: 0;
- list-style: square;
-}
-
-/* post author & admin comment */
-.commentlist li.bypostauthor > .comment-body:after,
-.commentlist li.comment-author-admin > .comment-body:after {
- display: block;
- position: absolute;
- content: "\f040";
- width: 12px;
- line-height: 12px;
- font-style: normal;
- font-family: FontAwesome;
- text-align: center;
- color: #fff;
- background-color: #e8554e;
-}
-
-.commentlist li.comment-author-admin > .comment-body:after {
- content: "\f005"; /* star for admin */
-}
-
-.commentlist li.bypostauthor > .comment-body:after,
-.commentlist li.comment-author-admin > .comment-body:after {
- padding: 3px;
- top: 32px;
- left: -28px;
- font-size: 12px;
- border-radius: 100%;
-}
-
-.commentlist li li.bypostauthor > .comment-body:after,
-.commentlist li li.comment-author-admin > .comment-body:after {
- padding: 2px;
- top: 22px;
- left: -26px;
- font-size: 10px;
- border-radius: 100%;
-}
-
-/* child comment */
-.commentlist li ul {
-}
-
-.commentlist li li {
- margin: 0;
- padding-left: 48px;
-}
-
-/* 嵌套评论整体布局 */
-.commentlist li li .comment-body {
- padding-left: 60px; /* 为48px头像 + 12px间距留出空间 */
- min-height: 48px; /* 确保有足够高度容纳头像 */
-}
-
-/* 嵌套评论作者信息 */
-.commentlist li li .comment-author {
- display: inline-block;
- margin: 0 8px 5px 0;
- font-size: 12px; /* 稍小一点 */
-}
-
-.commentlist li li .comment-meta {
- display: inline-block;
- margin: 0 0 8px 0;
- font-size: 11px; /* 稍小一点 */
- color: #666;
-}
-
-/* 评论容器整体左移 - 使用更高优先级 */
-#comments #commentlist-container.comment-tab {
- margin-left: -15px !important; /* 在小屏幕上向左移动15px */
- padding-left: 0 !important; /* 移除左内边距 */
- position: relative !important; /* 确保定位正确 */
-}
-
-/* 在较大屏幕上进一步左移 */
-@media screen and (min-width: 600px) {
- #comments #commentlist-container.comment-tab {
- margin-left: -30px !important; /* 在大屏幕上向左移动30px */
- }
-
- /* 响应式设计下的评论布局 - 保持48px头像 */
- .commentlist .comment-body {
- padding-left: 60px !important; /* 为48px头像 + 12px间距留出空间 */
- min-height: 48px !important;
- }
-
- .commentlist .comment-author {
- display: inline-block !important;
- margin: 0 8px 5px 0 !important;
- }
-
- .commentlist .comment-meta {
- display: inline-block !important;
- margin: 0 0 8px 0 !important;
- }
-
- /* 响应式设计下头像保持48px */
- .commentlist .comment-author .avatar {
- left: -60px !important;
- width: 48px !important;
- height: 48px !important;
- }
-
- /* 嵌套评论在响应式设计下也保持48px头像 */
- .commentlist li li .comment-body {
- padding-left: 60px !important;
- min-height: 48px !important;
- }
-
- .commentlist li li .comment-author .avatar {
- left: -60px !important;
- width: 48px !important;
- height: 48px !important;
- }
-}
-
-/* 嵌套评论头像 */
-.commentlist li li .comment-author .avatar {
- position: absolute !important;
- left: -60px; /* 定位到容器左侧 */
- top: 0;
- width: 48px !important;
- height: 48px !important;
- border-radius: 50%;
- display: block;
- object-fit: cover;
- background-color: #f5f5f5;
- border: 1px solid #ddd;
-}
-
-/* comments : nav
-/* ------------------------------------ */
-.comments-nav {
- margin-bottom: 20px;
-}
-
-.comments-nav a {
- font-weight: 600;
-}
-
-.comments-nav .nav-previous {
- float: left;
-}
-
-.comments-nav .nav-next {
- float: right;
-}
-
-/* comments : form
-/* ------------------------------------ */
-.logged-in-as,
-.comment-notes,
-.form-allowed-tags {
- display: none;
-}
-
-#respond {
- position: relative;
-}
-
-#reply-title {
- margin-bottom: 20px;
-}
-
-li #reply-title {
- margin: 0 !important;
- padding: 0;
- height: 0;
- font-size: 0;
- border-top: 0;
-}
-
-#cancel-comment-reply-link {
- float: right;
- bottom: 26px;
- right: 20px;
- font-size: 12px;
- color: #999;
-}
-
-#cancel-comment-reply-link:hover {
- color: #777;
-}
-
-#commentform {
- margin-bottom: 20px;
- padding: 10px 20px 20px;
- border-radius: 4px;
- background-color: #e5e5e5;
-}
-
-#commentform p.comment-form-author {
- float: left;
- width: 48%;
-}
-
-#commentform p.comment-form-email {
- float: right;
- width: 48%;
-}
-
-#commentform p.comment-form-url,
-#commentform p.comment-form-comment {
- clear: both;
-}
-
-#commentform label {
- display: block;
- padding: 6px 0;
- font-weight: 600;
-}
-
-#commentform input[type="text"],
-#commentform textarea {
- max-width: 100%;
- width: 100%;
-}
-
-#commentform textarea {
- height: 100px;
-}
-
-#commentform p.form-submit {
- margin-top: 10px;
-}
-
-.logged-in #reply-title {
- margin-bottom: 20px;
-}
-
-.logged-in #commentform p.comment-form-comment {
- margin-top: 10px;
-}
-
-.logged-in #commentform p.comment-form-comment label {
- display: none;
-}
-
-.heading,
-#reply-title {
- margin-bottom: 1em;
- font-size: 18px;
- font-weight: 600;
- text-transform: uppercase;
- color: #222;
-}
-
-.heading i {
- margin-right: 6px;
- font-size: 22px;
-}
-
-.group:before {
- content: "";
- display: table;
-}
-
-.group:after {
- content: "";
- display: table;
- clear: both;
-}
-
-.cancel-comment {
- margin: 0;
- padding: 0;
- border: 0;
- font: inherit;
- vertical-align: baseline;
-}
-
-#rocket {
- position: fixed;
- right: 50px;
- bottom: 50px;
- display: block;
- visibility: hidden;
- width: 26px;
- height: 48px;
- background: url("data:image/png;base64,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") no-repeat 50% 0;
- cursor: pointer;
- -webkit-transition: all 0s;
- transition: all 0s;
-}
-
-#rocket:hover {
- background-position: 50% -62px;
-}
-
-#rocket.show {
- visibility: visible;
- opacity: 1;
-}
-
-#rocket.move {
- background-position: 50% -62px;
- -webkit-animation: toTop .8s ease-in;
- animation: toTop .8s ease-in;
- animation-fill-mode: forwards;
- -webkit-animation-fill-mode: forwards;
-}
-
-.comment-markdown {
- float: right;
- font-size: small;
-}
-
-.breadcrumb {
- margin-bottom: 20px;
- list-style: none;
- border-radius: 4px;
-}
-
-.breadcrumb > li {
- display: inline-block;
-}
-
-.breadcrumb > li + li:before {
- color: #ccc;
- content: "/\00a0";
-}
-
-.breadcrumb > .active {
- color: #777;
-}
-
-.break_line {
- height: 1px;
- border: none;
- /*border-top: 1px dashed #f5d6d6;*/
-}
-
-/* =============================================================================
- 评论内容溢出修复样式
- 解决代码块和长文本撑开页面布局的问题
- ============================================================================= */
-
-/* 评论容器基础样式 */
-.comment-body {
- overflow-wrap: break-word;
- word-wrap: break-word;
- word-break: break-word;
- max-width: 100%;
- box-sizing: border-box;
-}
-
-/* 修复评论中的代码块溢出 */
-.comment-content pre,
-.comment-body pre {
- white-space: pre-wrap !important;
- word-wrap: break-word !important;
- overflow-wrap: break-word !important;
- max-width: 100% !important;
- overflow-x: auto;
- padding: 10px;
- background-color: #f8f8f8;
- border: 1px solid #ddd;
- border-radius: 4px;
- font-size: 12px;
- line-height: 1.4;
- margin: 10px 0;
-}
-
-/* 修复评论中的行内代码 */
-.comment-content code,
-.comment-body code {
- word-wrap: break-word !important;
- overflow-wrap: break-word !important;
- white-space: pre-wrap;
- max-width: 100%;
- display: inline-block;
- vertical-align: top;
-}
-
-/* 修复评论中的长链接 */
-.comment-content a,
-.comment-body a {
- word-wrap: break-word !important;
- overflow-wrap: break-word !important;
- word-break: break-all;
- max-width: 100%;
-}
-
-/* 修复评论段落 */
-.comment-content p,
-.comment-body p {
- word-wrap: break-word !important;
- overflow-wrap: break-word !important;
- max-width: 100%;
- margin: 10px 0;
-}
-
-/* 特殊处理代码高亮块 - 关键修复! */
-.comment-content .codehilite,
-.comment-body .codehilite {
- max-width: 100% !important;
- overflow-x: auto;
- margin: 10px 0;
- background: #f8f8f8 !important;
- border: 1px solid #ddd;
- border-radius: 4px;
- padding: 10px;
- font-size: 12px;
- line-height: 1.4;
- /* 关键:防止内容撑开容器 */
- width: 100%;
- box-sizing: border-box;
- display: block;
-}
-
-.comment-content .codehilite pre,
-.comment-body .codehilite pre {
- white-space: pre-wrap !important;
- word-wrap: break-word !important;
- overflow-wrap: break-word !important;
- margin: 0 !important;
- padding: 0 !important;
- background: transparent !important;
- border: none !important;
- font-size: inherit;
- line-height: inherit;
- /* 确保pre标签不会超出父容器 */
- max-width: 100%;
- width: 100%;
- box-sizing: border-box;
-}
-
-/* 修复代码高亮中的span标签 */
-.comment-content .codehilite span,
-.comment-body .codehilite span {
- word-wrap: break-word !important;
- overflow-wrap: break-word !important;
- /* 防止行内元素导致的溢出 */
- display: inline;
- max-width: 100%;
-}
-
-/* 针对特定的代码高亮类 */
-.comment-content .codehilite .kt,
-.comment-content .codehilite .nf,
-.comment-content .codehilite .n,
-.comment-content .codehilite .p,
-.comment-body .codehilite .kt,
-.comment-body .codehilite .nf,
-.comment-body .codehilite .n,
-.comment-body .codehilite .p {
- word-wrap: break-word !important;
- overflow-wrap: break-word !important;
-}
-
-/* 搜索结果高亮样式 */
-.search-result {
- margin-bottom: 30px;
- padding: 20px;
- border: 1px solid #e1e1e1;
- border-radius: 5px;
- background: #fff;
-}
-
-.search-result .entry-title {
- margin: 0 0 10px 0;
- font-size: 1.5em;
-}
-
-.search-result .entry-title a {
- color: #2c3e50;
- text-decoration: none;
-}
-
-.search-result .entry-title a:hover {
- color: #3498db;
-}
-
-.search-result .entry-meta {
- color: #7f8c8d;
- font-size: 0.9em;
- margin-bottom: 15px;
-}
-
-.search-result .entry-meta span {
- margin-right: 15px;
-}
-
-.search-excerpt {
- line-height: 1.6;
- color: #555;
-}
-
-.search-excerpt p {
- margin: 10px 0;
-}
-
-/* 搜索关键词高亮 */
-.search-excerpt em,
-.search-result .entry-title em {
- background-color: #fff3cd;
- color: #856404;
- font-style: normal;
- font-weight: bold;
- padding: 2px 4px;
- border-radius: 3px;
-}
-
-.more-link {
- color: #3498db;
- text-decoration: none;
- font-weight: bold;
-}
-
-.more-link:hover {
- text-decoration: underline;
-}
-.comment-content .codehilite .w,
-.comment-content .codehilite .o,
-.comment-body .codehilite .kt,
-.comment-body .codehilite .nf,
-.comment-body .codehilite .n,
-.comment-body .codehilite .p,
-.comment-body .codehilite .w,
-.comment-body .codehilite .o {
- word-break: break-all;
- overflow-wrap: break-word;
-}
-
-/* 修复评论列表项 */
-.commentlist li {
- max-width: 100%;
- overflow: hidden;
- box-sizing: border-box;
-}
-
-/* 确保评论内容不超出容器 */
-.commentlist .comment-body {
- max-width: calc(100% - 20px); /* 留出一些边距 */
- margin-left: 10px;
- margin-right: 10px;
- overflow: hidden; /* 防止内容溢出 */
- word-wrap: break-word;
-}
-
-/* 重要:限制评论列表项的最大宽度 */
-.commentlist li[style*="margin-left"] {
- max-width: calc(100% - 2rem) !important;
- overflow: hidden;
- box-sizing: border-box;
-}
-
-/* 特别处理深层嵌套的评论 */
-.commentlist li[style*="margin-left: 3rem"],
-.commentlist li[style*="margin-left: 6rem"],
-.commentlist li[style*="margin-left: 9rem"] {
- max-width: calc(100% - 1rem) !important;
-}
-
-/* 移动端优化 */
-@media (max-width: 768px) {
- .comment-content pre,
- .comment-body pre {
- font-size: 11px;
- padding: 8px;
- margin: 8px 0;
- }
-
- .commentlist .comment-body {
- max-width: calc(100% - 10px);
- margin-left: 5px;
- margin-right: 5px;
- }
-
- /* 移动端评论缩进调整 */
- .commentlist li[style*="margin-left"] {
- margin-left: 1rem !important;
- max-margin-left: 2rem !important;
- }
-}
-
-/* 防止表格溢出 */
-.comment-content table,
-.comment-body table {
- max-width: 100%;
- overflow-x: auto;
- display: block;
- white-space: nowrap;
-}
-
-/* 修复图片溢出 */
-.comment-content img,
-.comment-body img {
- max-width: 100% !important;
- height: auto !important;
-}
-
-/* 修复引用块 */
-.comment-content blockquote,
-.comment-body blockquote {
- max-width: 100%;
- overflow-wrap: break-word;
- word-wrap: break-word;
- padding: 10px 15px;
- margin: 10px 0;
- border-left: 4px solid #ddd;
- background-color: #f9f9f9;
-}
\ No newline at end of file
diff --git a/src/DjangoBlog/blog/static/blog/fonts/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqW106F15M.woff2 b/src/DjangoBlog/blog/static/blog/fonts/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqW106F15M.woff2
deleted file mode 100644
index 0fb066c55bf8721bc6ddf650ed76208b21ddd250..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 26368
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%0Dog?`W~V4;Yj5&}{JQU+om
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